paren free
DESCRIPTION
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.TRANSCRIPT
Paren-freeBrendan Eich
Saturday, June 11, 2011
Motivation
Saturday, June 11, 2011
History
Saturday, June 11, 2011
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
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
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
Examplesif 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 comprehension
Saturday, June 11, 2011
Examples, cont.• Must support:
if x < y {
} else if x < z {
} else if x < w {
} else {
}
• but not mandate:
if x < y {
} else {
if x < z {
} else {
if x < w {
} else {
} } }
Saturday, June 11, 2011
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 KeywordStatement
Saturday, June 11, 2011
Syntax, cont.• KeywordStatement :
IfStatement IterationStatement ContinueStatement BreakStatement ReturnStatement SwitchStatement ThrowStatement TryStatement DebuggerStatement
• Statement :
Block KeywordStatement OtherStatement
• OtherStatement :
EmptyStatement ExpressionStatement LabelledStatement VariableStatement
Saturday, June 11, 2011
Compatibility
Saturday, June 11, 2011
Compatibility
• if, while, do-while, and switch statements, where the head syntax is Expression, which may be over-parenthesized.
Saturday, June 11, 2011
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
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
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
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
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
for-in & for-of
Saturday, June 11, 2011
for-in & for-of• for k in o iterates over keys not values for all objects o.
Saturday, June 11, 2011
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
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
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
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
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
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