> Le 24 sept. 2015 à 22:20, Brendan Eich <brendan.e...@gmail.com> a écrit : > > Sez you! :-P > > Seriously, the problem you are dismissing implicitly (bad form :-/) is the > one we discussed yesterday, which I've stated explicitly twice now: the > typography and plain sense of JS-in-itself suggests unary minus binds tighter > than any binary connective (including **).
It’s more a question of convention than of typography, as in: `x + y * z` or: `x || y && z`. There are two conflicting conventions here, not two conflicting typographies. For the set of operators defined in C, the convention of making every unary operator having a higher precedence, does not conflict with the conventions used in math. (It is not clear for me why that convention is important, just that it is a handy uniform rule that works well for some limited set of operators.) Note that if you want to disallow `-x**y`, you might want to disallow `x**y**z` (which is imho more confusing), as there is no other right-associative binary operator (except assignment). —Claude > > Saying "Math!" doesn't overcome this, any more than shouting "typography!" or > "JS-in-itself!" > > You don't get to pick a winner just because you root for one team. If you > think the operator is worth adding and you concede that the other team's > position is tenable because enough people are confused on the committee to > predict a wider problem, then you have to consider whether the hardship of > mandatory parens in the rare case of negated exponentiation expression is > onerous. > > It's not a source of runtime bugs, where test coverage is never good enough. > It's a SyntaxError, so (a) Math uber alles people who (b) run into the rare > hard case will learn to parenthesize. > > I suspect that many Math-should-prevail types (I am among them in the > abstract, prior to engaging with the human factors at play in JS) will want > to parenthesize anyway, given the typographic appearance of precedence > inversion. I will certainly do it if there's any unary prefixing an > exponentiation expression in my code. > > I did find a formula search engine. See > http://www.searchonmath.com/result?equation=-+x%5E%7By%7D&page=1&tm=1 > <http://www.searchonmath.com/result?equation=-+x%5E%7By%7D&page=1&tm=1> for a > taste of the hard cases (and false positives, which do not count). > > Methinks you protest too much. Where is the common case made hard by proposal > (4)? > > /be > > > On Thu, Sep 24, 2015 at 12:29 PM, Domenic Denicola <d...@domenic.me > <mailto:d...@domenic.me>> wrote: > I object to #4. Disallowing perfectly reasonable math expressions (Claude's > is a good example) makes this operator too surprising to include in the > language. > > > > From: Brendan Eich <brendan.e...@gmail.com <mailto:brendan.e...@gmail.com>> > Sent: Sep 24, 2015 13:18 > To: Mark S. Miller; Claude Pache > Cc: es-discuss > Subject: Re: Exponentiation operator precedence > > Right. It's confusing because (as opposed to Math), ** is not a > superscripting operator whose typography suggests higher precedence than -, > and this matters for the sign of the result when exponentiating. > > Claude, the Math folks won't often need to negate the result, but when they > do, they'll have to parenthesize. That's the price of the typographic shift > and the precedence inversion that it suggests to many people. > > /be > > On Thu, Sep 24, 2015 at 11:16 AM, Mark S. Miller <erig...@google.com > <mailto:erig...@google.com>> wrote: > > > On Thu, Sep 24, 2015 at 11:08 AM, Claude Pache <claude.pa...@gmail.com > <mailto:claude.pa...@gmail.com>> wrote: > >> Le 24 sept. 2015 à 16:11, Brendan Eich <bren...@mozilla.org >> <mailto:bren...@mozilla.org>> a écrit : >> >> And indeed apart from dot (a special form whose right operand must be a >> lexical identifier-name) and square brackets (which isn't an infix operator >> per se), unary operators bind tighter than binary in JS as in C and other >> C-derived languages. > > I just wonder why it is important that unary binds tighter? For instance, > before I carefully studied the issue of this thread, I have never expected > that unary minus binds tighter than binary > > > Before Jason pointed out the discrepancy: > * all of us on the committee who were engaged with the proposal > * including myself, > * all those who reviewed the proposal, > * and all those who implemented the proposal > had the opposite naive expectation. That's the point. In the absence of > learning about this case specifically, many people will be unpleasantly > surprised by #2, and many by #3. Therefore #4 wins. (Actually, it just won > ;).) > > > > > multiplication operator in expressions like `-2*x` (although it does not > matter in that case). > >> >> without having to parenthesize unduly, but one cannot write >> >> let z = -x ** y; >> >> The user is forced by an early error to write either (-x)**y or -(x**y). > > In traditional math notation, when you mean `(-x)**n`, you write (-x)ⁿ with > mandatory parentheses, so I don’t expect that many people will be tempted to > miswrite it `-x ** n`. > > Making the parentheses mandatory here will be somewhat annoying in perfectly > reasonable expressions, where you usually don’t use parentheses in real math > notation., like: > ``` > let s2 = - x**2 - y**2 - z**2 + t**2 > ``` > > —Claude > > > > > > -- > Cheers, > --MarkM > >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss