An idea for unmaintained incompatible C extensions is to update the C
code when a C extension is installed, as part of the build process.
For example, replace "Py_TYPE(obj) = new_type" with "Py_SET_TYPE(obj,
new_type)".

Something similar to the old "2to3" option of setuptools. The
upgrade_pythoncapi.py of the pythoncapi_compat project is already a
partial implementation of idea: it can update the C code, but it's not
integrated in tools like setuptools.

It's just an idea, a full implementation should be designed and written.

Victor

On Tue, Dec 7, 2021 at 5:56 PM Joao S. O. Bueno <jsbu...@python.org.br> wrote:
>
> Sorry for stepping in - but I am seeing too many arguments in favour
> of the rules because "they are the rules", and just Victor arguing with
> what is met in the "real world".
>
> But if this update can be done by a simple search/replace on the C source of 
> projects,
> I can only perceive two scenarios this will affect: well maintained projects,
>  for which it is fixable in minutes, and  stale packages, no longer released
> that "happen to work" when someone downloads and builds for new
> Python versions. In these cases, the build will fail. If the person trying
> the build can't fix it, but can take the error to a proper, or high 
> visibility,
> forum, someone will be able to come to the fix, leading to renewed
> visibility for the otherwise stale package.
>
>
>
> On Tue, 7 Dec 2021 at 12:40, Antoine Pitrou <anto...@python.org> wrote:
>>
>> On Tue, 7 Dec 2021 15:39:25 +0100
>> Petr Viktorin <encu...@gmail.com> wrote:
>>
>> > On 30. 11. 21 19:52, Victor Stinner wrote:
>> > > On Tue, Nov 30, 2021 at 7:34 PM Guido van Rossum <gu...@python.org> 
>> > > wrote:
>> > >> How about *not* asking for an exception and just following the PEP 387 
>> > >> process? Is that really too burdensome?
>> > >
>> > > The Backward Compatibility section gives an explanation:
>> > >
>> > > "This change does not follow the PEP 387 deprecation process. There is no
>> > > known way to emit a deprecation warning when a macro is used as a
>> > > l-value, but not when it's used differently (ex: r-value)."
>> > >
>> > > Apart of compiler warnings, one way to implement the PEP 387
>> > > "deprecation process" would be to announce the change in two "What's
>> > > New in Python 3.X?" documents. But I expect that it will not be
>> > > efficient. Extract of the Rejected Idea section:
>> > >
>> > > "(...) only few developers read the documentation, and only a minority
>> > > is tracking changes of the Python C API documentation."
>> > >
>> > > In my experience, even if a DeprecationWarning is emitted at runtime,
>> > > developers miss or ignore it. See the recent "[Python-Dev] Do we need
>> > > to remove everything that's deprecated?" discussion and complains
>> > > about recent removal of deprecated features, like:
>> > >
>> > > * collections.MutableMapping was deprecated for 7 Python versions
>> > > (deprecated in 3.3) -- removed in 3.9 alpha, reverted in 3.9 beta,
>> > > removed again in 3.11
>> > > * the "U" open() flag was deprecated for 10 Python versions
>> > > (deprecated in 3.0) -- removed in 3.9 alpha, reverted in 3.9 beta,
>> > > removed again in 3.11
>> > >
>> > > For this specific PEP changes, I consider that the number of impacted
>> > > projects is low enough to skip a deprecation process: only 4 projects
>> > > are known to be impacted. One year ago (Python 3.10), 16 were
>> > > impacted, and 12 have already been updated in the meanwhile. I'm
>> > > talking especially about Py_TYPE() and Py_SIZE() changes which, again,
>> > > has been approved by the Steering Council.
>> >
>> >
>> > The current version of the PEP looks nice, but I don't think the
>> > rationale is strong enough.
>> > I believe we should:
>> > - Mark the l-value usage as deprecated in the docs,
>> > - And then do nothing until we find an actual case where this issue
>> > blocks development (or is actively dangerous for users).
>>
>> Is there a way to emit a compilation warning when those macros are used
>> as l-values? Even if only enabled on some compilers.
>>
>> Regards
>>
>> Antoine.
>>
>>
>> _______________________________________________
>> 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/YMMRRVVYIS6PJR3WTKLYDFY3XJ3UAKW3/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>
> _______________________________________________
> 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/WNTZZYLT3VK6REJ3BEBVGNDGZCIXWFCA/
> Code of Conduct: http://python.org/psf/codeofconduct/



-- 
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/FEZN6IZO34IPYY52G5UDVIODT6YB5WI6/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to