Final by default?

Iain Buclaw ibuclaw at gdcproject.org
Fri Mar 14 02:55:01 PDT 2014


On 14 March 2014 08:51, 1100110 <0b1100110 at gmail.com> wrote:
> On 3/14/14, 3:02, Walter Bright wrote:
>>
>> On 3/14/2014 12:34 AM, 1100110 wrote:
>>>
>>> ...And code duplication everywhere!
>>
>>
>> Actually, very little of that.
>
> I don't know what you'd call this then...
> Exact same bit of code, repeated multiple times for versions which could be
> OR'd together.
>
>
>     version (X86)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0x00000;
>     }
>     else version (X86_64)
>     {
>         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;
>     }
>     else version (PPC)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0;
>     }
>     else version (PPC64)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0;
>     }
>     else version (ARM)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0;
>     }
>     else version (AArch64)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0;
>     }
>
> Yeah there are a few differences, but it would be trivial to collapse this
> down...
>
> Just for funsies:
>
>     version (X86 || X86_64)
>     {
>         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;
>     }
>     else version (PPC)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0;
>     }
>     else version (PPC64 || ARM || AArch64)
>     {
>         enum RTLD_LAZY = 0x00001;
>         enum RTLD_NOW = 0x00002;
>         enum RTLD_GLOBAL = 0x00100;
>         enum RTLD_LOCAL = 0;
>     }
>
>
> Oh wait, isn't 0x00000 the same as 0? (I honestly don't know if that
> matters, but assuming it doesn't...)
>
>     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;
>     }
>
> Huh, for not having any code duplication it sure is a hell of a lot shorter
> when combined...


This is exactly the problem I wanted to avoid in druntime.  Someone
needs to pull their finger out and decide how we are going to tackle
the porting chasm we are heading into.


More information about the Digitalmars-d mailing list