[Python-Dev] optimizing non-local object access

Skip Montanaro skip@pobox.com (Skip Montanaro)
Thu, 9 Aug 2001 13:05:28 -0500


    Jeremy> Imagine we didn't special case ints in BINARY_ADD.  If you're
    Jeremy> doing mostly string addition, it's just slowing you down anyway
    Jeremy> :-).  Instead, a function that expected to see ints would check
    Jeremy> the types of the relevant args.

    Jeremy> def f(x):
    Jeremy>     return 2*x

    Jeremy> would become something like:

    Jeremy> def f(x):
    Jeremy>     if isinstance(x, int):
    Jeremy>         return 2 * x_as_int
    Jeremy>     else:
    Jeremy>         return 2 * x

    Jeremy> where the int branch could use opcodes that knew that x was an
    Jeremy> integer and could call its __add__ method directly.

Yeah, but all you've really done is extract the current inline test for int
arguments into a few more PyVM instructions.  You've sacrificed a fairly
fast special case test for more passes around the interpreter loop.  I'm not
sure how this can be a win in the current virtual machine.

Skip