I’m not sure that there is much one can do to protect programmers from themselves, given that writing good hash functions is hard. One could provide a test suite.
Random thoughts: - Enforce that both equality and hash function are specified. A common Java problem. - Provide a hash function to complement Object.is() – Brandon suggested Object.hash(). - Most common case: two objects are considered equal if (e.g.) two of their properties are equal. How can we help programmers here? Combining equals seems easy, combining hashes harder: function hashPerson(p) { return Object.combineHash(Object.hash(p.last), Object.hash(p.first)); // Alternative: Object.hash(p.last, p.first) } function equalsPerson(p1, p2) { return Object.is(p1.last, p2.last) && Object.is(p1.first, p2.first) } - Internationalization mainly seems to matter for sorting, so it’s probably not an issue here. On Dec 27, 2011, at 19:20 , Mark S. Miller wrote: > Hi Axel, yes, I would like to extend their constructor in this way. However, > I'm not sure how to spec it -- help appreciated. The problem is that the > comparator needs to provide both an equivalence operation and a corresponding > hash operation. When these agree, all is well. What should we specify happens > when passing in a misbehaving comparator? The dilemma is that > 1) detecting misbehavior is expensive, > 2) having a deterministic collection misbehavior in the face of comparator > misbehavior seems hard, and > 3) we'd like to avoid yet more under-specification. The similar > under-specification of Array.prototype.sort is already bad enough. > > On Tue, Dec 27, 2011 at 7:22 AM, Axel Rauschmayer <a...@rauschma.de> wrote: > http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets > > Currently, using Object.is() is hard-coded. But one could allow a comparator > function being handed in (with Object.is being the default). -- Dr. Axel Rauschmayer a...@rauschma.de home: rauschma.de twitter: twitter.com/rauschma blog: 2ality.com
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss