Closed vstinner closed 1 month ago
I disagree with the proposal. (And with taking one hour between a proposal and merge.)
The plan to remove ARRAY
in 3.15 goes against PEP 387:
If the expected maintenance overhead and security risk of the deprecated behavior is small (e.g. an old function is reimplemented in terms of a new, more general one), it can stay indefinitely (or until the situation changes).
(I'll note that this clarification got added a few days after this proposal, though.)
The function is two lines long, and has tests. It has no maintenance overhead or additional security risk. It's also used in third-party projects (some of which test with alphas/betas and have now switched to multiplication).
I propose to restore it and soft-deprecate instead. Would you be OK with that, @vstinner?
As for SetPointerType
, yeah, no one should be using that, and hardly anyone is.
(anecdotally: at EuroPython I've seen a person use ARRAY in the REPL. This is not worth them re-learning how to make array types.)
I didn't see any complain about the deprecation apart from you. I don't see the benefits of keeping two ways to create an array. PEP 20 says:
There should be one-- and preferably only one --obvious way to do it.
A code search on PyPI top 7,500 projects only finds 2 lines:
PYPI-2024-03-16/astroid-3.1.0.tar.gz: astroid-3.1.0/tests/brain/test_ctypes.py: ctypes.ARRAY(3, 2)
PYPI-2024-03-16/pwntools-4.12.0.tar.gz: pwntools-4.12.0/pwnlib/adb/bootloader.py: imgarray = ctypes.ARRAY(img_info, self.num_images)
The first one is stupid, ctypes.ARRAY(3, 2)
returns 6... The first parameter must be a ctypes type, not an integer.
There are a bit more usages on GitHub: https://github.com/search?q=%2F%28%3F-i%29ctypes%5C.ARRAY%5C%28%2F&type=code (but some of them are CPython but I found a bit more normal usages that are not 7 years old)
So it's PEP 20 against PEP 387, or your opinion against mine :(
I would favor keeping ARRAY, since there is little maintenance cost involved and removing it would break at least some users.
I personally like ARRAY
because it tells you that are you are creating an array (visually speaking)
There are a bit more usages on GitHub: https://github.com/search?q=%2F%28%3F-i%29ctypes%5C.ARRAY%5C%28%2F&type=code
Oh right. Let's keep ARRAY(). But I would suggest to simply remove the deprecation in this case, no need to soft deprecate it if we keep it.
I'm for soft deprectation, because it tells you which of the two ways to do it is the obvious one :)
Closing since completed in https://github.com/python/cpython/pull/122281.
The ctypes module has two undocumented functions: SetPointerType() and ARRAY(). These functions are marked as
XXX Deprecated
, but only in comments.I propose to deprecate
ctypes.SetPointerType()
andctypes.ARRAY()
by emitting a DeprecationWarning warning.These functions are not documented and not used in Python, but there are tested.
Linked PRs