next(arg) was: Anonymous blocks: Thunks or iterators?
Guido van Rossum:
One [of many separate ideas in PEP 340] is turning generators into more general coroutines: continue EXPR passes the expression to the iterator's next() method ...
I would have been very happy with that a week ago. Seeing the specific implementation changed my mind. The caller shouldn't know what state the generator is in, so the passed-in-message will be the same regardless of which yield accepts it. Unless I have a single-yield generator, this means I end up writing boilerplate code to accept and process the arg at each yield. I don't want more boilerplate.
Even without a block-statement, these two changes make yield look a lot like invoking a thunk
Though it feels backwards to me; yield is returning control to something that already had to coordinate the thunks itself. -jJ
[Guido van Rossum]
One [of many separate ideas in PEP 340] is turning generators into more general coroutines: continue EXPR passes the expression to the iterator's next() method ...
[Jim Jewett]
I would have been very happy with that a week ago. Seeing the specific implementation changed my mind.
The caller shouldn't know what state the generator is in, so the passed-in-message will be the same regardless of which yield accepts it. Unless I have a single-yield generator, this means I end up writing boilerplate code to accept and process the arg at each yield. I don't want more boilerplate.
I think your premise is wrong. When necessary (which it usually won't be) the caller can tell the generator's state from the last thing it yielded. Coroutines can easily define a protocol based on this if needed. Anyway, single-yield generators are by far the majority. -- --Guido van Rossum (home page: http://www.python.org/~guido/)
participants (2)
-
Guido van Rossum
-
Jim Jewett