Conditional compilation inside asm and enum declarations

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Jul 14 08:56:12 PDT 2009


Bill Baxter wrote:
> On Mon, Jul 13, 2009 at 10:05 PM, Walter
> Bright<newshound1 at digitalmars.com> wrote:
>> Julian Salazar wrote:
>> It's been rehashed here several times (not to rag on you, just to point out
>> that it isn't something that's been overlooked). To sum up, I've worked a
>> lot with both styles - #ifdef, and separating dependencies into independent
>> modules. The latter works a lot better. I know it's hard to believe if
>> you're used to the #ifdef style. I've been doing some work to remove
>> #ifdef's from the dmd compiler source, and the results so far have been very
>> satisfactory.
> 
> But from where I sit it looked like Walter didn't really convince
> anyone.  To me this seems like a point where D is overly patronizing,
> to use the phrase from a recent post.

FWIW I've recently experimented in Phobos with function-level 
versioning, e.g.:

version(Posix) void setenv(in char[] name, in char[] value, bool overwrite)
{
     ...
}

version(Windows) void setenv(in char[] name, in char[] value, bool 
overwrite)
{
     ...
}

Then I have the function right there with all versioned implementations. 
To me that seems better than Phobos' existing style of version'ing large 
portions of code, which inevitably results in duplicating a lot of the 
functionality in two places.

One other thing I like about the approach above is that it does not 
necessitate an extra level of indentation, and it doesn't make you feel 
guilty for not adding it. I cringe whenever I see at the top level:

version (something)
{
non_indented_stuff

more_non_indented_stuff

etc
}



Andrei



More information about the Digitalmars-d mailing list