> 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/

Reply via email to