]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
[3.12] gh-106931: Intern Statically Allocated Strings Globally (gh-107272) (gh-110713)
authorEric Snow <ericsnowcurrently@gmail.com>
Mon, 27 Nov 2023 23:51:12 +0000 (16:51 -0700)
committerGitHub <noreply@github.com>
Mon, 27 Nov 2023 23:51:12 +0000 (23:51 +0000)
commit4f71f1680de11baf7fb421ef500f36ffd5936b58
tree425096370065266c1c762cd13bd0503b7a5952b4
parent60a08e6ff2ef8306d276a40f861bf46f34ba09bd
[3.12] gh-106931: Intern Statically Allocated Strings Globally (gh-107272) (gh-110713)

We tried this before with a dict and for all interned strings.  That ran into problems due to interpreter isolation.  However, exclusively using a per-interpreter cache caused some inconsistency that can eliminate the benefit of interning.  Here we circle back to using a global cache, but only for statically allocated strings.  We also use a more-basic _Py_hashtable_t for that global cache instead of a dict.

Ideally we would only have the global cache, but the optional isolation of each interpreter's allocator means that a non-static string object must not outlive its interpreter.  Thus we would have to store a copy of each such interned string in the global cache, tied to the main interpreter.

(cherry-picked from commit b72947a8d26915156323ccfd04d273199ecb870c)
Doc/data/python3.12.abi
Include/cpython/unicodeobject.h
Include/internal/pycore_global_objects.h
Include/internal/pycore_hashtable.h
Include/internal/pycore_runtime.h
Include/internal/pycore_runtime_init.h
Lib/test/test_sys.py
Misc/NEWS.d/next/Core and Builtins/2023-07-25-15-29-26.gh-issue-106931.kKU1le.rst [new file with mode: 0644]
Objects/unicodeobject.c
Python/hashtable.c
Tools/build/deepfreeze.py