Tristan Zajonc (2013-10-29T17:51:10.000Z)
On Tue, Oct 29, 2013 at 10:04 AM, Brendan Eich <brendan at mozilla.com> wrote:

> Tristan Zajonc wrote:
>
>>
>>     if (mutMatA == mutMatB) {
>>         accidentallyMutate(mutMatA);
>>         assumeStillEqual(mutMatA, mutMatB, data);
>>     }
>>
>>
>> Is this bug related to operator overloading?  It seems just the nature of
>> the beast with mutable reference types. Pretty much all JS matrix libraries
>> today use:
>>
>> if (mutMatA.equals(mutMatB)) {
>>     accidentallyMutate(mutMatA);
>>     assumeStillEqual(mutMatA, mutMatB, data);
>> }
>>
>> which I assume would suffer from the same bug?
>>
>
> You bet, but special forms exist to have primitive semantics, which can be
> meta-programmed only in certain ways (we try to preserve certain
> invariants). With .equals, anything goes. With == where both operands are
> object references, there has been an invariant. Allowing operator
> customization to break that invariant might be worth the downside, but it
> deserves discussion.
>
>
Got it, worthy of discussion. My user data point is that I've never assumed
== has that invariant. Overloading equals is a bigger deal, but it's not
clear users should expect invariance given existing toString/valueOf
issues.  So +1 for this not being a blocker to extending your operator
proposal more broadly.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20131029/3470e845/attachment-0001.html>
domenic at domenicdenicola.com (2013-11-03T22:03:43.418Z)
On Tue, Oct 29, 2013 at 10:04 AM, Brendan Eich <brendan at mozilla.com> wrote:

> You bet, but special forms exist to have primitive semantics, which can be
> meta-programmed only in certain ways (we try to preserve certain
> invariants). With .equals, anything goes. With == where both operands are
> object references, there has been an invariant. Allowing operator
> customization to break that invariant might be worth the downside, but it
> deserves discussion.

Got it, worthy of discussion. My user data point is that I've never assumed
== has that invariant. Overloading equals is a bigger deal, but it's not
clear users should expect invariance given existing toString/valueOf
issues.  So +1 for this not being a blocker to extending your operator
proposal more broadly.