buffered input

Nick Sabalausky a at a.a
Sat Feb 5 14:00:46 PST 2011


"Andrei Alexandrescu" <SeeWebsiteForEmail at erdani.org> wrote in message 
news:iijpp7$197f$1 at digitalmars.com...
> On 2/5/11 5:09 AM, Jonathan M Davis wrote:
>> Hmm. I think that I'd have to have an actual implementation to mess 
>> around with
>> to say much. My general take on buffered input is that I don't want to 
>> worry
>> about it. I want it to be buffered so that it's more efficient, but I 
>> don't want to
>> have to care about it in how I use it. I would have expected a buffered 
>> input
>> range to be exactly the same as an input range except that it doesn't 
>> really
>> just pull in one character behind the scenes. It pulls in 1024 or 
>> whatever when
>> popFront() would result in the end of the buffer being reached, and you 
>> just get
>> the first one with front. The API doesn't reflect the fact that it's 
>> buffered at
>> all except perhaps in how you initialize it (by telling how big the 
>> buffer is,
>> though generally I don't want to have to care about that either).
>
> Transparent buffering sounds sensible but in fact it robs you of important 
> capabilities. It essentially forces you to use grammars with lookahead 1 
> for all input operations. Being able to peek forward into the stream 
> without committing to read from it allows you to e.g. do operations like 
> "does this stream start with a specific word" etc. As soon
>

That shouldn't be a problem for the cases where a lookahead of 1 is all 
that's needed. So both types can exist (with the traditional/automatic type 
most likely built on top of Andrei's type). Thus, I think the only question 
is "Are the appropriate use-cases for the traditional/automatic type minor 
enough and infrequent enough to actively discourage it by not providing it?" 
That I can't answer.





More information about the Digitalmars-d mailing list