Dataflow concurrency instead of generators

Brendan Eich brendan at mozilla.com
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.

/be



More information about the es-discuss mailing list