aldanor:
On Friday, 19 December 2014 at 10:57:47 UTC, aldanor wrote:
Something about the loop in the first case not depending on n
and the compiler being able to figure it is out and only drop
into recursion once?
That's just a wild guess, but does it get transformed into
something like this?
typeof(return) result;
typeof(return) tmp = foo1(data, i + 1, max);
foreach (immutable n; data)
result ~= tmp;
That's not the cause. You can see it if you add n to the foo
functions, to remove that possible optimization:
foo1(data, n, i + 1, max);
(And the compiler is not allowed to perform that optimization
because foos aren't strongly pure).
Bye,
bearophile