Block lambda is cool, its syntax isn't

David Herman dherman at mozilla.com
Thu Jan 12 18:09:09 PST 2012


On Jan 12, 2012, at 2:23 PM, François REMY wrote:

> 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, where there's no anonymous block to conflict the syntax. That solution has been chosen for object notation in the past. That way,
> 
>   function() {
>       {
>           (a, b)
>           a.add(b)
>       }
>   }
> 
> would still be an anonymous block where
> 
>   function() {
>       asyncAction(..., { (a, b) a.add(b); } }
>   }
> 
> would be a block lambda as an argument of an async function. No semantic change for an identical syntax, in regards to strict ES5.

So simple, and so brilliant. I love it!

I must say, the parens look much prettier to me, and they're of course more consistent with JS precedent.

It does help to write a reasonable chunk of code to compare syntaxes for uses of a feature "in the wild." Does some enterprising es-discusser wanna take a big JS program with a bunch of little anonymous functions, swap them out with block lambdas, and make two gists with the two different syntaxes? That'd be super helpful.

> And since I still continue to hope we'll ditch the unprefixed anonymous block in some future revision of ES, that very small edge case could vanish at the same time.

I don't understand what you're referring to here -- what do you mean by "unprefixed anonymous block?"

> Does it seems possible/acceptable?

Lovely.

Dave



More information about the es-discuss mailing list