Final by default?
Iain Buclaw
ibuclaw at gdcproject.org
Fri Mar 14 11:06:37 PDT 2014
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 ...
}
--------
More information about the Digitalmars-d
mailing list