Le jeu. 4 juin 2020 à 00:14, Nathaniel Smith <n...@pobox.com> a écrit :
> On Wed, Jun 3, 2020 at 2:10 PM Victor Stinner <vstin...@python.org> wrote:
> > For the short term, my plan is to make structure opaque in the limited
> > C API, before breaking more stuff in the public C API :-)
>
> But you're also breaking the public C API:
> https://github.com/MagicStack/immutables/issues/46
> https://github.com/pycurl/pycurl/pull/636
>
> I'm not saying you're wrong to do so, I'm just confused about whether
> your plan is to break stuff or not and on which timescale.

Yes, my plan includes backward incompatible changes on purpose:
https://github.com/vstinner/misc/blob/master/cpython/pep-opaque-c-api.rst#api-and-abi-incompatible-changes

The practical issue is to estimate how many C extension modules are
broken by a specific C API change. I plan to help out to port C
extensions to the updated C API. If the number of broken extensions is
fine and updating them is easy/short: fine! If the number is too high,
we have until "3.10.0 final: Monday, 2021-10-04" to revert
incompatible changes which caused most troubles.

I adopted a similar approach for Python incompatible changes in Python
3.9 and IMO it was successful. I made most incompatible changes at the
*beginning* of the 3.9 devcycle. Then my team at Red Hat rebuilt
Fedora operating systems with Python 3.9. We got tons of package build
failures. We grouped failures and looked for the incompatible changes
causing most issues.

Then Miro and me proposed to revert a few specific changes:

* 
https://lwn.net/ml/python-dev/cabqyc3y4sbcqt5knpjgo3dvsde2nhyropyedycqg+y+0fpu...@mail.gmail.com/
* https://lwn.net/Articles/811369/

At the end, we only revert exactly two changes: (1) aliases to ABC in
the collections module and (2) the "U" mode for open(). Python 3.9
still has an impressive list of removed features (incompatible
changes!):
https://docs.python.org/dev/whatsnew/3.9.html#removed

So far, I'm aware that last changes of
https://bugs.python.org/issue39573 "[C API] Make PyObject an opaque
structure in the limited C API" broke 4 projects (cython, numpy,
immutables, pycurl). I'm surprised by the length of fixes. For the
giant numpy project, only 5 lines were modified:
https://github.com/numpy/numpy/commit/a96b18e3d4d11be31a321999cda4b795ea9eccaa

FYI I introduced Py_SET_SIZE(), Py_SET_REFCNT() and Py_SET_TYPE()
functions in 3.9 and waited until Python 3.10 to introduce
incompatible changes. So Python 3.9 is the transition version. Sadly,
I failed to find a way to emit a deprecation warning when Py_TYPE(),
Py_SIZE() or Py_REFCNT() is used as an l-value (but not emit a warning
when it's used as an r-value).

... This discussion shifted from the initial issue raised by Mark.
Please join the capi-sig mailing list to discuss incompatible changes,
I started 2 threads there last month ;-)

Victor
-- 
Night gathers, and now my watch begins. It shall not end until my death.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/23LYPNHSSIWIZKMTUYXPRHQQRH5TKPGC/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to