[Python-Dev] 'stackless' python?
Tim Peters
tim_one at email.msn.com
Wed May 19 07:41:45 CEST 1999
[Christian Tismer]
>>> ...
>>> Yup. With a little counting, it was easy to survive:
>>>
>>> def main():
>>> global a
>>> a=2
>>> thing (5)
>>> a=a-1
>>> if a:
>>> saved.throw (0)
[Tim]
>> Did "a" really need to be global here? I hope you see the same behavior
>> without the "global a";
[which he does, but for mysterious reasons]
[Christian]
> Actually, the frame-copying was not enough to make this
> all behave correctly. Since I didn't change the interpreter,
> the ceval.c incarnations still had copies to the old frames.
> The only effect which I achieved with frame copying was
> that the refcounts were increased correctly.
All right! Now you're closer to the real solution <wink>; i.e., copying
wasn't really needed here, but keeping stuff alive was. In Scheme terms,
when we entered main originally a set of bindings was created for its
locals, and it is that very same set of bindings to which the continuation
returns. So the continuation *should* reuse them -- making a copy of the
locals is semantically hosed.
This is clearer in Scheme because its "stack" holds *only* control-flow info
(bindings follow a chain of static links, independent of the current "call
stack"), so there's no temptation to run off copying bindings too.
elegant-and-baffling-for-the-price-of-one<wink>-ly y'rs - tim
More information about the Python-Dev
mailing list