On 5/31/15 8:44 AM, Nick Sabalausky wrote:
On 05/30/2015 07:06 AM, short2cave wrote:
Do the classic streams still make sense when we have Ranges ?


I've been thinking the same thing lately. In fact, I'd been meaning to
make a post regarding that.

Phobos's std.stream has been slated for an overhaul for awhile now, but
it seems to me that ranges are already 90% of the way to BEING a total
std.stream replacement:

Output Streams: AFAICT, 100% covered by output ranges. Output streams
exist as a place for sticking arbitrary amounts of sequential data.
Output range's "put" does exactly that.

Input Streams: Input ranges are very nearly a match for this. AFAICT,
The only thing missing here is the ability to "read" not just the one
"front" value, but to read the front N values as a chunk, without an
O(n) sequence of front/popFront. So we'd just need another "optional"
range characteristic: hasFrontN (or some such).

Given that it seems Design by Introspection has been working well for us and we're continuing to enhance its use in Phobos, it seems to me that optional methods for ranges are the way to go.

An optional method for any range is

size_t bulkRead(T[] target);

which fills as much as possible from target and returns the number of items copied.

Another good candidate for optional methods is lookahead.


Andrei

Reply via email to