Functional vs simple code
ixid
nuaccount at gmail.com
Tue Oct 2 14:34:17 PDT 2012
On Tuesday, 2 October 2012 at 20:48:31 UTC, ixid wrote:
> Without optimization the range and algorithm method takes about
> 10 times as long as the simple code below it, with no array
> bounds checking and optimization it takes six times as long.
> Why is the difference so huge? I'd expect a moderate overhead
> but that's a big difference.
>
> module main;
> import std.stdio, std.algorithm, std.range, std.datetime;
>
> enum MAX = 10_000_000UL;
>
> void main() {
> StopWatch sw;
> sw.start;
>
> auto sum1 = MAX.iota.map!(x => x * x).reduce!"a + b";
>
> sw.peek.msecs.writeln("msecs");
> sum1.writeln;
> sw.start;
>
> ulong sum2 = 0;
> foreach(i;0..MAX)
> sum2 += i * i;
>
> sw.peek.msecs.writeln("msecs");
>
> sum2.writeln;
> }
I realised I was making the functional version more complicated
than necessary. This version is faster but still four times
slower than the simple version:
MAX.iota.reduce!"a + b * b".writeln;
More information about the Digitalmars-d-learn
mailing list