[Python-Dev] Minimal 'stackless' PEP using generators? (original) (raw)

Clark C. Evans cce at clarkevans.com
Mon Aug 23 18:34:20 CEST 2004


On Mon, Aug 23, 2004 at 11:56:04AM -0400, Phillip J. Eby wrote: | >1. The PEP would introduce a new 'builtin' class called 'Cooperate' | > | >2. Generator semantics would be altered so that 'yield X', where X | > is an instance of Cooperate, would automagically propigate to | > the outer-most non-generator. || Perhaps you mean "inner-most"?

Yes. The top-most non-generator on the stack.

| It doesn't seem to me to actually help anything. You can already do this | using a simple wrapper object that maintains a stack of active | generators, as I do in 'peak.events'.

Could you provide an example? The problem this proposal solves is straight-foward -- it is tedious and slow to have intermediate generators do stuff like:

def middle():
""" intermediate generator _only_ sees one and two """
for x in top():

! if isinstance(x,X): ! yield x print "middle", x yield x

This extra step is tedious and also slow; especially if one has lots of yield statements that cooperate. It could be standardized and made a bit snappier if it was built-in behavior. This is an 80/5 proposal. One gets 80% of the happiness, with 5% of the pain.

| I was hoping that you had actually come up with a solution for the more | complex problem of suspending non generator functions, in a way that | would work with CPython. :(

Yes, I know. I'm trying to avoid this much harder problem.

Clark



More information about the Python-Dev mailing list