STINNER Victor <vstin...@python.org> added the comment:

I wrote PR 23366 to revert the Py_TYPE() and Py_SIZE() changes: convert them 
back to macros to allow again "Py_TYPE(obj) = type;" and "Py_SIZE(obj) = size;" 
syntaxes.


Miro Hrončok:
> Another batch of broken projects:
> PyPAM https://bugzilla.redhat.com/show_bug.cgi?id=1897264

"Py_TYPE="

> bitarray https://bugzilla.redhat.com/show_bug.cgi?id=1897536

"Py_TYPE=/Py_SIZE="

> boost https://bugzilla.redhat.com/show_bug.cgi?id=1896382

"Py_TYPE="

> duplicity https://bugzilla.redhat.com/show_bug.cgi?id=1896684

"Py_TYPE="

> gobject-introspection https://bugzilla.redhat.com/show_bug.cgi?id=1893194

"Py_TYPE="

> mercurial https://bugzilla.redhat.com/show_bug.cgi?id=1897178

"Py_TYPE=/Py_SIZE="

> pybluez https://bugzilla.redhat.com/show_bug.cgi?id=1897256

"Py_TYPE="

> pygobject3 https://bugzilla.redhat.com/show_bug.cgi?id=1894522

"Py_TYPE="

> pylibacl https://bugzilla.redhat.com/show_bug.cgi?id=1897529

"Py_TYPE="

> pyside2 https://bugzilla.redhat.com/show_bug.cgi?id=1898974

"Py_TYPE="

> rdiff-backup https://bugzilla.redhat.com/show_bug.cgi?id=1898980

"Py_TYPE="



> Those are just the initial set of packages we have discovered so far. I think 
> there will be more.

Well, since the PEP 620 is not accepted, I prefer to revert the Py_TYPE() and 
the Py_SIZE() changes for now. We should have a wider discussion on how to 
introduce incompatible changes into the C API before being able to push more 
incompatible changes which impact a so wide range of C extension modules.

One practical problem is how to estimate the number of broken Python projects 
to decide if an incompatible change can be introduced or not. When I did early 
experiment before merging the PR 20290, it seems like only a minority of C 
extensions rely on "Py_TYPE(obj) = type;" syntax. It's a common pattern to 
define a type statically. Pseudo-code:

---
PyTypeObject MyType = {...};

PyInit_MyExtension(...)
{
   Py_TYPE(&MyType) = ...;
   PyType_Ready(&MyType);
   ...
}
---

"Py_TYPE(&MyType) = ...;" is required since some C compilers don't support 
setting ob_type directly in the MyType static declaration. The type must be set 
at runtime.

Also I considered that the change is trivial enough to be accepable. Well, I 
was wrong, and that's why I'm not proposing to revert thes changes.

About the rationale for introducing C API incompatible changes, see the PEP 620.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39573>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to