Accessors, byLine, input ranges

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Jan 29 07:31:28 PST 2010


Steven Schveighoffer wrote:
> On Fri, 29 Jan 2010 08:03:13 -0500, Michel Fortin 
> <michel.fortin at michelf.com> wrote:
> 
>> On 2010-01-29 06:25:44 -0500, Pelle Månsson <pelle.mansson at gmail.com> 
>> said:
>>
>>> On 01/29/2010 05:48 AM, Michel Fortin wrote:
>>>>  No. Calling byLine doesn't change the stream. It returns a different
>>>> view of stdin, which can be used to modify the stream, or not. I think
>>>> it should be a property. If it was 'getNextLine' then it should be a
>>>> function. As a proof, this doesn't have any effect:
>>>>  stdin.byLine;
>>>  It reads a line off stdin. Try it.
>>
>> Ah, I see, you're right. Silly me for not trying.
>>
>> So it's not an accessor after all. The problem is that, even 
>> disregarding the property syntax, the name strongly suggests it's an 
>> accessor, but it has side effects, which it shouldn't. Either we 
>> change the name to something else, like 'consumeLines()', or we make 
>> it behave like an accessor. I'd go for the second option.
>>
>> The basic problem lies in the very basic definition of an input range. 
>> Due to its interface (popFront + front), an input range is forced to 
>> consume the its first element by its mere existence. I think 
>> constructing an input range shouldn't have side effects. It should be 
>> more symmetrical with an output range. It could have just one 
>> function, 'take' to get the next element, and now byLine could work 
>> correctly.
> 
> 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 :)

Which debate are you referring to?

> 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.

Yah, though I agree it's nicer to not prime the line in the constructor.


Andrei



More information about the Digitalmars-d mailing list