Final by default?

Iain Buclaw ibuclaw at gdcproject.org
Fri Mar 14 14:14:59 PDT 2014


On 14 Mar 2014 18:30, "Paulo Pinto" <pjmlp at progtools.org> wrote:
>
> Am 14.03.2014 19:06, schrieb Iain Buclaw:
>>
>> On 14 March 2014 17:53, Walter Bright <newshound2 at digitalmars.com> wrote:
>>>
>>> On 3/14/2014 10:26 AM, Johannes Pfau wrote:
>>>>
>>>>
>>>> I use manifest constants instead of version identifiers as well. If a
>>>> version identifier affects the public API/ABI of a library, then the
>>>> library and all code using the library always have to be compiled with
>>>> the same version switches(inlining and templates make this an even
>>>> bigger problem). This is not only inconvenient, it's also easy to think
>>>> of examples where the problem will only show up as crashes at runtime.
>>>> The only reason why that's not an issue in phobos/druntime is that we
>>>> only use compiler defined versions there, but user defined versions are
>>>> almost unusable.
>>>
>>>
>>>
>>> Use this method:
>>>
>>>
>>>      --------
>>>      import wackyfunctionality;
>>>      ...
>>>      WackyFunction();
>>>      --------
>>>      module wackyfunctionality;
>>>
>>>      void WackyFunction() {
>>>          version (Linux)
>>>            SomeWackyFunction();
>>>          else version (OSX)
>>>              SomeWackyFunction();
>>>          else
>>>              ... workaround ...
>>>      }
>>>      --------
>>
>>
>>
>> Some years down the line (and some platform testing) turns into:
>>
>> --------
>> module wackyfunctionality;
>>
>> void WackyFunction() {
>>      version (Linux) {
>>          version (ARM)
>>              _SomeWackyFunction();
>>          else version (MIPS)
>>             MIPS_SomeWackyFunction();
>>          else version (X86)
>>             SomeWackyFunction();
>>          else version (X86_64)
>>             SomeWackyFunction();
>>          else
>>            ... should be some wacky function, but workaround for general
case ...
>>      }
>>      else version (OSX) {
>>          version (PPC)
>>             iSomeWackyFunction();
>>          else
>>             SomeWackyFunction();   // In hope there's no other Apple
hardware.
>>      }
>>      else version (OpenBSD) {
>>        /// Blah
>>      }
>>      else version (Haiku) {
>>        /// Blah
>>      }
>>      else
>>          ... workaround ...
>> }
>> --------
>>
>
>
> That is why the best approach is to have one module per platform specific
code, with a common interface defined in .di file.
>

Don't tell me, tell the druntime maintainers.  :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20140314/83fce60c/attachment.html>


More information about the Digitalmars-d mailing list