Brendan Eich (2013-10-28T23:03:25.000Z)
domenic at domenicdenicola.com (2013-11-03T22:02:18.479Z)
Tristan Zajonc wrote: > Having === be reference equality is fine if that's a hard JS > requirement. For a matrix API, there is some flexibility on > comparison operators, but transient value comparison returning a > single boolean is the most natural, other issues aside. I'm not sure I > fully understand the bug you're worried about though. ```js if (mutMatA == mutMatB) { accidentallyMutate(mutMatA); assumeStillEqual(mutMatA, mutMatB, data); } ``` It's true that in JS today, comparing an object to a non-object, valueOf or toString on the object can be used to make == results vary. However, I'm proposing value objects with declarative syntax to solve several problems: 1. Backward compatibility, so == uses cannot change unexpectedly on extant code, or grow performance hair in existing engines facing existing code. 2. Solve the cross-frame problem where loading the same value class declaration results in the same typeof and other results for operations on values instantiated from equivalent declarations (details still being worked out). 3. Facilitate functional programming, both for user benefit and for engines, which can better optimize based on immutable values (including stack allocation). > I'd want every operator prefixed by something (dot, tilde, colon). JS uses dot, tilde and colon. But let's not get stuck here. I suggest that novel operator syntax needs a fresh thread, and that it should be informed by the SweetJS experience so far.