Final by default?

1100110 0b1100110 at gmail.com
Fri Mar 14 00:34:58 PDT 2014


On 3/13/14, 17:43, Walter Bright wrote:
> On 3/13/2014 3:21 PM, Timon Gehr wrote:
>> On 03/13/2014 02:32 PM, Steven Schveighoffer wrote:
>>>
>>> The one I would really like to see is logical OR. There is no easy way
>>> around this, one must come up with convoluted mechanisms that are much
>>> harder to design, write, and understand than just version(x || y)
>>
>> version(A) version=AorB;
>> version(B) version=AorB;
>> version(AorB){ }
>>
>
> If you're writing things like that, it's still missing the point. The
> point is not to find workarounds, but to rethink just what feature is
> being version'd on.
>
> For example, suppose it's wrapping a call to SomeWackyFunction:
>
> version (Linux)
>      SomeWackyFunction();
> else version (OSX)
>      SomeWackyFunction();
> else
>      ... workaround ...
>
> Execrable answer:
>
>      version (Linux) version=LinuxOrOSX;
>      version (OSX) version=LinuxOrOSX;
>      ...
>      version (LinuxOrOSX)
>      SomeWackyFunction();
>      else
>          ... workaround ...
>
> This is execrable because LinuxOrOSX:
>
> 1. has no particular relationship to SomeWackyFunction()
> 2. makes for confusion if LinuxOrOSX is used also to version in other
> things
> 3. makes for what do I do if I add in FreeBSD? Rename to
> LinuxOrOSXOrFreeBSD ? yeech
>
>
> Better answer:
>
>      version (Linux) version=hasSomeWackyFunction;
>      version (OSX) version=hasSomeWackyFunction;
>      ...
>      version (hasSomeWackyFunction)
>      SomeWackyFunction();
>      else
>          ... workaround ...
>
> At least this is maintainable, though it's clumsy if that code sequence
> appears more than once or, worse, must be replicated in multiple modules.
>
> Even better:
>
>      --------
>      import wackyfunctionality;
>      ...
>      WackyFunction();
>      --------
>      module wackyfunctionality;
>
>      void WackyFunction() {
>          version (Linux)
>            SomeWackyFunction();
>          else version (OSX)
>              SomeWackyFunction();
>          else
>              ... workaround ...
>      }
>      --------
>
> Simple, maintainable, easy on the eye.
>
>


...And code duplication everywhere!


More information about the Digitalmars-d mailing list