[pypy-dev] Confusion with meaning of "Stackless"
len-l at telus.net
Thu Dec 14 23:12:57 CET 2006
On 14 Dec 2006 at 7:48, Armin Rigo wrote:
> Hi Lenard,
> On Wed, Dec 13, 2006 at 03:50:21PM -0800, Lenard Lindstrom wrote:
> > Tasklets are nice, but I just wish to update my understanding of
> > "Stackless". Does the old motto "A Python Implementation That Does
> > Not Use The C Stack"  still apply? Is it relevant to PyPy?
> Yes and no. A bit confusingly, the usage of the term has evolved, along
> with the Stackless Python project itself. Now, "a Stackless feature"
> means a feature that cannot be implemented without some form of explicit
> stack control, either by being very careful about the C code (e.g.
> avoiding recursive calls) or by saving and restoring pieces of the C
> stack by a brute force 'memcpy' approach. In PyPy, we use a variant of
> the former approach: a "stackless build" of pypy-c is a compiled version
> of some C code that was generated with careful systematic tweaks.
> The motto of a Stackless PyPy is probably: "A Python implementation that
> uses the C Stack as a cache". Indeed, the C code supports saving its
> own stack of frames away into the heap, and restoring it from there,
> frame by frame. So the C stack is really just a cache for the heap. If
> the cache is full (stack overflow), we save some more frames into the
> heap to free some cache space. If a context switch occurs (coroutine
> switch) the cache is invalidated (entierely flushed to the heap) and the
> new context's frames are copied from the heap to the cache as needed
> (the function's frames are resumed one by one).
Thanks for the explanation. I find that "Stackless" is still
associated with Scheme like continuations and unlimited recursion
. But yes, the PyPy documentation clearly states that "Stackless"
means greenlets, coroutines and tasklets at the application level.
<len-l at telus.net>
More information about the Pypy-dev