isaacs mentioned to me in irc that he wanted to implement a
ReadableStream, but leave Stream exactly as it was.

so, have two types of stream.

there is another thing this would break, it would be impossible to
stream a .read() based ReadableStream to multiple destinations...
Although, if regular Streams still exist, then you'll still have that
if you need it.

On Sat, Jul 28, 2012 at 7:03 AM, Mikeal Rogers <mikeal.rog...@gmail.com> wrote:
> After several conversations about this I have identified one thing we lose 
> with this change.
>
> Because the current implementation makes streams start emitting data right 
> after creation and could start doing so at any time after nextTick() it's 
> required that all streams be connected within a single tick.
>
> In request, and other streams, we make the assumption that all stream 
> behavior was setup in a single tick, which is how this works:
>
> ```
> request.get(url, function (e, resp, body) {})
> fs.createReadStream(file).pipe(request.put(url))
> request.get(url).pipe(fs.createWriteStream(file))
> ```
>
> I need to know before I start the underlying http client if this has a source 
> and/or a destination stream. If there is no source stream I must call end() 
> on the underlying http client. Now, we do get out of needing to know the 
> destination stream ahead of time **if** i have a way to know that I shouldn't 
> be buffering the data for a callback. I think i could do this by simply 
> removing a feature i used to have where that callback became a callback on 
> "response" and did not include buffered data.
>
> The new stream style rids us of the pause/resume dance but it also means that 
> a stream can be created and just hang out for many cycles before getting 
> piped to something else. That means we lose an assumption we used to have and 
> that we have spent some time building on.
>
> Now, it's very uncommon that you would create a stream and then pipe **to** 
> it some number of cycles later. But, over time I think that people will be 
> used to the "magic" of these new streams that can be created and piped around 
> whenever and will step on this.
>
> This is not meant to derail or stop any of the changes proposed, it's simply 
> an assumption we used to make and have come to rely on that cannot be 
> polyfilled and will break whenever this gets released.
>
> -Mikeal
>
> On Jul 26, 2012, at July 26, 20129:57 PM, Isaac Schlueter <i...@izs.me> wrote:
>
>> I think the real problem is with readable streams.  Writable streams
>> are pretty easy to implement, but the readable side is unnecessarily
>> difficult and too easy to get wrong.
>>
>> Here's a proposal in code: https://github.com/isaacs/readable-stream
>>
>> The readme explains the position, and the implementation makes it easy
>> to play around with.  A base class and a fs readable stream class are
>> provided.  Note that Readable.pipe() is very short and simple :)
>>
>>
>> On Sun, Jul 15, 2012 at 7:25 PM, Dominic Tarr <dominic.t...@gmail.com> wrote:
>>> I've been writing and using a lot of streams lately,
>>> and have some proposals for some small changes to node's streams.
>>>
>>> https://gist.github.com/3117184
>>>
>>> in some parts it's a tightening up on expected behaviour,
>>> in others it's a few small changes to Stream#pipe.
>>>
>>> cheers, Dominic
>

Reply via email to