D2 and stream
Adrian Matoga
epi at atari8.info
Sun Aug 8 08:34:53 PDT 2010
On 2010-08-08 14:11, Mafi wrote:
> Hi all,
> what are the directions of D2's streams. I heared std.stream is going to
> get deprecated in D2. I think it's good as long as
> BufferedFile.readLine() returns char[] instead of string. Is D2 going to
> get a Java-like stream model? What's wrong with the old one except that
> it's a bit out of date?
> Mafi
AIUI from the discussion under the topic "Network I/O and streaming in
D2" the whole I/O will go through std.stdio.File, which looks great for
a closed set of possible streams, but I'm afraid that it won't be
sufficiently extensible for some cases.
Like many people, I found Java stream model bloated.
However, in my opinion, Stream makes it possible to extend I/O subsystem
at library level with custom streams, while still having common
(standard!) interface to them, and a possibility to use a fair amount of
already implemented operations like reading/writing various primitive
types and arrays, at very small cost of implementing only a constructor
and read/write primitives.
In my modest experience, I found std.stream.Stream a good solution in
some cases: once the application could have a common interface for both
secure and raw network stream (the first being a custom stream, which
wrapped OpenSSL SSL structures, and the second being SocketStream from
std.socketstream). Another case is what I'm currently developing - a
library for accessing 8-bit Atari disk images. There are a few different
filesystems possible inside such images, and for each one there will
be a different translation between image contents and file operations,
but the file operations should be hidden behind a common interface.
Again, Stream seemed the best choice for me - firstly, it comes from
standard library; secondly, it requires only readBlock and writeBlock to
be implemented, and the rest is already done.
I also wondered if things like DirIterator and DirEntry could also be
interfaces (I wrote my own interfaces for this purpose), but these could
be of much less usage.
To sum up, I think it's worth saving Stream as a common interface for
I/O, but it possibly needs some improvements in details. For example,
instead of having its own File class, conflicting with std.stdio.File,
it could simply wrap std.stdio.File into, let's say, FileStream or sth.
Another thing would be making the set of methods resembling that of
std.stdio.File. It would be nice to use std.stdio.File when you don't
need extensibility, but have an option to easily move to descendants of
std.stream.Stream without changing every single call.
What are your opinions?
Adrian
More information about the Digitalmars-d
mailing list