Dataflow concurrency instead of generators

Brendan Eich brendan at
Thu May 14 22:16:16 PDT 2009

On May 14, 2009, at 5:29 PM, David-Sarah Hopwood wrote:

> Brendan Eich wrote:
>> On May 14, 2009, at 4:34 PM, David-Sarah Hopwood wrote:
>>> This approach avoids any problems due to a generator being able
>>> to interfere with the control flow of its callers.
>> A generator can't interfere with the control flow of its callers.
>> Can you give an example of what you meant by that?
> I meant this:
> Brendan Eich wrote:
>> Jason Orendorff wrote:
>>> In ES5, when you call a function, you can expect it to return or  
>>> throw
>>> eventually.  (Unless you run out of memory, or time, and the whole
>>> script gets terminated.)  With shallow generators, this is still  
>>> true.
>>> A 'yield' might never return control, but function calls are ok.   
>>> But
>>> with generators+lambdas, almost any function call *anywhere* in the
>>> program might never return or throw.  This weakens 'finally', at
>>> least.
>> To make this clear with an example (thanks to Jason for some IRC  
>> interaction):
>> function gen(arg) {
>>    foo((lambda (x) yield x), arg);

Yeah, you meant generators *plus* lambdas -- not just generators.

Leave out lambda and there's no effect on control flow in callers of  
the thing (generator function, not lambda) that yields.


More information about the es-discuss mailing list