I agree. I think `read()` on paused stream may modeled as preview of 
stream's data.

--
wp

在 2013年8月20日星期二UTC+8上午9时55分12秒,Sopl Wang写道:
>
> I'm a two year Node.js user and fan, very like Node's design and 
> simplicity. Even I'd
> promoted Node's adopt in our company.
>
> We use Node's stream/pipe to do realtime dataflow style computing on 
> Hadoop for our
> AD system.
>
> I love the simple and stupid stream system prior v0.10. But when v0.10 
> landing, the new
> Streams2 make me very fear. Belows are my complains..., maybe these can't 
> change anything,
> but I want you get our hopes...
>
> Complains
> ---------
>
> 1. Streams2/3 has two modes (or 3 modes), maybe too complex, violate KISS 
> and "Small core,
>    big userland" rule;
>
> Streams3 support these modes: init, paused, flowing. If I share stream in 
> multiple
> subsystem and, if there has anyone listen on `data`, modes switched..., 
> OMG...
>
> 2. `read()` and `readable` flavor is not consist with other modules (e.g., 
> dgram, fs, and
>    W3C websocket API);
>
> Dgram always emit `message`, Websocket use `onmessage`, all emit data but 
> not `readable`
> like state indicator. Emit data is flexible, support multi-reader dataflow 
> driven computing.
> On other hand, `read()` only support one reader once and, the interface 
> more like sync flavor
> instead async/callback flavor.
>
> 3. Streams3 has incompatible issue with `unshift()`;
>
> Streams3 on paused mode, `read()` can emit `data` event. If I use 
> `unshift()`, there should be
> re-emit these unshift data.
>
> 4. Breaks the net/http/fs module's api stablity guarantee:
>
> Net/http/fs all declare them are in 'Stability: 3 - Stable', but with 
> these Streams2/3
> chanages, there should had api changes sliently.
>
> Suggests
> --------
>
> 1. KISS, move `read()` and `readable` out to userland. User can easy to 
> implement a transform
>    stream to archive same usage.
>
> But keeps buffered `pause()` sematic. Very simple for implement..., keep 
> we have small vanilla
> core.
>
> 2. Or, remove `readable`, provide async `read(bytes, cb)`, and turn stream 
> default on plain
>    old flowing mode. User must call `pause()` first for manual reading. 
> Calling `read(bytes, cb)`
>    does not emit `data` event.
>
> Sample code:
>
> ```javascript
> var stream = foobar.connect();
> var mode;
>
> ...
>
> stream.pause();
>
> stream.read(4, function (data) {
>   if (String(data) === 'FOOB') {
>     stream.read(8, function (data) {
>       mode = String(data);
>       stream.unshift(data);
>       stream.resume();
>     });
>   } else {
>     stream.destroy();
>   }
> });
>
> stream.on('data', function (data) {
>   // ...
> });
> ```
>
> Thanks for reading,
> Wenlin
>

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to