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.

Reply via email to