I'm looking to try out std.container.Array for a few huge arrays that the GC isn't cutting it for. I noticed that this container is always bounds checked via enforce(). This has huge performance costs:

import std.stdio, std.container, std.datetime;

void main() {
    Array!uint arr;
    arr.length = 10_000_000;
    //auto arr = new uint[10_000_000];
    auto sw = StopWatch(autoStart);
    foreach(i; 0..arr.length) {
        arr[i] = i;
    }

    writeln(sw.peek.milliseconds);
}

This benchmark takes about 86 milliseconds with -O -inline -release. When I use the builtin version instead (comment out the std.container.Array stuff and uncomment the uint[] stuff) it only takes about 18 milliseconds. Should I change front(), popFront(), opIndex(), etc. to be templates that use assert and give the caller's line and file on failure, just like regular builtin arrays?
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to