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.
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 comprehension
Saturday, 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
KeywordStatement
Saturday, 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
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