buffered input
Jonathan M Davis
jmdavisProg at gmx.com
Sat Feb 5 12:57:21 PST 2011
On Saturday 05 February 2011 07:16:45 Andrei Alexandrescu wrote:
> 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
The thing is though that if I want to be iterating over a string which is
buffered (from a file or stream or whatever), I want front to be immutable(char)
or char, not immutable(char)[] or char[]. I can see how having an interface
which allows startsWith to efficiently check whether the buffered string starts
with a particular string makes good sense, but generally, as far as I'm
concerned, that's startsWith's problem. How would I even begin to use a buffered
range of string[] as a string?
Normally, when I've used buffered anything, it's been purely for efficiency
reasons. All I've cared about is having a stream or file or whatever. The fact
that reading it from the file (or wherever it came from) in a buffered manner is
more efficient means that I want it buffered, but that hasn't had any effect on how
I've used it. If I want x characters from the file, I ask for x characters. It's
the buffered object's problem how many reads that does or doesn't do.
You must be thinking of a use case which I don't normal think of or am not aware
of. In my experience, buffering has always been an implementation detail that you
use because it's more efficient, but you don't worry about it beyond creating a
buffered stream rather than an unbuffered one.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list