On Wed, Jun 9, 2021 at 10:32 AM Ronald Oussoren via Python-Dev email@example.com wrote:
Its a bit late to complain (and I’m not affected by this myself), but those functions are part of the stable ABI. The change in 3.10 will break any extensions that use the stable ABI, use these functions and don’t use PY_SSIZE_T_CLEAN. I have no idea how many of those exist, especially given that the stable ABI doesn’t seem to be used a lot.
Require PY_SSIZE_T_CLEAN macro to be defined in an incompatible *API* change. At the ABI level, what changed if that C extensions built (with Python 3.9 and older) without PY_SSIZE_T_CLEAN now raise an error on Python 3.10 (for a few specific argument formats using "#"). Ah you are right, it's an incompatible ABI change.
It might be possible to keep the backward compatibility at the ABI level by adding a 3rd flavor of "parse" functions:
* parse with size_t: no change * parse without size_t: stable ABI * parse without size_t which raises an exception on "#" formats: new Python 3.10 functions
It's already painful to have 2 flavors of each functions. Adding a 3rd flavor would make the maintenance burden even worse, whereas Inada-san wants to opposite (remove the 2nd flavor to only have one!).
A more general question is: do we still want to keep backward compatibility with Python 3.2 released 10 years ago, or is it ok to start with a new stable ABI which drops backward compatibility with Python 3.5 (for example)?
It's maybe time to replace "abi3" with "abi4" in Python 3.10?