Stream Proposal

Steven Schveighoffer schveiguy at yahoo.com
Mon Mar 14 05:34:20 PDT 2011


On Fri, 11 Mar 2011 21:29:42 -0500, dsimcha <dsimcha at yahoo.com> wrote:

> The discussion we've had here lately about reading gzipped files has  
> proved
> rather enlightening.  I therefore propose the following high-level  
> design for
> streams, with the details to be filled in later:
>
> 1.  Streams should be built on top of input and output ranges.  A stream  
> is
> just an input or output range that's geared towards performing I/O  
> rather than
> computation.  The border between what belongs in std.algorithm vs.  
> std.stream
> may be a bit hazy.

No.  You will find when you go to implement this that it's awkward and  
low-performing.

>
> 2.  Streams should be template based/structs, rather than virtual  
> function
> based/classes.  This will allow reference counting for expensive  
> resources,
> and allow decorators to be used with zero overhead.  If you need runtime
> polymorphism or a well-defined ABI, you can wrap your stream using
> std.range.inputRangeObject and std.range.outputRangeObject.

This will have a viral effect on anything that uses an input/output  
stream, making everything a template.  Streams happen to be one of the  
main types that scream "please, use polymorphism for me!"

For example, how would you easily replace stdin to be a network stream?

/me must get going on stream library before it's too late...

-Steve


More information about the Digitalmars-d mailing list