arrow function syntax simplified

Brendan Eich brendan at mozilla.com
Tue Mar 27 14:23:49 PDT 2012


On Mar 27, 2012, at 5:08 PM, Luke Hoban <lukeh at microsoft.com> wrote:

> Great to see the arrow syntax proposal moving forward. 
> 
> I think I missed a step though in the reasoning for moving to this proposal vs. the previous arrow proposal.  What problem did the previous proposal have that is addressed with the new proposal?

The ambiguity between a block body and an object literal expression body, which we would prefer to resolve in favor of object literal. The solutions considered before this edit were:

* http://wiki.ecmascript.org/doku.php?id=strawman:block_vs_object_literal

* Two-token lookahead restriction per http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax&rev=1307297899#grammar_changes

Both are hairy and not near consensus in TC39. The first isn't backward-compatible on edge cases that probably exist on the web. The second is future-hostile.


> There's a couple concerns I have with complexity added in the new version of this proposal:
> 
> 1) => and -> look similar, but have multiple points of difference.  Both what is allowed on the RHS and also binding of 'this'.  That will likely make this harder to explain and harder to reason about code on quick inspection.

Early errors help, and users learn. There is even a "YAGNI" opinion that says => is all you need, and Kevin Smith actually wrote an analysis tool to measure incidence, which supports this view.


> 2) This version seems to more or less rely on 'do expressions' to make the => form fully usable, which are more of a departure from current JS than arrow syntax itself.  What was the reason to disallow statement bodies on the RHS of =>?

See above, block vs object literal. Restricting => to have only an expression body and -> to have only a block body is the simple, brute-force solution. "When in doubt, use brute force."

I think fully TCP- compliant do expressions are pure win, FTR.

/be

> 
> Luke
> 
> -----Original Message-----
> From: es-discuss-bounces at mozilla.org [mailto:es-discuss-bounces at mozilla.org] On Behalf Of Brendan Eich
> Sent: Tuesday, March 27, 2012 12:44 PM
> To: es-discuss
> Subject: arrow function syntax simplified
> 
> http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax
> 
> Use => only with an expression body (do-expressions if accepted allow statements and combined with => compete with block-lambdas).
> 
> Use -> only with body block, as for long-form function.
> 
> I deferred other accretions.
> 
> In a rush here, comments and corrections welcome and I'll edit as I can.
> 
> /be
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
> 
> 


More information about the es-discuss mailing list