deprecating std.stream, std.cstream, std.socketstream
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed May 16 14:08:16 PDT 2012
On 5/16/12 1:00 PM, Steven Schveighoffer wrote:
> What I think we would end up with is a streaming API with range
> primitives tacked on.
>
> - empty is clunky, but possible to implement. However, it may become
> invalid (think of reading a file that is being appended to by another
> process).
> - popFront and front do not have any clear definition of what they refer
> to. The only valid thing I can think of is bytes, and then nobody will
> use them.
>
> That's hardly saying it's "range based". I refuse to believe that people
> will be thrilled by having to 'pre-configure' each front and popFront
> call in order to get work done. If you want to try and convince me, I'm
> willing to listen, but so far I haven't seen anything that looks at all
> appetizing.
Where the two meet is in the notion of buffered streams. Ranges are by
default buffered, i.e. user code can call front() several times without
an intervening popFront() and get the same thing. So a range has by
definition a buffer of at least one element.
That makes the range interface unsuitable for strictly UNbuffered
streams. On the other hand, a range could no problem offer OPTIONAL
unbuffered reads (the existence of a buffer does not preclude
availability of unbuffered transfers).
So to tie it all nicely I think we need:
1. A STRICTLY UNBUFFERED streaming abstraction
2. A notion of range that supports unbuffered transfers.
Andrei
More information about the Digitalmars-d
mailing list