[RFC] I/O and Buffer Range
Jason White
54f9byee3t32 at gmail.com
Sun Jan 5 21:41:57 PST 2014
On Sunday, 5 January 2014 at 13:30:59 UTC, Dmitry Olshansky wrote:
> I my view text implies something like:
>
> void write(const(char)[]);
> size_t read(char[]);
>
> And binary would be:
>
> void write(const(ubyte)[]);
> size_t read(ubyte[]);
>
> Should not clash.
Those would do the same thing for either text or binary data.
When I say text writing, I guess I mean the serialization of any
type to text (like what std.stdio.write does):
void write(T)(T value); // Text writing
void write(const(ubyte)[] buf); // Binary writing
write([1, 2, 3]); // want to write "[1, 2, 3]"
// but writes "\x01\x02\x03"
This clashes. We need to be able to specify if we want to
write/read a text representation or just the raw binary data. In
the above case, the most specialized overload will be called.
> In-memory array IMHO better not pretend to be a stream. This
> kind of wrapping goes in the wrong direction (losing
> capabilities). Instead wrapping a stream and/or array as a
> buffer range proved to me to be more natural (extending
> capabilities).
Shouldn't buffers/arrays provide a stream interface in addition
to buffer-specific operations? I don't see why it would conflict
with a range interface. As I understand it, ranges act on a
single element at a time while streams act on multiple elements
at a time. For ArrayBuffer in datapicked, a stream-style read is
just lookahead(n) and cur += n. What capabilities are lost?
If buffers/arrays provide a stream interface, then they can be
used by code that doesn't directly need the buffering
capabilities but would still benefit from them.
>>Currently, std.stdio has all three of
>> those facets rolled into one.
>
> Locking though is a province of shared and may need a bit more
> thought.
Locking of streams is something that I haven't explored too
deeply yet. Streams that communicate with the OS certainly need
locking as thread locality makes no difference there.
More information about the Digitalmars-d
mailing list