[phobos] Fwd: [Issue 4025] New: Making network with the std.stdio.File interface
Andrei Alexandrescu
andrei at erdani.com
Wed Apr 7 18:50:22 PDT 2010
On 03/30/2010 06:03 AM, Steve Schveighoffer wrote:
> Can you detail the reader/writer operations? Because popNext and
> front ain't gonna cut it for streams. Most of the time the element
> size you want is defined by the application (and not easily
> abstracted), not the range, but the range is in charge of the element
> size (via front).
I think there's no necessity that a range has a constant-size element
type. If the element type of the range is e.g. ubyte[], then it can be
free to transfer as much data as it wants at each popFront().
> While I believe ranges can be useful for streams, they are not the
> best interface for all applications. For example, if I have a
> protocol that reads 2 bytes to get a length, and then reads length
> bytes from the stream, a range of those units is probably a good
> abstraction. But I don't want to resort to C calls to create that
> abstraction -- there should be a nice D layer in between. I should
> not have to create my own buffering solution. I/O performance is
> more important IMO than interface when it comes to streams. This
> does not mean big-O complexity, I'm talking about raw performance.
I think the interface you described can be easily modeled as a range of
ubyte[]. Again, a range of ubyte[] doesn't have to return the same
number of elements each step.
> I hope we can see a design before you commit to doing it this way.
> For example, a zip library uses a range as a source, what does the
> file range look like that satisfies the range properties and also is
> efficient? Just seeing the API should be enough to judge.
Feel free to suggest one. I won't be able until I study the zip file format.
> And are there plans to make a good abstracted library for streams
> that custom ranges can be built upon?
Not sure I understand this.
Andrei
More information about the phobos
mailing list