[Python-Dev] 'stackless' python?
rushing at nightmare.com
rushing at nightmare.com
Thu May 13 11:40:19 CEST 1999
M.-A. Lemburg writes:
> Wouldn't it be possible to move all the C variables passed to
> eval_code() via the execution frame ? AFAIK, the frame is
> generated on every call to eval_code() and thus could also
> be generated *before* calling it.
I think this solves half of the problem. The C stack is both a value
stack and an execution stack (i.e., it holds variables and return
addresses). Getting rid of arguments (and a return value!) gets rid
of the need for the 'value stack' aspect.
In aiming for an enter-once, exit-once VM, the thorniest part is to
somehow allow python->c->python calls. The second invocation could
never save a continuation because its execution context includes a C
frame. This is a general problem, not specific to Python; I probably
should have thought about it a bit before posting...
> Don't know if moving the C stack stuff into the frame objects
> will get you the desired effect: what about other things having
> state (e.g. connections or files), that are not even touched
> by this mechanism ?
I don't think either of those cause 'real' problems (i.e., nothing
should crash that assumes an open file or socket), but there may be
other stateful things that might. I don't think that refcounts would
be a problem - a saved continuation wouldn't be all that different
from an exception traceback.
-Sam
p.s. Here's a tiny VM experiment I wrote a while back, to explain
what I mean by 'stackless':
http://www.nightmare.com/stuff/machine.h
http://www.nightmare.com/stuff/machine.c
Note how OP_INVOKE (the PROC_CLOSURE clause) pushes new context
onto heap-allocated data structures rather than calling the VM
recursively.
More information about the Python-Dev
mailing list