On Sunday, 24 March 2013 at 09:36:34 UTC, Jonathan M Davis wrote:
On Sunday, March 24, 2013 09:42:28 deadalnix wrote:
For instance, passing a range by value is unspecified.

And it never will be specified, because it's range-dependent and can't ever be anything but range-dependent. That's why save was introduced in the first place. If you want to guarantee that a range is consumed, you make sure that the range-based function that you're passing the range to takes it by ref. If you want to guarantee that it's not consumed, then you call save and pass its result to the range-based function. Beyond that, you have to write your code in a way in which it doesn't matter whether the range is consumed or not when it's passed to a function, because that depends on the type of the range.

There's literally no technical way to avoid this except for

1. Require that all range-based functions take ranges by ref, which is not only unenforceable but would kill function chaining, which is one of the great
strengths of ranges.

2. Require that all ranges be reference types, which again, is not enforceable, but also wouldn't work with ranges, because they're always sliced when you pass them to a function (and you couldn't require that all ranges be value types, because pure input ranges can never be value types).

So, we're stuck. Sure, the fact that whether a range is consumed or not when passed to a function is effectively undefined is troublesome, but there's really
no way around it.


Sure we are stuck, because fixing this would require a refinement of the range concept, and it is kind of too late for that.

But you say that this inherently impossible without actually providing anything convincing in that direction. I don't think it is, I just think that as usual as hoc solutions are conglomerated in what is now ranges.

Reply via email to