On Sunday, 19 April 2015 at 23:49:08 UTC, anonymous wrote:
On Sunday, 19 April 2015 at 21:42:23 UTC, Ulrich Küttler wrote:
groupBy is a nice example as it laboriously adds reference
semantics to forward ranges but assumes input ranges to posses
reference semantics by themselves.
All ranges are input ranges, though. Input ranges are the least
specialised category. I think it's a mistake to assume/require
anything only for input ranges that are not forward ranges.
Yes and no. It is reasonable to provide special implementations
for ranges that are just input ranges. This is what groupBy does.
The user gets a function that works with all kinds of ranges.
I guess we could require reference semantics for all input
ranges (including forward ranges and higher-ups). That would be
a rather clean way out of this mess. But it would be a major
effort. And I guess it would hurt performance, maybe a lot.
Definitely, general reference semantics would solve a ton of
difficulty. However, this would not be D anymore.
This seems to be the catch: For optimal performance memory layout
is important. You cannot hide it behind an interface.
At this point the solution in byLineCopy feels ad hoc.
I think byLineCopy solves a different problem. ByLine already
has this:
https://github.com/D-Programming-Language/phobos/blob/v2.067.0/std/stdio.d#L1592-L1598
The same indirection in byLineCopy. This is what I was referring
to:
https://github.com/D-Programming-Language/phobos/blob/v2.067.0/std/stdio.d#L1783-L1789
Whoever did that knew very well what is going on.