On 14 Mar 2014 18:30, "Paulo Pinto" <pj...@progtools.org> wrote: > > Am 14.03.2014 19:06, schrieb Iain Buclaw: >> >> On 14 March 2014 17:53, Walter Bright <newshou...@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. :)