On Sunday, 7 February 2016 at 00:48:54 UTC, Jason White wrote:
This library provides an input and output range interface for
streams (which is more efficient if the stream is buffered).
Thus, many of the wonderful range operations from std.range and
std.algorithm can be used with this.
Ah, grand! I love the idea and my impression from browsing the
source a bit is positive enough to say I'm looking forward to
what comes out of this.
Though I AM a little ambivalent-- I had a series of pretty
in-depth conversations on this topic with a friend a while back
and we came to a consensus that stream semantics are a tricky
thing because of the historical baggage around them and how they
tend to get conflated with other concepts.
Looking at your API design, I think you've hit close to a lot of
the same conclusions we reached, but here are the notes I took
for the sake of providing an additional perspective:
http://radiusic.com/doc/streamNotes (Sorry, I tried just pasting
them and it was moderately unreadable even in the preview)
I think the most important things we hit upon are:
1. A stream is fundamentally unidirectional.
2. A stream is raw, untyped data that becomes a range through an
adapter that mediates access.
-Wyatt