static static
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Nov 11 13:16:15 PST 2009
Yigal Chripun wrote:
> bearophile wrote:
>> Yigal Chripun:
>>
>>> Regardless of usefulness (or good design) of such variables, this sounds
>>> extremely dangerous. The compiler must not change semantics of the
>>> program based on optimization. optimizing away such variables most
>>> definitely alters the semantics.
>>
>> Maybe you have misunderstood, or I have explained the things badly. So
>> I explain again.
>>
>> I have seen that LDC (when it performs link-time optimization, that's
>> not done in all situations) keeps just one copy of constants inside
>> the binary even if such constants are present in more than one
>> template instance. In the situations where LTO is available I think
>> this doesn't cause problems.
>>
>> Then I am half-seriously proposing a syntax like:
>> T foo(T)(T x) {
>> static static int y;
>> // ...
>> }
>>
>> Where the y is now static to (shared among) all instances of the
>> templated function foo. This may be a little error-prone and maybe not
>> that useful, but again here the compiler doesn't change the semantics
>> of the program, because using a double static keyword the programmer
>> has stated such intention.
>>
>> Bye,
>> bearophile
>
> Oh. ok. I seems I completely misunderstood you. It wasn't clear to me
> before that your were talking about constants. Of course it's perfectly
> OK to optimize _constants_ like that.
>
> IMO, static is harmful and should be avoided. some newer languages
> recognize this and completely remove this from the language. I'd like to
> see D going in that path rather than adding even more ways to use static.
>
> regarding your concrete proposal - as others said, you can use global
> variables for that or put this inside a struct if you want to limit the
> scope.
One option that hasn't been mentioned:
private ref int myInt() {
static int theInt;
return theInt;
}
void fun(T)(T arg) {
... use myInt() ...
}
Andrei
More information about the Digitalmars-d
mailing list