'final' variables

Benji Smith dlanguage at benjismith.net
Tue Mar 20 09:46:50 PDT 2007


Andrei Alexandrescu (See Website For Email) wrote:
>> This is the part I'm not sure about. As with C++'s "const", I don't 
>> think the compiler can conclude anything and therefor it can't 
>> optimize anything. A "final" variable is not constant.
> 
> final int x = 42;
> 
> Change that :o).
> 
> Andrei

How does this interact with CTFE for variables that are declared as 
const. With previous versions of the compiler, I know that it would try 
to constant-fold this code, resulting in an inlined constant from the 
result of the CTFE:

    const int abc = kaboom();

That code shouts out to me (and to the compiler) that the kaboom() 
method MUST be evaluated at compile-time. But this code is not nearly so 
clear:

    final int xyz = shabam();

Just because xyz can't be re-bound after its initial assignment doesn't 
necessarily mean that shabam() should be executed at compile-time. With 
the new const/final/invariant semantics, how will the compiler know when 
to perform constant-folding (or, I suppose, "final-folding") on functions?

--benji



More information about the Digitalmars-d mailing list