Es-discuss - several decimal discussions

Brendan Eich brendan at mozilla.org
Sun Aug 24 21:48:29 PDT 2008


On Aug 24, 2008, at 7:57 PM, Mark S. Miller wrote:

> On Sun, Aug 24, 2008 at 7:44 PM, Brendan Eich <brendan at mozilla.org>  
> wrote:
>> [...] But
>> really, I'm wondering why it is important to have Object.eq if  
>> 1.0m ===
>> 1.00m. Without Object.hashcode.
>
> I would hope Harmony would either have some kind of identity hashcode
> or some kind of built-in identity hashtable abstraction.

Absolutely.


> Given a
> function F that one knows is functional, it should be possible to
> write memoize such that memoize(F) acts like F, trading space for
> time. Without Object.eq or the equivalent, how does memoize tell
> whether its got a cache hit or miss?

We had this in the ES4 RI, implemented in ES4 (builtins/Map.es). The  
Map class takes type parameters K and V and has a constructor:

     function Map(equals   = (function (x,y) x === y),
                  hashcode = intrinsic::hashcode)

NaNs all hash to code 0 (any constant would do, 0 was picked for  
simplicity and interoperation). You have to avoid mapping NaN or else  
provide a non-default equals function that tests isNaN() or x !== x.

Ignoring the ES4 details (type parameters, default arguments),  
there's nothing here that adds a new equality operator to the  
language as a whole. Anything like Map in Harmony, sans distinct type  
parameters (any such would be value parameters), could do likewise.  
No need for an Object.eq analogue.

/be


More information about the Es-discuss mailing list