Brendan Eich (2013-07-16T19:05:43.000Z)
Mark S. Miller wrote:
> On Tue, Jul 16, 2013 at 10:54 AM, Claus Reinke 
> <claus.reinke at talk21.com <mailto:claus.reinke at talk21.com>> wrote:
>
>        // this doesn't work
>        function* generator(){
>            [1,2,3].forEach( function(x){ yield x } )
>
>        }
>
>         This would make generators deep, violating the
>         non-interleaving assumptions
>         of intermediate callers on the call stack. This is why we accepted
>         generators only on condition that they be shallow. We knew at
>         the time that
>         this privileges built-in control structures over user defined
>         ones. The
>         alternative would have been to omit generators completely. We
>         agree that
>         shallow generators were worth it, despite this non-uniformity.
>
>
>     While I understand the compromise, and the wish to get in some form
>     of generators anyway, the discrimination against user-defined control
>     structures troubles me deeply.
>
>
> Troubles me too. As of ES6 the only possible alternative would be to 
> remove generators from the language. I can't see that happening.

That would be somewhere between "making the perfect the enemy of the 
good" and "cutting off your nose to spite your face".

If we want call/cc (plus macros to sugar it into usability), there's the 
door -- it ain't in JS outside of Rhino, and (for good reasons you 
adduce) it won't be added.

But we have good use cases for generators, including to implement 
iterators independent of async. programming.

For async we're looking at defer/await for ES7.

This is how living languages evolve. Sorry to preach to the choir (I 
hope :-P).

/be
domenic at domenicdenicola.com (2013-07-19T15:38:15.904Z)
Mark S. Miller wrote:
> Troubles me too. As of ES6 the only possible alternative would be to 
> remove generators from the language. I can't see that happening.

That would be somewhere between "making the perfect the enemy of the 
good" and "cutting off your nose to spite your face".

If we want call/cc (plus macros to sugar it into usability), there's the 
door -- it ain't in JS outside of Rhino, and (for good reasons you 
adduce) it won't be added.

But we have good use cases for generators, including to implement 
iterators independent of async. programming.

For async we're looking at defer/await for ES7.

This is how living languages evolve. Sorry to preach to the choir (I 
hope :-P).