Allen Wirfs-Brock wrote:
On Jun 8, 2012, at 3:58 PM, Brendan Eich wrote:
Allen Wirfs-Brock wrote:
It may well be that the initial Expression of the ArrayComprehension
productions should be an AssignmentExpression in order to avoid commas.
This is just a draft-spec grammar bug. What I implemented in SpiderMonkey many
years ago is what is grammatically necessary: AssignmentExpression. Otherwise
you have not only a readability problem as Jay wrote, but a real problem in
top-down parsers deciding whether you are in an array initialiser or array
comprehension. Bottom up parsers can cope but practical implementations are all
top-down.
What do you think about the expression following the of or if of a
comprehension,
[<assign-expr> for ( <pattern> of <expr > ) if (<expr>)]
is an informal way to grammar. As in for-of loops and if statements, we
want Expression. This is what SpiderMonkey and Rhino implement, but of
course not paren-free.
assuming we are going to be paren-free. Both can be in a trailing position
within a comprehension. I don't think there are any parsing issue with them,
but they represent similar readability issues:
[ i for i of foo, bar]
[i for i of foo if i!=="bar", false]
Assignment expression would eliminate that reability issue. Of course, so
would mandatory parrens.
Good to discuss both options, even though we'd be diverging from the for
and if statement sub-grammar in this regard if we use <assign-expr> not
<expr>. But let's talk about paren-free heads first. That is not a slam
dunk in my view, since Waldemar cited code-under-maintenance hazards
with paren-free in general that made me vow to go back to do "paren-free
redux" that included more newline signfiicance.
In comprehensions, newlines are not common and can't help. OTOH
comprehensions are restrictive enough that the hazards under maintenance
that Waldemar cited:
https://mail.mozilla.org/pipermail/es-discuss/2011-September/016804.html
do not obviously arise. In a comprehension, there's always a 'for' or
'if' always-reserved keyword separating successive parts, unlike in the
'then'-free C-style 'if' statement with a paren-free head and no
mandatory braces around the consequent.
But even before we seek further hard cases, perhaps we should agree that
paren-free heads in comprehensions and generator expressions are a goal
for ES6. We could defer along with paren-free in full, get on with our
lives.
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss