[Python-Dev] [Python-checkins] r79397 - in python/trunk: Doc/c-api/capsule.rst Doc/c-api/cobject.rst Doc/c-api/concrete.rst Doc/data/refcounts.dat Doc/extending/extending.rst Include/Python.h Include/cStringIO.h Include/cobject.h Include/datetime.h Include/py_curses.h Include/pycapsule.h Include/pyexpat.h Include/ucnhash.h Lib/test/test_sys.py Makefile.pre.in Misc/NEWS Modules/_ctypes/callproc.c Modules/_ctypes/cfield.c Modules/_ctypes/ctypes.h Modules/_cursesmodule.c Modules/_elementtree.c Modules/_testcapimodule.c Modules/cStringIO.c Modules/cjkcodecs/cjkcodecs.h Modules/cjkcodecs/multibytecodec.c Modules/cjkcodecs/multibytecodec.h Modules/datetimemodule.c Modules/pyexpat.c Modules/socketmodule.c Modules/socketmodule.h Modules/unicodedata.c Objects/capsule.c Objects/object.c Objects/unicodeobject.c PC/VS7.1/pythoncore.vcproj PC/VS8.0/pythoncore.vcproj PC/os2emx/python27.def
Stefan Behnel
stefan_ml at behnel.de
Fri Mar 26 11:03:32 CET 2010
M.-A. Lemburg, 26.03.2010 10:20:
> Larry Hastings wrote:
>> 3. Because CObject is unsafe, I want to deprecate it in 2.7, and if we
>> ever made a 2.8 I want to remove it completely.
>
> Please remember that PyCObjects are not only used internally
> in CPython, but also in other 3rd party modules to expose C APIs
> and those will generally have to support more than just the latest
> Python release.
The removal of PyCObject from Py3.2 pretty much caught the Cython project
by surprise, as they had been The One Obvious Way for public C-APIs for
ages. We quickly switched to PyCapsule back then, but only for newer 3.x
versions. This is easy to do when your code relies on Cython (or its
generated header files) for importing and exporting this C-API, as a
rebuild will just do all the work for you. However, if you have to do this
manually, you will basically have to write all the code yourself that
Cython now generates.
If this can be done using preprocessor macros, fine. But the underlying ABI
should not be changed in Py2.x. The normal 2.x approach would be to add the
new API *in addition* to the old one, potentially by providing macros that
map the new functionality to the old one, but not the other way round. That
would allow code to be written that works in both Py2.7 and Py3.2+, without
breaking backwards compatibility with existing Py2.x libraries.
And, no, recompilation is not always an option and certainly shouldn't be
required for the soon to be discontinued 2.x line. The *only* reason for
the very existence of 2.7 is to not break backwards compatibility.
> If you deprecate those C APIs, the process will at least have to cover
> one more release, i.e. run through the whole deprecation process:
>
> 1. pending deprecation (2.7)
> 2. deprecation (2.8)
> 3. removal (2.9)
If you replace 2.8 by 3.1 and 2.9 by 3.2, that's more or less what has
happened already. No need to put any more thoughts into Py2.x for that purpose.
Stefan
More information about the Python-Dev
mailing list