Another compile-time perversion. Or not?

Bruno Medeiros brunodomedeiros+spam at com.gmail
Thu Sep 7 02:34:17 PDT 2006


Don Clugston wrote:
> Bruno Medeiros wrote:
>> Walter Bright wrote:
>>> Don Clugston wrote:
>>>> Walter Bright wrote:
>>>>> There's a bit of chicken and egg problem with it - can't tell if 
>>>>> it's referenced or not until code generation, which is intimately 
>>>>> wrapped up with object file generation.
>>>>
>>>> But isn't it true that a template consisting only of
>>>> 'const' and 'static if' will *never* result in code generation?
>>>
>>> There can be:
>>>
>>> template Foo(T)
>>> {
>>>     static if (...)
>>>     const T x;
>>> }
>>>
>>> int* p = &Foo!(int).x;
>>>
>>
>> Yes, because there are two very different meanings for "const" in D : 
>> there's "compile-time constant", and there's "variable that can only 
>> be assigned once", for which the keyword 'final' is used in every 
>> other modern C-like language, which is how it should be done in D as 
>> well (or with some other keyword).
> 
> Bruno, I agree that 'final' would be much better for 'write-once' 
> values; but the compiler can tell the difference anyway, based on 
> whether it has an =.
> 
> If you change the line to
> 
> const T x = 6;
> 
> then the problematic line won't compile. By the time the compiler has 
> finished instantiating the template, it should know if it contained 
> 'const=' or 'write-once const'.
> 
> I really think that it is worth putting some thought into making this 
> early discarding possible. If all else fails, one possibility would be 
> to allow 'const' in front of 'template' to signify that the template 
> should be discarded. But I don't think that's necessary.
> The refined rule is:
> Templates with only 'const =' and 'static if' can always be discarded.

I know that, I did say it in the post:

Bruno Medeiros wrote:
 >
 > (Not that that would be required for or even helpful to the compiler to
 > be able to differentiate the two meanings of 'const', in order to see
 > which templates can be discarded)
 >

;)


-- 
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D



More information about the Digitalmars-d-announce mailing list