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.