[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