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