output ranges: by ref or by value?

Michel Fortin michel.fortin at michelf.com
Fri Jan 1 07:14:01 PST 2010


On 2010-01-01 09:47:58 -0500, Andrei Alexandrescu 
<SeeWebsiteForEmail at erdani.org> said:

> Upon more thinking, I'm leaning the other way. ~= is a quirk of arrays 
> motivated by practical necessity. I don't want to propagate that quirk 
> into ranges. The best output range is one that works properly when 
> passed by value.

I agree and disagree. I wasn't proposing that ranges support ~=, and I 
don't thing it'd be a good idea, so I agree with you here.

But I still believe output ranges should behave like arrays. I was 
proposing that you model output ranges after buffers. A stream then 
becomes a buffer of infinite length.

Look at this example:

	char[10] buffer;
	char[] remainingSpace = buffer[];
	while (!remainingSpace.empty)
		remainingSpace.put(getc());

	// now buffer is full
	writeln(buffer);

Now rename "remainingSpace" for "outputStream" and it works fine, 
except for two things: "empty" sounds strange, and an output stream is 
never empty of remaining space: it's infinite length.

But conceptually, a buffer and a stream are almost the same, one having 
finite capacity while the other is infinite.


-- 
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/




More information about the Digitalmars-d mailing list