dmd 1.056 and 2.040 release
dsimcha
dsimcha at yahoo.com
Sat Jan 30 06:25:44 PST 2010
== Quote from bearophile (bearophileHUGS at lycos.com)'s article
> Regarding this:
> Bugzilla 3556: version(CTFE)
> I have written the following little D2 program:
> import std.stdio: printf;
> static if (__ctfe) {
> int foo() {
> return 1;
> }
> } else {
> int foo() {
> return 2;
> }
> }
> enum int x1 = foo();
> void main() {
> int x2 = foo();
> printf("%d %d\n", x1, x2);
> }
> But it doesn't work, I don't understand why.
> (Isn't the usage of __ctfe normally done at compile time? Otherwise this feature
introduces another very special case in the language).
> ----------------
> Can you tell me the purpose of the following 3 changes?
> ModuleInfo changed from class to struct
> added static/final function implementations to interfaces
> http://dsource.org/projects/dmd/changeset/339
> Thank you,
> bye,
> bearophile
Because a compile-time __ctfe turned out to be almost impossible to implement.
Therefore, __ctfe is nominally a regular (runtime) variable that evaluatest to
true at compile time and false at runtime. The proper use is if(__ctfe), not
static if(__ctfe). However, if(0) statements are thrown out by the code gen, so
there should be no runtime performance hit for using if(__ctfe).
More information about the Digitalmars-d-announce
mailing list