make (a < b < c) illegal?

Derek Parnell derek at nomail.afraid.org
Wed Feb 7 18:41:21 PST 2007


On Wed, 07 Feb 2007 17:09:35 -0800, Andrei Alexandrescu (See Website For
Email) wrote:

> Derek Parnell wrote:
>> On Wed, 07 Feb 2007 16:55:15 -0800, Walter Bright wrote:
>> 
>>> Right now, in D (as well as C and C++), when you see the expression:
>>>
>>> 	if (a < b < c)
>>>
>>> what is your first thought? Mine is that it was written by a newbie who 
>>> didn't realize that (a < b) returns true or false, and that it does NOT 
>>> mean ((a < b) && (b < c)). The odds approach certainty that this is a 
>>> logic error in the code, and even if it was intentional, it raises such 
>>> a red flag that it shouldn't be used anyway.
>>>
>>> Andrei has proposed (and I agreed) that this should be done away with in 
>>> the language, i.e. comparison operators should no longer be associative. 
>>>   It's a simple change to the grammar. If one really did want to write 
>>> such code, it could be done with parentheses:
>>>
>>> 	if ((a < b) < c)
>>>
>>> to get the original behavior. At least, that looks intentional.
>>>
>>> I don't think this will break existing code that isn't already broken.
>> 
>> First thought: Yes, your proposed change makes sense.
>> 
>> Second thought: Why not make it do what the coder is wanting it to do?
>>    Namely, make the idiom:
>> 
>>      expression1 relopA expression2 relopB expression3
>> 
>>    translate as
>> 
>>      ( auto temp = expression2,
>>       (expression1 relopA temp) && (temp relopB expression3) )
> 
> What's the intended meaning of:
> 
> a < b == c < d

Well that *obvious*!

 (((a < b) && (b == c)) < d)  <G>

Okay, okay, I see your point. But it would be useful (one day) to easily
code the idiom  (a op b) && (b op c),  no? 

How about someone knocking up a mixin template for expressions of this
format? I haven't got a clue how it could be done as the
mixin/template/meta-programming syntax and semantics of D is still so
obtuse and confusing to me that I can only do the very simplest things and
then only after many false starts.

-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Justice for David Hicks!"
8/02/2007 1:28:00 PM



More information about the Digitalmars-d mailing list