Hello.

I'm muddling over the following code, which compares an array/take composition with the analogous imperative code. For medium-large values of n, I'm seeing a fivefold degradation in performance, which blows up to 30 times worse at n=50000000.

Any ideas on why this is or better ways to accomplish the same?

import std.range;
import std.date;
import std.random;
import std.array;
import std.stdio;

void main(){
    for(int n = 500; n <= 500000000; n *= 10){
        writeln(n);
        auto r = rndGen();
        auto tz = getUTCtime();
        auto a = new int[n];
        foreach(ref aa; a){
            aa = r.front();
            r.popFront();
        }
        auto tz2 = getUTCtime();
        auto a2 = array(take(r,n));
        auto tz3 = getUTCtime();
        writeln("\tarr: ",tz2-tz);
        writeln("\trange: ",tz3-tz2);
    }
}
~

Reply via email to