range.save

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Thu Nov 26 12:22:17 PST 2015


On Thursday, 26 November 2015 at 17:23:07 UTC, Andrei 
Alexandrescu wrote:
> As of right now the situation with ranges is suboptimal - you 
> need to use .save() but if you don't the sheer copy works most 
> of the time, just not always. It may be nice to improve on that 
> a bit, for example to require input ranges that are not forward 
> ranges to indeed have reference semantics. Or require forward 
> ranges to define .save() but only with the body { return this; 
> }. Either of these would break code.

As long as a range has semantics very similar to a dynamic array, 
it works great, but as soon as it doesn't, it tends to fall apart 
in subtle ways. The current situation is simply too error-prone 
and unwieldy IMHO. It works great in the common case but 
definitely falls apart at the edges. And even if you're diligent 
about getting it right, the number of calls to save that are 
required is ridiculous. So, while I completely agree that we want 
to avoid breaking code if we can, I'm also increasingly convinced 
that we should look at what would need to be done to make ranges 
clean to use without being error-prone and see if we can get 
there with minimal breaking changes. Regardless, if we _do_ make 
breaking changes with regards to ranges, we need to be very sure 
that we want to make them.

- Jonathan M Davis


More information about the Digitalmars-d mailing list