Must ranges support `r1 = r2;`?

Jack Stouffer jack at jackstouffer.com
Mon Apr 16 15:58:34 UTC 2018


On Saturday, 24 March 2018 at 21:44:35 UTC, ag0aep6g wrote:
> Long version: <https://issues.dlang.org/show_bug.cgi?id=18657> 
> ("std.range and std.algorithm can't handle refRange").
>
> Short version: With two `std.range.RefRange`s, `r1 = r2;` does 
> not what other Phobos code expects.
>
> Question is: Who's at fault? Where do I fix this? Do ranges 
> have to support assignment as expected - even though std.range 
> doesn't mention it? Or should range-handling code never do that 
> - even though it comes naturally and is widespread currently?

Posting this from the PR.

This is a band-aid over the issue of what to do with funky 
operator overloads in ranges. In conjunction with this issue, you 
also have to assume that one could do stuff in the ctor that 
would mess up existing range code in Phobos. What really needs to 
happen is the range spec needs to be updated with a clear list of 
assumptions that Phobos makes in regards to these functions. I'm 
pretty sure that RefRange would have been designed differently if 
the designer realized the results of overloading opAssign like 
that.

In a perfect world, we'd have a pre-constructed test suite that 
people could plug their range (with some data in it) into, where 
all the tests make sure all Phobos assumptions hold true.

In my opinion, it would be best to update the range spec and go 
from there.


More information about the Digitalmars-d mailing list