Are there any default dmd optimizations
Timon Gehr
timon.gehr at gmx.ch
Thu Feb 28 11:03:02 PST 2013
On 02/28/2013 05:55 AM, Walter Bright wrote:
> On 2/27/2013 8:01 PM, deadalnix wrote:
>> Plus, this is really hard to ensure that everything is initialized
>> properly
>> without going eager with setting to init.
>
> Yeah, the forward reference order of evaluation thingie.
It's really easy. DMD can be convinced to do a sufficient conservative
analysis even now, but the behaviour is undocumented and seems
unintentional.
void main() {
void foo()() { bar(); }
void bar()() { i = 3; }
int i;
foo();
}
It's a fine idea to disallow the use of both a shadowed and the
shadowing symbol in the same function anyway, so we wouldn't lose a lot
by allowing forward references from local functions.
Then the template behaviour could be fixed:
int i = 0;
void main(){
void foo(int x){ i = x; }
foo(1);
int i = 0;
foo(2);
assert(.i==2&&i==0);
}
int i = 0;
void main(){
void foo(int x){ i = x; }
// foo(1);
int i = 0;
foo(2);
assert(.i==0&&.i==2);
}
(Currently, presence of one call can magically influence the behaviour
of other calls.)
More information about the Digitalmars-d
mailing list