[phobos] Improvement of stream

Shin Fujishiro rsinfu at gmail.com
Mon Jul 5 07:59:53 PDT 2010


Is the handle a similar concept as the container?

That is, I reckon a handle is a reference type object that has its own
resource and provides some ranges on top of it for accessing and
manipulating the resource:

class ConceptualHandle
{
    void open();    // ?
    void close();
    ByChunk byChunk(size_t n);
    ByChar byChar();
    Writer blockWriter();
}


Shin

Andrei Alexandrescu <andrei at erdani.com> wrote:
> Hello,
> 
> 
> I've been looking over the streaming proposal. Allow me to make a few 
> comments:
> 
> - The input ranges _are_ intended to be input streams, and the output 
> ranges _are_ intended to be output streams. If they don't fulfill that 
> purpose, they should be changed (instead of adding new categories).
> 
> - Input streams have the read primitive. What is wrong with an input 
> range of ubyte[]? Then accessing front() gives you a buffer and popFront 
> reads in a new buffer.
> 
> - What does flush() do for input streams?
> 
> - I don't think close() is a good primitive for an input stream. An 
> input stream should originate in a connection handle, and it's the 
> handle, not the stream, that should control the connection. For example:
> 
> auto s = Socket("123.456.455.1");
> auto stream = s.byChunk(1024 * 16);
> ... stream is an input range of ubyte[] ...
> s.close();
> 
> If the range defines a close() operation, then we need to start talking 
> about it defining an open() operation, which complicates matters. Why 
> not leave ranges for traversal and handles for connections?
> 
> - On to output streams. What's wrong with having an output range of 
> ubyte[]? Its put() primitive would be the same as the proposed write() 
> routine.
> 
> - flush() would be a good optional addition to an output stream.
> 
> - I have the same feeling about close() for output streams.
> 
> - The Seekable idea is good, I was thinking of it for a while. It 
> expresses a range that is not as cheap for random access as a 
> random-access range, but also that makes random seeking possible. What 
> kind of algorithms could use Seekable?
> 
> - What's the purpose of StreamWrapper? And why is it reading in the 
> write() primitive?
> 
> - ByLine is a bit awkward because it needs to read buffers of size 1. 
> Clearly there is some problem there. The right way is to build 
> ByLine!Char on top of a stream of Char, not a stream of Char[]. 
> (Speaking of which, I just checked in BlockingInputReader. It does read 
> one character at a time but it has an inefficiency caused by the FILE* 
> interface.)
> 
> - What does FileStream do that File doesn't or can't do?
> 
> Let me know of what you think.
> 
> 
> Andrei
> 
> On 06/30/2010 11:48 AM, SHOO wrote:
> > In Japanese community, improvement of stream is discussed.
> >
> > New stream has following characteristics.
> >
> > - Supporting Range
> > - Duck typing
> > - Accepting interface optionally (main is struct)
> >
> > Very simple draft is here:
> > http://ideone.com/BU3ev
> >
> > Now, satoru_h ( http://twitter.com/satoru_h ) works for more.
> >
> > What do you think?
> > _______________________________________________
> > phobos mailing list
> > phobos at puremagic.com
> > http://lists.puremagic.com/mailman/listinfo/phobos
> _______________________________________________
> phobos mailing list
> phobos at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/phobos


More information about the phobos mailing list