Tricky semantics of ranges & potentially numerous Phobos bugs

monarch_dodra monarchdodra at gmail.com
Wed Oct 17 13:06:57 PDT 2012


On Wednesday, 17 October 2012 at 19:14:12 UTC, Jonathan M Davis 
wrote:
> On Wednesday, October 17, 2012 12:39:13 Andrei Alexandrescu 
> wrote:
>> On 10/16/12 1:28 PM, Jonathan M Davis wrote:
>> > So, it's fine that ByLine is a range as long as we're 
>> > willing to put up
>> > with it not working with a lot of range-based functions 
>> > because of its
>> > abnormal behavior. But I don't think that it's at all 
>> > reasonable for
>> > range-based functions in general to not be able to rely on 
>> > front
>> > returning the same type every time or on its value 
>> > disappearing or
>> > becoming invalid in some way after a call to popFront. 
>> > That's completely
>> > untenable IMHO.
>> 
>> Then what is to you the difference between an input range and 
>> a forward
>> range?
>
> Whether you can get a copy of the range. If you call save, you 
> can save its
> current state and have two copies of the range to operate on 
> separately,
> That's completely different from whether front can be kept 
> around or not. It's
> perfectly possible to have an input range whose previous front 
> does not get
> invalidated by a call to popFront. ByLine would be that way if 
> it allocated a
> new buffer instead of reusing the old one. It just doesn't do 
> that because it's
> less efficient to do so.
>
> - Jonathan M Davis

This.

When you think about it, byLine *could* be a ForwardRange (it 
could save its pget position in the file), allowing it to 
backtrack, but that *still* wouldn't prevent it from overwriting 
its own internal buffer on calls to front: That is just a detail 
of its implementation.

A range's "Input-ness" or "Forward-ness" is completely orthogonal 
from the returned front's transitiveness.



More information about the Digitalmars-d mailing list