
"Raymond Hettinger" raymond.hettinger@verizon.net writes:
I've been working on ways to speedup parameter passing for function calls. It's somewhat expensive to pull parameters off of the stack, assemble them into a new tuple, have the function disassemble the tuple, and ultimately free the tuple.
Yahbut... that doesn't actually happen all that often.
METH_NOARGS and METH_O show nice speed-ups by skipping the tuple packing and unpacking. Since they are handled as special cases, that approach doesn't handle the general case with multiple or optional arguments.
Oh, you're talking about builtin functions.
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).
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.
Have you seen my "function optimization reorganization" patch on SF? It's a somewhat different result of somewhat similar thinking.
Cheers, mwh