Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ctypes: Deprecate SetPointerType() and ARRAY() functions #105733

Closed
vstinner opened this issue Jun 13, 2023 · 10 comments
Closed

ctypes: Deprecate SetPointerType() and ARRAY() functions #105733

vstinner opened this issue Jun 13, 2023 · 10 comments
Labels
type-bug An unexpected behavior, bug, or error

Comments

@vstinner
Copy link
Member

vstinner commented Jun 13, 2023

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() and ctypes.ARRAY() by emitting a DeprecationWarning warning.

These functions are not documented and not used in Python, but there are tested.

Linked PRs

@encukou
Copy link
Member

encukou commented Jul 25, 2024

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.

@encukou encukou reopened this Jul 25, 2024
@encukou
Copy link
Member

encukou commented Jul 25, 2024

(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.)

@vstinner
Copy link
Member Author

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.

@picnixz
Copy link
Contributor

picnixz commented Jul 28, 2024

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)

@encukou
Copy link
Member

encukou commented Jul 29, 2024

So it's PEP 20 against PEP 387, or your opinion against mine :(

@JelleZijlstra
Copy link
Member

I would favor keeping ARRAY, since there is little maintenance cost involved and removing it would break at least some users.

@picnixz
Copy link
Contributor

picnixz commented Jul 29, 2024

I personally like ARRAY because it tells you that are you are creating an array (visually speaking)

@vstinner
Copy link
Member Author

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.

@encukou
Copy link
Member

encukou commented Jul 29, 2024

I'm for soft deprectation, because it tells you which of the two ways to do it is the obvious one :)

encukou added a commit that referenced this issue Jul 30, 2024
…it. (GH-122281)

Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it.

Partially reverts 2211454
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jul 30, 2024
…ating it. (pythonGH-122281)

Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it.

Partially reverts 2211454
(cherry picked from commit 3833d27)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
encukou added a commit that referenced this issue Jul 30, 2024
…cating it. (GH-122281) (GH-122440)

gh-105733: Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it. (GH-122281)

Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it.

Partially reverts 2211454
(cherry picked from commit 3833d27)

Co-authored-by: Petr Viktorin <encukou@gmail.com>
@picnixz
Copy link
Contributor

picnixz commented Jul 30, 2024

Closing since completed in #122281.

@picnixz picnixz closed this as completed Jul 30, 2024
blhsing pushed a commit to blhsing/cpython that referenced this issue Aug 22, 2024
…ating it. (pythonGH-122281)

Soft-deprecate ctypes.ARRAY, rather than hard-deprecating it.

Partially reverts 2211454
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

4 participants