> Step 3: first pass of implementation detail removal > --------------------------------------------------- > > Modify the ``python`` API: > > * Add a new ``API`` subdirectory in the Python source code which will > "implement" the Python C API > * Replace macros with functions. The implementation of new functions > will be written in the ``API/`` directory. For example, Py_INCREF() > becomes the function ``void Py_INCREF(PyObject *op)`` and its > implementation will be written in the ``API`` directory. > * Slowly remove more and more implementation details from this API.
When I discussed this issue with Serhiy Storchaka, he didn't see the purpose of the API directory. I started to implement the PEP in my "capi2" fork of CPython: https://github.com/haypo/cpython/tree/capi2 See https://github.com/haypo/cpython/tree/capi2/API for examples of C code to "implement the C API". Just one example, the macro #define PyUnicode_IS_READY(op) (((PyASCIIObject*)op)->state.ready) is replaced with a function: int PyUnicode_IS_READY(const PyObject *op) { return ((PyASCIIObject*)op)->state.ready; } So the header file doesn't have to expose the PyASCIIObject, PyCompactUnicodeObject and PyUnicodeObject structures. I was already able to remove the PyUnicodeObject structure without breaking the C extensions of the stdib. I don't want to pollute Objects/unicodeobject.c with such "wrapper" functions. In the future, the implementation of API/ can evolve a lot. Victor _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/