std.v2020.algorithm etc[ WAS: Is run.d going to be expand for runtime and the phobos library?]

Steven Schveighoffer schveiguy at gmail.com
Sat Jun 20 18:26:43 UTC 2020


On 6/20/20 8:30 AM, Stanislav Blinov wrote:
> On Saturday, 20 June 2020 at 11:20:13 UTC, Petar Kirov [ZombineDev] wrote:
> 
>> As far as I know, back when the ranges API was worked on postblit 
>> ctors didn't work reliably, so .save() was the only option.
> 
> Funny that, at the moment it's the copy ctors that aren't working 
> reliably (e.g. they're not working at all with arrays). :)
> 
>> If it had worked, we could require that non-forward ranges are 
>> non-copyable.
> 
> I can imagine this would be quite some work to adapt all of Phobos to 
> *that*. I mean, things like
> 
> auto rem = makeSomeInputRange.find!pred;
> auto flt = makeSomeInputRange.filter!pred;
> 
> Those would not compile. They could be made to compile by `move`ing the 
> argument for the return. But then you still won't be able to pass those 
> results around, unless via a refRange or `move`.

You shouldn't need move for rvalues, which those should be. Algorithms 
that support non-forward ranges should be able to cope with using move 
where required on their parameters.

There have been a few libraries released that use non-copyable structs 
to model things that making copies of will prove problematic. For 
instance, file handles. And people seem to be able to use these 
reasonably well.

But the larger point is that true input-only ranges are rare. The only 
problem is for classes, since you cannot invoke a copy constructor on those.

It would be a drastic change, I don't see it happening. But the status 
quo of save() is pretty bad as well.

-Steve


More information about the Digitalmars-d mailing list