Final by default?
Steven Schveighoffer
schveiguy at yahoo.com
Fri Mar 14 07:33:21 PDT 2014
On Fri, 14 Mar 2014 05:58:28 -0400, Regan Heath <regan at netmail.co.nz>
wrote:
> On Fri, 14 Mar 2014 08:51:05 -0000, 1100110 <0b1100110 at gmail.com> wrote:
>>
>> version (X86 || X86_64 || PPC || PPC64 || ARM || AArch64)
>> {
>> enum RTLD_LAZY = 0x00001;
>> enum RTLD_NOW = 0x00002;
>> enum RTLD_GLOBAL = 0x00100;
>> enum RTLD_LOCAL = 0x00000;
>> }
>> else version (MIPS32)
>> {
>> enum RTLD_LAZY = 0x0001;
>> enum RTLD_NOW = 0x0002;
>> enum RTLD_GLOBAL = 0x0004;
>> enum RTLD_LOCAL = 0;
>> }
>
> Walter's point, I believe, is that you should define a meaningful
> version identifier for each specific case, and that this is "better"
> because then you're less concerned about where it's supported and more
> concerned with what it is which is/isn't supported.
>
> Maintenance is very slightly better too, IMO, because you
> add/remove/alter a complete line rather than editing a set of || && etc
> which can in some cases be a little confusing. Basically, the chance of
> an error is very slightly lower.
>
> For example, either this:
>
> version(X86) version = MeaningfulVersion
> version(X86_64) version = MeaningfulVersion
> version(PPC) version = MeaningfulVersion
> version(PPC64) version = MeaningfulVersion
> version(ARM) version = MeaningfulVersion
> version(AArch64) version = MeaningfulVersion
>
> version(MeaningfulVersion)
> {
> }
> else version (MIPS32)
> {
> }
>
> or this:
>
> version (X86) version = MeaningfulVersion
> version (X86_64) version = MeaningfulVersion
> version (PPC) version = MeaningfulVersion
> version (PPC64) version = MeaningfulVersion
> version (ARM) version = MeaningfulVersion
> version (AArch64) version = MeaningfulVersion
>
> version (MIPS32) version = OtherMeaningfulVersion
>
> version (MeaningfulVersion)
> {
> }
> else version (OtherMeaningfulVersion)
> {
> }
>
> Regan
I think the point we are trying to make is, what if MeaningfulVersion does
not exist? That is, how do you attribute a name to those flags?
Then it becomes a "where's waldo" to see if your particular platform
defines the arbitrary name you had to choose.
There's not always an easy to define symbol for everything.
BTW, && does not present the same problem, because there isn't much
difference between:
version(x && y)
version(x) version(y)
But there is a huge difference between
version(x || y)
version(x) version = somearbitrarysymbol;
version(y) version = somearbitrarysymbol;
version(somearbitrarysymbol)
-Steve
More information about the Digitalmars-d
mailing list