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

Paul Backus snarwin at gmail.com
Sat Jun 20 14:36:14 UTC 2020


On Saturday, 20 June 2020 at 13:29:43 UTC, Stanislav Blinov wrote:
> On Saturday, 20 June 2020 at 13:07:41 UTC, Paul Backus wrote:
>> On Saturday, 20 June 2020 at 12:42:01 UTC, Stanislav Blinov 
>> wrote:
>>> On Saturday, 20 June 2020 at 10:43:41 UTC, Paul Backus wrote:
>>>
>>>> Also, switch from `void popFront()` to `typeof(this) rest`, 
>>>> so that we can have `const` and `immutable` ranges.
>>>
>>> *Switch* is probably too restrictive. For a given range a 
>>> `popFront` may be more efficient than a `range = range.rest`. 
>>> Making `rest` a valid range primitive though, and using where 
>>> appropriate - that'd be awesome.
>>
>> For non-forward ranges, there's no promise that the original 
>> range (or any copies of it) will remain valid after calling 
>> `rest`, so you can always implement `rest` like this:
>>
>>     auto rest() {
>>         this.popFront;
>>         return this;
>>     }
>
> For sure. I'm just pointing out that *switching* to `rest` 
> isn't a likely way to go. I.e. that would've implied dropping 
> the use of popFront altogether :) *Adopting* `rest` - yes, 
> +100%.

By "switching", I just mean that `std.v2.range.isInputRange` 
would only check for `rest`, not `popFront`, and that new code 
would be free to only implement `rest`. Naturally, we would also 
provide free-function versions of `rest` and `popFront` for 
compatibility between the two APIs.


More information about the Digitalmars-d mailing list