[Python-Dev] Release of astoptimizer 0.3

Victor Stinner victor.stinner at gmail.com
Wed Sep 12 02:27:07 CEST 2012


> i am a longtime Reader of this list and this is the first time i a dare to
> speak up.
> Apology in advance for any noise, silly comments and not posting to
> python-ideas ;).

Welcome!

> Well how about implementing guards like in pypy?

Guards would allow to generate specialized functions without a JIT.

Dummy example:

def func(arg):
  arg *= 1
  arg += 0
  return arg * 16

Can be optimized to:

def func(arg):
  if type(arg) is int:
    # fast path
    return arg << 4
  else:
    # slow path
    arg *= 1
    arg += 0
    return arg * 16

I prefer a check before executing the code, rather than an exception
and reexecute the same code twice.

Specializing all functions would waste a lot of memory, so it should
only be applied on some very specific cases... It can also be slower
if the guard check is slower than the function body! But I bet that
guards would help to enable more aggressive optimizations, or at least
make some optimizations safe.

Dave Malcolm wrote a patch modifying eval.c to support specialized
functions. See the
http://bugs.python.org/issue10399

I don't know yet what is the best approach for CPython.

--

For the specific case of builtin functions and types, I made two
changes in Python 3.3:

 * the type of the builtins mapping can now be any mapping (Python <=
3.2 requires the dict type, dict subtypes are disallowed)
 * "new" types.MappingProxyType type to create a read-only proxy for a
mapping (see also the rejected PEP 416)

We may combine these two changes to use a read-only mapping for
builtins. It would at least help to ensure that an application does
not monkeypatch builtin functions/types.

Victor


More information about the Python-Dev mailing list