Aziz K.:
> I don't see what it has to do with OPTLINK.

With a smart compiler+linker there is no need to tell apart the two cases:

enum int x = 10;
immutable int y = 20;

If the linker is smart it can replace the references to y with 20 and then 
remove all the y name from the binary, just like for the x case. With LTO the 
LDC compiler is able to do this (but it's a D1 compiler, so there is only 
const, that equals to D2 enum).

On the other hand in a case like this dmd evaluates foo() only for the x case, 
so currently the enum semantics can not be fully replaced by immutable:

import std.c.stdio: printf;
int foo(int n) {
    int tot;
    foreach (i; 0 .. n)
        tot += i;
    return tot;
}
void main() {
    enum int x = foo(10);
    printf("%d\n", x);
    immutable int y = foo(20);
    printf("%d\n", y);
}

Bye,
bearophile

Reply via email to