François REMY <mailto:fremycompany_...@yahoo.fr>
January 12, 2012 2:23 PM
Am I wrong if I say there not a bigger issue with block lambda than with the current object notation on the matter?

Please continue :-).

I mean, does that code mean anything useful?

   function() {
       {|a,b| a+b};
   }

(You need a name for that function if it is a declaration, and from the context you show, it is.)

Does this perfectly valid JS mean anything useful?

  function f() {
    (function (a, b) { return a + b; });
  }

Nevertheless, it is legal. JS follows C (not Java) in allowing seemingly useless expression-statements. This can be a source of bugs. It is also required in some cases, namely when the function expression (in parentheses) is the completion value of a Program. In such a case that value could be the wanted result of eval or an eval-like host API.

If not (as it seems to me), it means that a block lambda will not be used as a statement by itself. If it's the case, it should defined as an Expression only,

Expression is already a kind of statement, via ExpressionStatement. Furthermore, an ExpressionStatement *already* cannot start with a left curly brace. Please read the grammar:

12.4 Expression Statement

Syntax

ExpressionStatement :
    [lookahead ? {{, function}] Expression ;

NOTE An ExpressionStatement cannot start with an opening curly brace because that might make it ambiguous with a Block. Also, an ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration.

where there's no anonymous block to conflict the syntax.

This is the conflict you're looking for.

That solution has been chosen for object notation in the past. That way,

   function() {
       {
           (a, b)
           a.add(b)
       }
   }

That is already valid ES1-6.

Others have already replied, but the problem with redefining ( after { without untenable newline sensitivity is it is a backward-incompatible change.

/be

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

Reply via email to