stream == range ?

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Sun May 31 08:58:14 PDT 2015


On 5/31/15 8:44 AM, Nick Sabalausky wrote:
> On 05/30/2015 07:06 AM, short2cave wrote:
>> Do the classic streams still make sense when we have Ranges ?
>>
>
> I've been thinking the same thing lately. In fact, I'd been meaning to
> make a post regarding that.
>
> Phobos's std.stream has been slated for an overhaul for awhile now, but
> it seems to me that ranges are already 90% of the way to BEING a total
> std.stream replacement:
>
> Output Streams: AFAICT, 100% covered by output ranges. Output streams
> exist as a place for sticking arbitrary amounts of sequential data.
> Output range's "put" does exactly that.
>
> Input Streams: Input ranges are very nearly a match for this. AFAICT,
> The only thing missing here is the ability to "read" not just the one
> "front" value, but to read the front N values as a chunk, without an
> O(n) sequence of front/popFront. So we'd just need another "optional"
> range characteristic: hasFrontN (or some such).

Given that it seems Design by Introspection has been working well for us 
and we're continuing to enhance its use in Phobos, it seems to me that 
optional methods for ranges are the way to go.

An optional method for any range is

size_t bulkRead(T[] target);

which fills as much as possible from target and returns the number of 
items copied.

Another good candidate for optional methods is lookahead.


Andrei



More information about the Digitalmars-d mailing list