On 2010-01-29 08:18:46 -0500, "Steven Schveighoffer" <schvei...@yahoo.com> said:

Hey, it's that dead horse again, let's beat it!

Andrei and I and several others discussed this ad infinitum. You will never convince Andrei that his design is wrong :)

Andrei is the one who complained that it's difficult to know whether 'byLine' is a property in the first place. I'm just explaining why it is, and what should be done.

I'm starting to think Anrei likes ambiguous semantics.  :-)


The truth is, the fact that byLine modifies stdin by its mere existence proves to be inconsequential. Nobody will fetch the byLine property without using it. It's still an accessor.

That's only true if you use byLine exclusively.

Here is a case where the advance fetching of byLine could go wrong:

        // fetch 3 lines:
        string[] consume(3, stdin.byLine);
        // now fill a buffer
        ubyte[] buffer;
        buffer = stdin.rawRead(buffer);

        E[] consume(E, R)(int count, R range) {
                E[] elements;
                foreach (i; 0..count) {
                        elements ~= range.front;
                        range.popFront();
                }
                return elements;
        }

The problem here is that the consume() function will in reality consume 4 lines of stdin, even though it just take 3 from byLine.

When we later call rawRead, a line has been lost.

--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to