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