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