@@ -291,9 +291,11 @@ can be used to customize buffer creation.
291291PEP 684: A Per-Interpreter GIL
292292------------------------------
293293
294- Sub-interpreters may now be created with a unique GIL per interpreter.
294+ :pep: `684 ` introduces a per-interpreter:term: `GIL <global interpreter lock> `,
295+ so that sub-interpreters may now be created with a unique GIL per interpreter.
295296This allows Python programs to take full advantage of multiple CPU
296- cores.
297+ cores. This is currently only available through the C-API,
298+ though a Python API is:pep: `anticipated for 3.13 <554 >`.
297299
298300Use the new:c:func: `Py_NewInterpreterFromConfig ` function to
299301create an interpreter with its own GIL::
@@ -312,22 +314,22 @@ create an interpreter with its own GIL::
312314For further examples how to use the C-API for sub-interpreters with a
313315per-interpreter GIL, see:source: `Modules/_xxsubinterpretersmodule.c `.
314316
315- A Python API is anticipated for 3.13. (See:pep: `554 `.)
316-
317317(Contributed by Eric Snow in:gh: `104210 `, etc.)
318318
319319.. _whatsnew312-pep669 :
320320
321321PEP 669: Low impact monitoring for CPython
322322------------------------------------------
323323
324- CPython 3.12 now supports the ability to monitor calls,
325- returns, lines, exceptions and other events using instrumentation.
324+ :pep: `669 ` defines a new:mod: `API <sys.monitoring> ` for profilers,
325+ debuggers, and other tools to monitor events in CPython.
326+ It covers a wide range of events, including calls,
327+ returns, lines, exceptions, jumps, and more.
326328This means that you only pay for what you use, providing support
327329for near-zero overhead debuggers and coverage tools.
328-
329330See:mod: `sys.monitoring ` for details.
330331
332+ (Contributed by Mark Shannon in:gh: `103083 `.)
331333
332334New Features Related to Type Hints
333335==================================
@@ -459,12 +461,12 @@ and others in :gh:`103764`.)
459461Other Language Changes
460462======================
461463
462- * Add:ref: `perf_profiling ` through the new
463- environment variable:envvar: `PYTHONPERFSUPPORT `,
464- the new command-line option:option: `-X perf <-X> `,
464+ * Add:ref: `support for the perf profiler < perf_profiling > ` through the new
465+ environment variable:envvar: `PYTHONPERFSUPPORT `
466+ and command-line option:option: `-X perf <-X> `,
465467 as well as the new:func: `sys.activate_stack_trampoline `,
466468:func: `sys.deactivate_stack_trampoline `,
467- and:func: `sys.is_stack_trampoline_active `APIs .
469+ and:func: `sys.is_stack_trampoline_active `functions .
468470 (Design by Pablo Galindo. Contributed by Pablo Galindo and Christian Heimes
469471 with contributions from Gregory P. Smith [Google] and Mark Shannon
470472 in:gh: `96123 `.)
@@ -473,7 +475,7 @@ Other Language Changes
473475 have a new a *filter * argument that allows limiting tar features than may be
474476 surprising or dangerous, such as creating files outside the destination
475477 directory.
476- See:ref: `tarfile-extraction-filter ` for details.
478+ See:ref: `tarfile extraction filters < tarfile -extraction-filter> ` for details.
477479 In Python 3.14, the default will switch to ``'data' ``.
478480 (Contributed by Petr Viktorin in:pep: `706 `.)
479481
@@ -501,8 +503,8 @@ Other Language Changes
501503* A backslash-character pair that is not a valid escape sequence now generates
502504 a:exc: `SyntaxWarning `, instead of:exc: `DeprecationWarning `.
503505 For example, ``re.compile("\d+\.\d+") `` now emits a:exc: `SyntaxWarning `
504- (``"\d" `` is an invalid escape sequence) , use raw strings for regular
505- expression: ``re.compile(r"\d+\.\d+") ``.
506+ (``"\d" `` is an invalid escape sequence, use raw strings for regular
507+ expression: ``re.compile(r"\d+\.\d+") ``) .
506508 In a future Python version,:exc: `SyntaxError ` will eventually be raised,
507509 instead of:exc: `SyntaxWarning `.
508510 (Contributed by Victor Stinner in:gh: `98401 `.)
@@ -531,7 +533,7 @@ Other Language Changes
531533 when summing floats or mixed ints and floats.
532534 (Contributed by Raymond Hettinger in:gh: `100425 `.)
533535
534- * Exceptions raised in atypeobject 's ``__set_name__ `` method are no longer
536+ * Exceptions raised in aclass or type 's ``__set_name__ `` method are no longer
535537 wrapped by a:exc: `RuntimeError `. Context information is added to the
536538 exception as a:pep: `678 ` note. (Contributed by Irit Katriel in:gh: `77757 `.)
537539
@@ -567,7 +569,7 @@ asyncio
567569* Added:func: `asyncio.eager_task_factory ` and:func: `asyncio.create_eager_task_factory `
568570 functions to allow opting an event loop in to eager task execution,
569571 making some use-cases 2x to 5x faster.
570- (Contributed by Jacob Bower & ItamarO in:gh: `102853 `,:gh: `104140 `, and:gh: `104138 `)
572+ (Contributed by Jacob Bower & ItamarOren in:gh: `102853 `,:gh: `104140 `, and:gh: `104138 `)
571573
572574* On Linux,:mod: `asyncio ` uses:class: `asyncio.PidfdChildWatcher ` by default
573575 if:func: `os.pidfd_open ` is available and functional instead of
@@ -594,7 +596,7 @@ asyncio
594596 (Contributed by Kumar Aditya in:gh: `99388 `.)
595597
596598* Add C implementation of:func: `asyncio.current_task ` for 4x-6x speedup.
597- (Contributed by ItamarOstricher and Pranav Thulasiram Bhat in:gh: `100344 `.)
599+ (Contributed by ItamarOren and Pranav Thulasiram Bhat in:gh: `100344 `.)
598600
599601*:func: `asyncio.iscoroutine ` now returns ``False `` for generators as
600602:mod: `asyncio ` does not support legacy generator-based coroutines.
@@ -985,7 +987,7 @@ Optimizations
985987 (Contributed by Serhiy Storchaka in:gh: `91524 `.)
986988
987989* Speed up:class: `asyncio.Task ` creation by deferring expensive string formatting.
988- (Contributed by ItamarO in:gh: `103793 `.)
990+ (Contributed by ItamarOren in:gh: `103793 `.)
989991
990992* The:func: `tokenize.tokenize ` and:func: `tokenize.generate_tokens ` functions are
991993 up to 64% faster as a side effect of the changes required to cover:pep: `701 ` in
@@ -1000,9 +1002,9 @@ Optimizations
10001002CPython bytecode changes
10011003========================
10021004
1003- * Remove the:opcode: `LOAD_METHOD ` instruction. It has been merged into
1005+ * Remove the:opcode: `! LOAD_METHOD ` instruction. It has been merged into
10041006:opcode: `LOAD_ATTR `.:opcode: `LOAD_ATTR ` will now behave like the old
1005- :opcode: `LOAD_METHOD ` instruction if the low bit of its oparg is set.
1007+ :opcode: `! LOAD_METHOD ` instruction if the low bit of its oparg is set.
10061008 (Contributed by Ken Jin in:gh: `93429 `.)
10071009
10081010* Remove the:opcode: `!JUMP_IF_FALSE_OR_POP ` and:opcode: `!JUMP_IF_TRUE_OR_POP `
@@ -1838,7 +1840,7 @@ New Features
18381840* Added:c:func: `PyCode_AddWatcher ` and:c:func: `PyCode_ClearWatcher `
18391841 APIs to register callbacks to receive notification on creation and
18401842 destruction of code objects.
1841- (Contributed by ItamarOstricher in:gh: `91054 `.)
1843+ (Contributed by ItamarOren in:gh: `91054 `.)
18421844
18431845* Add:c:func: `PyFrame_GetVar ` and:c:func: `PyFrame_GetVarString ` functions to
18441846 get a frame variable by its name.