Julian Salazar wrote:
Hi, I'm new here to the community but I've been using D for a while now, and I have to say that it's a great programming language. I'd like to get involved in this community and help shape this language.

Welcome!

I'm just wondering about a minor issue: why are conditional blocks invalid within expressions such as enum and asm? I mean, in trivial cases it's fine, but in instances where code duplication is a big maintainability nightmare, making conditional compilation more flexible would have benefits for developers.

Something like (I know it's a trivial example, but you get the point):

asm {
   version(x86) mov EAX, 1;
   else version(x86_64) mov EAX, 2;
}

would trigger an error.

A much more convincing example is with position-independent code for Linux shared libraries. In this case you may have a long function, with only a single instruction right in the middle which needs to be changed. This example is taken from my bigint library. In the middle of a 50-line function is this single PIC-dependent instruction:

asm {
    :
    :
    adc ECX, EDX;
version (D_PIC) {} else { // the next trick can't be done in PIC mode.
      mov storagenop, EDX; // make #uops in loop a multiple of 3
}
    mul int ptr [ESP + 8];
    :
}

But I'd class this as a minor annoyance rather than a significant problem.

Reply via email to