Es-discuss - several decimal discussions

David-Sarah Hopwood david.hopwood at industrial-designers.co.uk
Wed Sep 3 23:15:21 PDT 2008


Brendan Eich wrote:
> On Aug 24, 2008, at 10:02 PM, Mark S. Miller wrote:
> 
>> Let's say you did that -- make a special case for NaN but not for -0.
>> Let's say you use this Map to build memoize. Now let's say someone
>> writes a purely functional function F such that F(0) is 3 and F(-0) is
>> 7. Let's say G is memoize(F). Would you find it acceptable for G(0) to
>> sometimes yield 3 and sometimes 7?
> 
> I'd file a bug, or find a better memoizer :-). "Quality of  
> implementation" eager beavers can use Math.atan2 to tell -0 from 0,  
> just as they can use isNaN or x !== x.
> 
> Yes, this is gross. I'm in favor of Object.identical and  
> Object.hashcode, maybe even in ES3.1 (I should get my act together  
> and help spec 'em).

In the absence of decimal, Object.eq is trivial to spec:

   Object.eq(NaN, NaN) = true
   Object.eq(  0,  -0) = false
   Object.eq( -0,   0) = false
   Object.eq(  x,   y) = (x === y), otherwise.

or to implement:

   Object.eq = function (x, y) {
     if (x === y) {
       return x !== 0 || 1/x === 1/y;
     } else {
       return x !== x && y !== y;
     }
   };

> Just not particularly on account of Decimal, even  
> with equated cohort members.

If there is a possibility that we are ever going to add decimal (or other
types for which === might not be an identity test), then adding Object.eq
now allows writing future-proof code for such things as memoizers --
whatever the semantics of === for decimals (or between decimals and
other numbers) turns out to be.

-- 
David-Sarah Hopwood


More information about the Es-discuss mailing list