Paren free
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Paren free

  • 3,748 views
Uploaded on

My bonus #txjs talk, on paren-free (not in ES.next yet but now backward compatible), also the for-in (same old) and for-of (over values including iterators) loops.

My bonus #txjs talk, on paren-free (not in ES.next yet but now backward compatible), also the for-in (same old) and for-of (over values including iterators) loops.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,748
On Slideshare
3,633
From Embeds
115
Number of Embeds
8

Actions

Shares
Downloads
18
Comments
0
Likes
4

Embeds 115

http://brendaneich.com 92
http://vimeo.com 9
http://www.google.com 6
http://twitter.com 3
http://inagist.com 2
https://twitter.com 1
http://tweetedtimes.com 1
http://paper.li 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Paren-free Brendan Eich brendan@mozilla.orgSaturday, June 11, 2011
  • 2. MotivationSaturday, June 11, 2011
  • 3. HistorySaturday, June 11, 2011
  • 4. History • JS derives from Java from C++ from C (via early C and B), from BCPL. BCPL had paren-free if, etc., heads disambiguated via the do reserved word to separate an expression consequent, avoiding ambiguity.Saturday, June 11, 2011
  • 5. History • JS derives from Java from C++ from C (via early C and B), from BCPL. BCPL had paren-free if, etc., heads disambiguated via the do reserved word to separate an expression consequent, avoiding ambiguity. • Many JS style guides favor mandatory bracing of if consequents and other sub-statement bodies, in order to avoid dangling else bugs.Saturday, June 11, 2011
  • 6. History • JS derives from Java from C++ from C (via early C and B), from BCPL. BCPL had paren-free if, etc., heads disambiguated via the do reserved word to separate an expression consequent, avoiding ambiguity. • Many JS style guides favor mandatory bracing of if consequents and other sub-statement bodies, in order to avoid dangling else bugs. • By comparison to nearby programming languages, JS syntax is “shifty” to write and noisy to read. Can we do better?Saturday, June 11, 2011
  • 7. Examples if year > 2010 { syntax++ } for let i of iter { // i is fresh on each iteration frob(i) } while lo <= hi { let mid = (lo + hi) / 2 // binary search body goes here } ... return [i * i for i in range(n)] // array comprehensionSaturday, June 11, 2011
  • 8. Examples, cont. • Must support: • but not mandate: if x < y { if x < y { } else if x < z { } else { } else if x < w { if x < z { } else { } else { } if x < w { } else { } } }Saturday, June 11, 2011
  • 9. Syntax • IfStatement : if Expression SubStatement else SubStatement if Expression SubStatement if ( Expression ) OtherStatement else Statement if ( Expression ) OtherStatement • etc. for while, do-while, for, switch, catch • SubStatement : Block KeywordStatementSaturday, June 11, 2011
  • 10. Syntax, cont. • KeywordStatement : • Statement : IfStatement Block IterationStatement KeywordStatement ContinueStatement OtherStatement BreakStatement ReturnStatement SwitchStatement • OtherStatement : ThrowStatement TryStatement EmptyStatement DebuggerStatement ExpressionStatement LabelledStatement VariableStatementSaturday, June 11, 2011
  • 11. CompatibilitySaturday, June 11, 2011
  • 12. Compatibility • if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized.Saturday, June 11, 2011
  • 13. Compatibility • if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized. • try, catch, finally must be braced as in ES3 and ES5.Saturday, June 11, 2011
  • 14. Compatibility • if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized. • try, catch, finally must be braced as in ES3 and ES5. • catch heads may be parenthesized or unparenthesized.Saturday, June 11, 2011
  • 15. Compatibility • if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized. • try, catch, finally must be braced as in ES3 and ES5. • catch heads may be parenthesized or unparenthesized. • for heads may be parenthesized or unparenthesized.Saturday, June 11, 2011
  • 16. Compatibility • if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized. • try, catch, finally must be braced as in ES3 and ES5. • catch heads may be parenthesized or unparenthesized. • for heads may be parenthesized or unparenthesized. • for-in/of heads may be parenthesized or unparenthesized.Saturday, June 11, 2011
  • 17. Compatibility • if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized. • try, catch, finally must be braced as in ES3 and ES5. • catch heads may be parenthesized or unparenthesized. • for heads may be parenthesized or unparenthesized. • for-in/of heads may be parenthesized or unparenthesized. • for-of loop, comprehension, and generator expression new semantics (next slide).Saturday, June 11, 2011
  • 18. for-in & for-ofSaturday, June 11, 2011
  • 19. for-in & for-of • for k in o iterates over keys not values for all objects o.Saturday, June 11, 2011
  • 20. for-in & for-of • for k in o iterates over keys not values for all objects o. • for k of {p:1, q:2} iterates over 1, 2.Saturday, June 11, 2011
  • 21. for-in & for-of • for k in o iterates over keys not values for all objects o. • for k of {p:1, q:2} iterates over 1, 2. • for v of [3, 4, 5] iterates over 3, 4, 5.Saturday, June 11, 2011
  • 22. for-in & for-of • for k in o iterates over keys not values for all objects o. • for k of {p:1, q:2} iterates over 1, 2. • for v of [3, 4, 5] iterates over 3, 4, 5. • for k of keys(o) iterates over keys in o.Saturday, June 11, 2011
  • 23. for-in & for-of • for k in o iterates over keys not values for all objects o. • for k of {p:1, q:2} iterates over 1, 2. • for v of [3, 4, 5] iterates over 3, 4, 5. • for k of keys(o) iterates over keys in o. • for v of values(o) iterates over values in o.Saturday, June 11, 2011
  • 24. for-in & for-of • for k in o iterates over keys not values for all objects o. • for k of {p:1, q:2} iterates over 1, 2. • for v of [3, 4, 5] iterates over 3, 4, 5. • for k of keys(o) iterates over keys in o. • for v of values(o) iterates over values in o. • for [k, v] of items(o) iterates over key/value pairs.Saturday, June 11, 2011
  • 25. for-in & for-of • for k in o iterates over keys not values for all objects o. • for k of {p:1, q:2} iterates over 1, 2. • for v of [3, 4, 5] iterates over 3, 4, 5. • for k of keys(o) iterates over keys in o. • for v of values(o) iterates over values in o. • for [k, v] of items(o) iterates over key/value pairs. • for x of proxy iterates using the handler iterate trap. (http://wiki.ecmascript.org/doku.php?id=harmony:iterators)Saturday, June 11, 2011