[Python-Dev] Idea for a fast calling convention

Jeremy Hylton jeremy at alum.mit.edu
Sat Feb 28 14:04:50 EST 2004


On Fri, 2004-02-27 at 03:20, Raymond Hettinger wrote:
> My idea is for a new flag, METH_STACK, that generalizes (and potentially
> replaces) METH_NOARGS AND METH_O.
> 
> When CALL_FUNCTION sees the flag, it dispatches (*meth)(self, &stack,
> numargs).

You're working specifically and calls to C functions, right?  The
fast_funtion() path essentially does this for functions coded in Python.

> On the receiving end, the arguments get retrieved with analogues to
> PyArg_ParseTuple() and PyArg_UnpackTuple() which access the parameters
> directly and do not need a tuple as a carrier.

I like Chris's suggestion to get rid of ParseTuple() where it's still
needed.  The primary motivation for METH_O IIRC was to avoid the
overhead of calling PyArg_ParseTuple(); the ability to eliminate the
tuple overhead was gravy.

There's one idea I had related to calling Python functions, not sure if
it makes much sense.  We push arguments onto the caller's stack then
copy them into the callee's frame.  I wonder if there's a way to
pre-allocate the callee's frame and "push" the arguments into that frame
directly.  It may not make much sense, because copying the arguments
from stack to frame probably isn't a big expense.

Jeremy





More information about the Python-Dev mailing list