On Sunday, 13 August 2017 at 09:08:14 UTC, Petar Kirov
[ZombineDev] wrote:
This instantiation:
sum_subranges(std.range.iota!(int, int).iota(int, int).Result,
uint)
of the following function:
auto sum_subranges(T)(T input, uint range)
{
import std.range : chunks, ElementType, array;
import std.algorithm : map;
return input.chunks(range).map!(sum);
}
gets optimized with LDC to:
[snip]
I.e. the compiler turned a O(n) algorithm to O(1), which is
quite neat. It is also quite surprising to me that it looks
like even dmd managed to do a similar optimization:
[snip]
Execution of sum_subranges is already O(1), because the
calculation of the sum is delayed: the return type of the
function is not `uint`, it is `MapResult!(sum, <range>)` which
does a lazy evaluation of the sum.
- Johan