]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
bpo-39465: Fix _PyUnicode_FromId() for subinterpreters (GH-20058)
authorVictor Stinner <vstinner@python.org>
Fri, 25 Dec 2020 23:41:46 +0000 (00:41 +0100)
committerGitHub <noreply@github.com>
Fri, 25 Dec 2020 23:41:46 +0000 (00:41 +0100)
commitba3d67c2fb04a7842741b1b6da5d67f22c579f33
treed5d8f09c94f413f54ce6014e253ad1de59548bba
parentf0853bcedf8531856bdda149a540eaa0fc26e692
bpo-39465: Fix _PyUnicode_FromId() for subinterpreters (GH-20058)

Make _PyUnicode_FromId() function compatible with subinterpreters.
Each interpreter now has an array of identifier objects (interned
strings decoded from UTF-8).

* Add PyInterpreterState.unicode.identifiers: array of identifiers
  objects.
* Add _PyRuntimeState.unicode_ids used to allocate unique indexes
  to _Py_Identifier.
* Rewrite the _Py_Identifier structure.

Microbenchmark on _PyUnicode_FromId(&PyId_a) with _Py_IDENTIFIER(a):

[ref] 2.42 ns +- 0.00 ns -> [atomic] 3.39 ns +- 0.00 ns: 1.40x slower

This change adds 1 ns per _PyUnicode_FromId() call in average.
Include/cpython/object.h
Include/internal/pycore_interp.h
Include/internal/pycore_runtime.h
Misc/NEWS.d/next/Core and Builtins/2020-05-13-18-50-27.bpo-39465.j7nl6A.rst [new file with mode: 0644]
Objects/unicodeobject.c
Python/pystate.c