iopipe alpha 0.0.1 version

Dmitry Olshansky dmitry.olsh at gmail.com
Tue Oct 24 19:52:27 UTC 2017


On Tuesday, 24 October 2017 at 19:05:02 UTC, Martin Nowak wrote:
> On Tuesday, 24 October 2017 at 14:47:02 UTC, Steven 
> Schveighoffer wrote:
>> iopipe provides "infinite" lookahead, which is central to its 
>> purpose. The trouble with bolting that on top of ranges, as 
>> you said, is that we have to copy everything out of the range, 
>> which necessarily buffers somehow (if it's efficient i/o), so 
>> you are double buffering. iopipe's purpose is to get rid of 
>> this unnecessary buffering. This is why it's a great fit for 
>> being the *base* of a range.
>>
>> In other words, if you want something to have optional 
>> lookahead and range support, it's better to start out with an 
>> extendable buffering type like an iopipe, and bolt ranges on 
>> top, vs. the other way around.
>
> Arguably this it is somewhat hacky to use a range as end marker 
> for slicing sth., but you'd get the same benefit, access to the 
> random buffer with zero-copying.
>
> auto beg = rng.save; // save current position
> auto end = rng.find("bla"); // lookahead using popFront
> auto window = beg[0 .. end]; // get a random access window to 
> underlying buffer


I had a design like that except save returned a “mark” (not full 
range) and there was a slice primitive. It even worked with 
patched std.regex, but at a non-zero performance penalty.

I think that maintaining the illusion of a full copy of range 
when you do “save” for buffered I/O stream is too costly. Because 
a user can now legally advance both - you need to RC buffers 
behind the scenes with separate “pointers” for each range that 
effectively pin them.

> So basically forward ranges with slicing.
> At least that would require to extend all algorithms with 
> `extend` support, though likely you could have a small extender 
> proxy range for IOPipes.
>
> Note that rng could be a wrapper around unbuffered IO reads.




More information about the Digitalmars-d-announce mailing list