[Python-Dev] A new JIT compiler for a faster CPython?
Amaury Forgeot d'Arc
amauryfa at gmail.com
Wed Jul 18 00:49:18 CEST 2012
2012/7/18 Nick Coghlan <ncoghlan at gmail.com>:
> On the cpyext front, it would be rather helpful if developers interested in
> a high speed Python interpreter with good C extension compatibility worked
> with Dave Malcolm on his static analyser for Python C extensions. One of the
> reasons cpyext has trouble is that many refcounting bugs in extensions
> aren't fatal on CPython’s due to additional internal references - a refcount
> of 1 when it should be 2 is survivable in a way that 0 vs 1 is not.
It's not only about bugs. Even when reference counts are correctly
managed, cpyext is slow:
- each time an object crosses the C|pypy boundary, there is a dict lookup (!)
- each time a new object is passed or returned to C, a PyObject
structure must be allocated
(and sometime much more, specially for strings and types). Py_DECREF
will of course
free the PyObject, so next time will allocate the object again.
- borrowed references are a nightmare.
> Get rid of that drudgery from hacking on cpyext and it becomes significantly
> easier to expand the number of extensions that will work across multiple
> implementations of the API.
There are also some extension modules that play tricky games with the API;
PyQt for example uses metaclasses with a custom tp_alloc slot, to have access
to the PyTypeObject structure during the construction of the type...
The Python C API is quite complete, but some use cases are still
poorly supported.
--
Amaury Forgeot d'Arc
More information about the Python-Dev
mailing list