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
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to