GeezerVison is showing github.com — [3.13] gh-113993: Allow interned strings to be mortal, and fix related issues (GH-120520) by encukou · Pull Request #120945 · python/cpython
Conversation
encukou
commented
Jun 24, 2024
•
edited by bedevere-app
Bot
Loading
Uh oh!
There was an error while loading. Please reload this page.
(cherry-picked from 6f1d448)
-
Add an InternalDocs file describing how interning should work and how to use it.
-
Add internal functions to explicitly request what kind of interning is done:
_PyUnicode_InternMortal
_PyUnicode_InternImmortal
_PyUnicode_InternStatic
-
Switch uses of PyUnicode_InternInPlace to those.
-
Disallow using _Py_SetImmortal on strings directly. You should use _PyUnicode_InternImmortal instead:
- Strings should be interned before immortalization, otherwise you're possibly interning a immortalizing copy.
_Py_SetImmortal doesn't handle the SSTATE_INTERNED_MORTAL to SSTATE_INTERNED_IMMORTAL update, and those flags can't be changed in backports, as they are now part of public API and version-specific ABI.
-
Add private _only_immortal argument for sys.getunicodeinternedsize, used in refleak test machinery.
-
Make sure the statically allocated string singletons are unique. This means these sets are now disjoint:
_Py_ID
_Py_STR (including the empty string)
- one-character latin-1 singletons
Now, when you intern a singleton, that exact singleton will be interned.
-
Add a _Py_LATIN1_CHR macro, use it instead of _Py_ID/_Py_STR for one-character latin-1 singletons everywhere (including Clinic).
-
Intern _Py_STR singletons at startup.
-
For free-threaded builds, intern _Py_LATIN1_CHR singletons at startup.
-
Beef up the tests. Cover internal details (marked with @cpython_only).
-
Add lots of assertions
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
…related issues (pythonGH-120520)
* Add an InternalDocs file describing how interning should work and how to use it.
* Add internal functions to *explicitly* request what kind of interning is done:
- `_PyUnicode_InternMortal`
- `_PyUnicode_InternImmortal`
- `_PyUnicode_InternStatic`
* Switch uses of `PyUnicode_InternInPlace` to those.
* Disallow using `_Py_SetImmortal` on strings directly.
You should use `_PyUnicode_InternImmortal` instead:
- Strings should be interned before immortalization, otherwise you're possibly
interning a immortalizing copy.
- `_Py_SetImmortal` doesn't handle the `SSTATE_INTERNED_MORTAL` to
`SSTATE_INTERNED_IMMORTAL` update, and those flags can't be changed in
backports, as they are now part of public API and version-specific ABI.
* Add private `_only_immortal` argument for `sys.getunicodeinternedsize`, used in refleak test machinery.
* Make sure the statically allocated string singletons are unique. This means these sets are now disjoint:
- `_Py_ID`
- `_Py_STR` (including the empty string)
- one-character latin-1 singletons
Now, when you intern a singleton, that exact singleton will be interned.
* Add a `_Py_LATIN1_CHR` macro, use it instead of `_Py_ID`/`_Py_STR` for one-character latin-1 singletons everywhere (including Clinic).
* Intern `_Py_STR` singletons at startup.
* For free-threaded builds, intern `_Py_LATIN1_CHR` singletons at startup.
* Beef up the tests. Cover internal details (marked with `@cpython_only`).
* Add lots of assertions
Co-Authored-By: Eric Snow <[email protected]>
encukou
requested review from
berkerpeksag,
ericsnowcurrently,
erlend-aasland,
iritkatriel,
isidentical,
kumaraditya303,
lysnikolaou,
markshannon,
methane,
pablogsal and
rhettinger
as code owners
June 24, 2024 12:45
This was referenced Jun 24, 2024
|
🤖 New build scheduled with the buildbot fleet by @encukou for commit 70bfeae 🤖
If you want to schedule another build, you need to add the 🔨 test-with-buildbots label again.
|
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Assignees
No one assigned
Milestone
No milestone
Development
Successfully merging this pull request may close these issues.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
|