On Nov 30, 2011, at 7:14 AM, Anton V. Yacenko wrote:

> It's interesting to me why () syntax returns object, and why not {}.

I assume you're talking about generator expressions, which have the syntax of 
array comprehensions but using parentheses as their outer delimiter. The idea 
originally came from Python, which uses parentheses for generator expressions.

Using {} is an interesting idea, but it could be tricky to fit that into the 
grammar, because of the overlap with object literals. Brendan has experimented 
with the idea of allowing overlap between different {} forms in other contexts:

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

In another discussion about do-expressions:

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

we talked about the possibility of allowing block statements as expressions:

    var g = { let x = f(); x * x };

and Allen Wirfs-Brock raised objections that allowing overlap between object 
literals and objects whose contents can be expressions will be a problem for 
human readers, even if formally unambiguous:

    https://mail.mozilla.org/pipermail/es-discuss/2011-November/018257.html

This issue will get worse as we work on extending the grammar of object 
literals, for example to allow computed property names in square brackets. In 
the context of generator expressions, this would lead to subtle differences 
like:

    var o = { [f(x)]: 12 };        // object literal with property name 
computed from f(x)
    var g = { [f(x)] for x of a }; // generator producing a sequence of 
singleton arrays containing f(x)

Put differently: we already overload the { } syntax for block statements and 
object literals, and we use the context to disambiguate. Overloading them 
further, especially within the same context, would lead to visual confusion.

Dave

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to