From: Armin R. <ar...@tu...> - 2004-08-12 16:46:34
|
Hello Chris, On Sat, Jul 31, 2004 at 12:40:14AM -0400, Chris King wrote: > > > Implementing generators in C is trivial: > >=20 > > I don't think I agree with this sentence, either. >=20 > Well, to try and convince you of my stance, you can download > proof-of-concept C generators from > http://users.wpi.edu/~squirrel/temp/cgen.c. I did the implementation > using the nifty ucontext mechanism, after attempting a setjmp/longjmp > implementation. I see. Yes, this kind of implementation is close in spirit to how some versions of Stackless work. The ucontext mechanism (which I didn't know about, thanks) appears not to be portable, though, and I don't think you = can do it with setjmp/longjmp. But it does indeed work more or less like thi= s in Stackless nowadays. There is even an off-product of Stackless called Greenlets that is essentially a Python-oriented ucontext implementation. = =20 (Both Stackless and Greenlets use a few lines of assembly code to hack th= e stack.) > Of course, I'm not sure if this helps the Psyco case any... It might do. Christian "Stackless" Tismer offered a similar way to suppo= rt generators on top of Stackless, which would then more or less automatical= ly work with Psyco. In the meantime, we drifted over to the present situati= on, which is to use bytecode rewriting of generators instead, to turn them in= to regular Python functions that save their state manually. This will give = a different kind of generated code with Psyco: the state will be saved off = and restored to the C stack around a 'yield'. In some sense it is better bec= ause it avoids keeping a lot of small C stacks around (and Psyco wastes quite = a lot of C stack space, so multiplying it by the number of active generator instances doesn't look like a good idea). A bient=F4t, Armin. |