On Sep 5, 2010, at 12:28 PM, Brendan Eich wrote:

> On Sep 5, 2010, at 8:28 AM, Maciej Stachowiak wrote:
> 
>> Other possibilities:
>> 
>> - Make Object.hashcode pair with === or == instead of Object.eq: formally 
>> impossible, because neither is actually an equivalence relation. Less 
>> formally, possible at the cost of making it impossible to use NaN as a hash 
>> key, or distinguish 0 from -0 as hash keys.
> 
> === is an ER ignoring NaN (0 and -0 are in the same equivalence class, but 
> whether this is a bug or a feature depends on imponderables; arguably -0 is a 
> bug outside of numerical applications).

That is what I meant by their failure to be an equivalence relation. If you 
ignore that issue, then you'll be able to put an arbitrary number of different 
'NaN'-keyed values in a hashtable based on hashcode, but will never be able to 
retrieve or remove any of them. Possibly obscure, but seems like a bad 
consequence if it does happen.

> 
>> - Make Object.hashcode correspond to an equivalence relation that is 
>> described but not provided as a predefined function - now actually using 
>> hashcode becomes needlessly complicated and error prone.
> 
> This was the consensus (not a strong one) last time we discussed.

It seems like this would significantly increase the odds of data structures 
built using Object.hashcode and ===, which would result in brokenness. You 
could get separate entries for '0' and '-0' (since they would hash differently) 
but later rehashing could cause lookup to find the wrong one. I think the 
responsible thing to do is to actually expose the equivalence relation that 
matches hashcode, instead of hoping that everyone bothers to handcode it.

> 
> 
>> It might even be desirable to name Object.hashcode something that makes the 
>> relationship to eq clear - Object.eqHash? On the other hand, it seems 
>> somewhat unlikely that other hash/equivalence pairs will be introduced to 
>> the standard, so maybe it doesn't matter.
> 
> The "eq" name is freakishly short, which might up the odds of it not 
> colliding with existing user-level extensions to Object (egal might work as 
> well in that regard), but we already heard from people objecting to 
> Object.keys vs. Object.getOwnPropertyNames.
> 
> The strawman has a note where I suggested matching "hashcode" with "identity" 
> as the method name. If nothing else, the name length and lack of hackerly 
> abbreviation recommend it. Comments?

I would expect a function named "identity" to be a function of one argument 
that returns it unmodified, rather than a two-argument predicate that 
implements an equivalence relation. "eq" seems like an ok name. "egal" will 
probably seem more mysterious than "eq".

Regards,
Maciej

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to