Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[3.13] gh-113993: Allow interned strings to be mortal, and fix related issues (GH-120520)#120945

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
encukou merged 1 commit intopython:3.13fromencukou:immortal-interned-3.13
Jun 24, 2024

Conversation

@encukou
Copy link
Member

@encukouencukou commentedJun 24, 2024
edited by bedevere-appbot
Loading

(cherry-picked from6f1d448)

  • Add an InternalDocs file describing how interning should work and how to use it.

  • Add internal functions toexplicitly request what kind of interning is done:

    • _PyUnicode_InternMortal
    • _PyUnicode_InternImmortal
    • _PyUnicode_InternStatic
  • Switch uses ofPyUnicode_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 theSSTATE_INTERNED_MORTAL toSSTATE_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 forsys.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

…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 assertionsCo-Authored-By: Eric Snow <ericsnowcurrently@gmail.com>
@bedevere-bot
Copy link

🤖 New build scheduled with the buildbot fleet by@encukou for commit70bfeae 🤖

If you want to schedule another build, you need to add the🔨 test-with-buildbots label again.

@bedevere-botbedevere-bot removed the 🔨 test-with-buildbotsTest PR w/ buildbots; report in status section labelJun 24, 2024
@encukouencukou merged commit9769b7a intopython:3.13Jun 24, 2024
@encukouencukou deleted the immortal-interned-3.13 branchJune 24, 2024 18:24
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@erlend-aaslanderlend-aaslandAwaiting requested review from erlend-aaslanderlend-aasland is a code owner

@rhettingerrhettingerAwaiting requested review from rhettingerrhettinger is a code owner

@berkerpeksagberkerpeksagAwaiting requested review from berkerpeksagberkerpeksag is a code owner

@pablogsalpablogsalAwaiting requested review from pablogsalpablogsal is a code owner

@lysnikolaoulysnikolaouAwaiting requested review from lysnikolaoulysnikolaou is a code owner

@ericsnowcurrentlyericsnowcurrentlyAwaiting requested review from ericsnowcurrentlyericsnowcurrently is a code owner

@kumaraditya303kumaraditya303Awaiting requested review from kumaraditya303kumaraditya303 is a code owner

@isidenticalisidenticalAwaiting requested review from isidenticalisidentical is a code owner

@markshannonmarkshannonAwaiting requested review from markshannonmarkshannon is a code owner

@iritkatrieliritkatrielAwaiting requested review from iritkatrieliritkatriel is a code owner

@methanemethaneAwaiting requested review from methanemethane is a code owner

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

2 participants

@encukou@bedevere-bot

[8]ページ先頭

©2009-2025 Movatter.jp