[Python-Dev] Store x Load x --> DupStore

Raymond Hettinger python at rcn.com
Mon Feb 21 22:24:32 CET 2005

> Where are the attempts to speed up function/method calls? That's an
> area where we could *really* use a breakthrough...

At one time you had entertained treating some of the builtin calls as
fixed.  Is that something you want to go forward with?  It would entail
a "from __future__" and transition period.

It would not be hard to take code like "return len(alist)" and transform
it from:

  2           0 LOAD_GLOBAL              0 (len)
              3 LOAD_FAST                0 (alist)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE      


  2           0 LOAD_FAST                0 (alist)
              3 OBJECT_LEN
              4 RETURN_VALUE      

Some functions already have a custom opcode that cannot be used unless
we freeze the meaning of the function name:  

    repr -->  UNARY_CONVERT --> PyObject_Repr
    iter -->  GET_ITER      --> PyObject_GetIter

Alternately, functions could be served by a table of known, fixed

  2           0 LOAD_FAST                0 (alist)
              3 CALL_DEDICATED           0 (PyObject_Len)
              6 RETURN_VALUE      

where the dispatch table is something like:  [PyObject_Len,
PyObject_Repr, PyObject_IsInstance, PyObject_IsTrue, PyObject_GetIter,

Of course, none of these offer a big boost and there is some loss of
dynamic behavior.


More information about the Python-Dev mailing list