Descent 0.5.4 released

Don nospam at nospam.com
Wed Jan 28 05:18:01 PST 2009


Ary Borenszweig wrote:
> Brad Roberts escribió:
>> Brad Roberts wrote:
>>> Ary Borenszweig wrote:
>>>> Bill Baxter escribió:
>>>>> Another question -- I was wondering what it does for CTFE functions.
>>>>> I'm guessing it evaluates them and spits out the result.  If so that
>>>>> could be very very helpful.  Especially for code-building CTFE mixins.
>>>>>  I don't think you had an example like that in the vid.
>>>> It does! See the first part of the video, when I do:
>>>>
>>>> int x = 1 + 2 + 3 + 4 + someFunc(5);
>>>>
>>>> and it shows:
>>>>
>>>> int x = 25;
>>>>
>>>> It just evaluated someFunc. :-)
>>> Given that int x isn't a const expression, is someFunc(5) supposed to be
>>> evaluated at compile time like that?
>>>
>>> Later,
>>> Brad
>>
>> Hrm.. unless it's just bog standard inlining and const folding going on,
>> which is quite possible.
> 
> Great observation! I remember functions like that not being evaluated 
> unless the variable was declared const. I just debugged that and checked 
> with DMD's source code, and it seems the expression in the initializer 
> is evaluated if the variable declaration is not inside a function (check 
> VarDeclaration::semantic2 and ExpInitializer::semantic, which invoked 
> optimize at the end).
> 
> I wonder why is that behaviour defined like that...

Because then it's a static global. And static initializers get run at 
compile time.


More information about the Digitalmars-d-announce mailing list