
On 20. 10. 21 3:15, Victor Stinner wrote:
Extra info that I didn't put in the PEP to keep the PEP short.
Since Python 3.8, multiple macros have already been converted, including Py_INCREF() and Py_TYPE() which are very commonly used and so matter for Python performance.
Macros converted to static inline functions:
* Py_INCREF(), Py_DECREF(), Py_XINCREF(), Py_XDECREF(): Python 3.8 * PyObject_INIT(), PyObject_INIT_VAR(): Python 3.8 * Private functions: _PyObject_GC_TRACK(), _PyObject_GC_UNTRACK(), _Py_Dealloc(): Python 3.8 * Py_REFCNT(): Python 3.10 * Py_TYPE(), Py_SIZE(): Python 3.11
Macros converted to regular functions in Python 3.9:
* PyIndex_Check() * PyObject_CheckBuffer() * PyObject_GET_WEAKREFS_LISTPTR() * PyObject_IS_GC() * PyObject_NEW(): alias to PyObject_New() * PyObject_NEW_VAR(): alias to PyObjectVar_New()
To keep best performances on Python built without LTO, fast private variants were added as static inline functions to the internal C API:
* _PyIndex_Check() * _PyObject_IS_GC() * _PyType_HasFeature() * _PyType_IS_GC()
--
Many of these changes have been made to prepare the C API to make these structure opaque:
* PyObject: https://bugs.python.org/issue39573 * PyTypeObject: https://bugs.python.org/issue40170
Don't access structure members at the ABI level, but abstract them through a function call.
Some functions are still static inline functions (and so still access structure members at the ABI level), since the performance impact of converting them to regular functions was not measured yet.
I think this info should be in the PEP. If the PEP is rejected, would all these previous changes need to be reverted? Or just the ones done in 3.11?