On to Hydro

Mark S. Miller markm@caplet.com
Fri, 18 Aug 2000 00:09:08 -0700


At 01:06 PM 8/17/00 , Tyler Close wrote:
>you'll have to upgrade the "<" operator to at least strict weak
>ordering, though I'll push for total ordering.
>
>I think the solution might be that we don't provide any 'automatic'
>comparison operators, and just map them all into method names.
>
>Operator   Method     Ordering
>--------   ------     ---------
>    <       before     total or strict weak
>    <=      within     partial
>    >       after      total or strict weak
>    >=      includes   partial

Are you proposing that "<" and ">" be defined in terms of one order while 
"<=" and ">=" be defined in terms of a different one?  In you proposal, 
would the following equations no longer hold:

(a < b) == ((a <= b) && !(a >= b))
(a <= b) == ((a < b) || (a >= b))

(Note: these two may be equivalent, so only one may be needed.)

If these equations no longer hold, I'm freaked out.  I think my programmers 
would be too.

As to total vs strict weak; if I understand the definitions correctly, it is 
equivalent to asking whether we can dispense with "<=>" and just use "==" 
instead.  I hate to use IEEE floating point again, but what about -0.0?  In E,

     ? -0.0 == 0.0
     # value: false
     
     ? -0.0 <=> 0.0
     # value: true

0.0 and -0.0 denote the same real number, and so are numerically equivalent. 
But they are not computationally equivalent.  In E terminology, the are "as 
big" or "the same magnitude", but they are not "the same".  Historical note: 
I hated introducing "<=>", but I saw no alternative.


         Cheers,
         --MarkM