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

Remove ma_version_tag (PEP 699 / PEP 509) #124296

Closed
colesbury opened this issue Sep 20, 2024 · 0 comments
Closed

Remove ma_version_tag (PEP 699 / PEP 509) #124296

colesbury opened this issue Sep 20, 2024 · 0 comments
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) performance Performance or resource usage type-feature A feature request or enhancement

Comments

@colesbury
Copy link
Contributor

colesbury commented Sep 20, 2024

Feature or enhancement

The accepted PEP 699 proposed removing the private ma_version_tag field from PyDictObject. Note that PEP 699 supersedes PEP 509, which originally proposed the field.

Why now?

  • The ma_version_tag field was deprecated in 3.12 and we are now working on 3.14, so I think this is in line with Python's backward compatibility policy from PEP 387.
  • Cython and PyTorch (dynamo) and Nuitka have stopped using it for CPython 3.12+. I don't think ma_version_tag ever saw widespread usage. Cython was the major user mentioned in PEP 699. 1
  • I think the ma_version_tag updates have a non-negligible cost in the free-threaded build, and it's easier and simpler to remove it (if we're planning to do that anyways) than to make it more efficient
  • It would be convenient to use some of the version tag bits for per-thread refcounting of globals and builtins. (See Mark's comment in Reference count contention with nested functions #124218 (comment)).
  • If we are going to remove this in 3.14, I think doing so earlier in the development cycle is better.

Dict Watchers

The ma_version_tag field is also used for dict watchers (8 bits) and the tier2 mutation counter (4 bits). We will still want that functionality.

cc @Fidget-Spinner @markshannon

Linked PRs

Footnotes

  1. I searched the top ~7500 sdists as well. The only other actual usage I saw was https://github.com/slezica/python-frozendict, which doesn't have a 3.11 or 3.12 C extension yet (but also functions as a pure-Python package).

@colesbury colesbury added type-feature A feature request or enhancement performance Performance or resource usage labels Sep 20, 2024
@Eclips4 Eclips4 added the interpreter-core (Objects, Python, Grammar, and Parser dirs) label Sep 20, 2024
colesbury added a commit to colesbury/cpython that referenced this issue Sep 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
interpreter-core (Objects, Python, Grammar, and Parser dirs) performance Performance or resource usage type-feature A feature request or enhancement
Projects
None yet
Development

No branches or pull requests

2 participants