Dynamic Closure + Lazy Arguments = Performance Killer?

bearophile bearophileHUGS at lycos.com
Fri Oct 24 23:08:27 PDT 2008


Jason House:
> The following spends 90% of its time in _d_alloc_memory
> void bar(lazy int i){}
> void foo(int i){ bar(i); }
> void main(){ foreach(int i; 1..1000000) foo(i); }
> Compiling with -O -release reduces it to 88% :)

I see. So I presume it becomes quite difficult for D2 to compute up to the 25th term of this sequence (the D code is in the middle of the page) (it takes just few seconds to run on D1):
http://en.wikipedia.org/wiki/Man_or_boy_test

What syntax can we use to avoid heap allocation? Few ideas:

void bar(lazy int i){} // like D1
void bar(scope lazy int i){} // like D1
void bar(closure int i){} // like current D2

Bye,
bearophile



More information about the Digitalmars-d mailing list