]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] GH-123299: Copyedit 3.14 What's New: CPython bytecode changes (GH-139402)...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 29 Sep 2025 15:55:26 +0000 (17:55 +0200)
committerGitHub <noreply@github.com>
Mon, 29 Sep 2025 15:55:26 +0000 (18:55 +0300)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Doc/library/dis.rst
Doc/whatsnew/3.14.rst
Doc/whatsnew/3.7.rst

index 711ef55def694937ab05e4d8472e7f72e0659891..593720f573891184722e7cea1a208c74309bd773 100644 (file)
@@ -1102,11 +1102,6 @@ iterations of the loop.
    Pushes ``co_consts[consti]`` onto the stack.
 
 
-.. opcode:: LOAD_CONST_IMMORTAL (consti)
-
-   Works as :opcode:`LOAD_CONST`, but is more efficient for immortal objects.
-
-
 .. opcode:: LOAD_SMALL_INT (i)
 
    Pushes the integer ``i`` onto the stack.
@@ -1647,7 +1642,7 @@ iterations of the loop.
 
    Pushes a ``NULL`` to the stack.
    Used in the call sequence to match the ``NULL`` pushed by
-   :opcode:`LOAD_METHOD` for non-method calls.
+   :opcode:`!LOAD_METHOD` for non-method calls.
 
    .. versionadded:: 3.11
 
@@ -1968,14 +1963,20 @@ but are replaced by real opcodes or removed before bytecode is generated.
    Marks the end of the code block associated with the last ``SETUP_FINALLY``,
    ``SETUP_CLEANUP`` or ``SETUP_WITH``.
 
+
+.. opcode:: LOAD_CONST_IMMORTAL (consti)
+
+   Works as :opcode:`LOAD_CONST`, but is more efficient for immortal objects.
+
+
 .. opcode:: JUMP
-.. opcode:: JUMP_NO_INTERRUPT
+            JUMP_NO_INTERRUPT
 
    Undirected relative jump instructions which are replaced by their
    directed (forward/backward) counterparts by the assembler.
 
 .. opcode:: JUMP_IF_TRUE
-.. opcode:: JUMP_IF_FALSE
+            JUMP_IF_FALSE
 
    Conditional jumps which do not impact the stack. Replaced by the sequence
    ``COPY 1``, ``TO_BOOL``, ``POP_JUMP_IF_TRUE/FALSE``.
@@ -1991,12 +1992,6 @@ but are replaced by real opcodes or removed before bytecode is generated.
       This opcode is now a pseudo-instruction.
 
 
-.. opcode:: LOAD_METHOD
-
-   Optimized unbound method lookup. Emitted as a ``LOAD_ATTR`` opcode
-   with a flag set in the arg.
-
-
 .. _opcode_collections:
 
 Opcode collections
index caeff3a00aa04923e7d43eb5c4d9045b5e72b991..9f88271161a869958b0a192e80cdcb1c6997a89a 100644 (file)
@@ -2800,9 +2800,79 @@ Deprecated
 CPython bytecode changes
 ========================
 
-* Replaced the opcode ``BINARY_SUBSCR`` by :opcode:`BINARY_OP` with oparg ``NB_SUBSCR``.
+* Replaced the opcode :opcode:`!BINARY_SUBSCR` by the :opcode:`BINARY_OP`
+  opcode with the ``NB_SUBSCR`` oparg.
   (Contributed by Irit Katriel in :gh:`100239`.)
 
+* Add the :opcode:`BUILD_INTERPOLATION` and :opcode:`BUILD_TEMPLATE`
+  opcodes to construct new :class:`~string.templatelib.Interpolation`
+  and :class:`~string.templatelib.Template` instances, respectively.
+  (Contributed by Lysandros Nikolaou and others in :gh:`132661`;
+  see also :ref:`PEP 750: Template strings <whatsnew314-pep750>`).
+
+* Remove the :opcode:`!BUILD_CONST_KEY_MAP` opcode.
+  Use :opcode:`BUILD_MAP` instead.
+  (Contributed by Mark Shannon in :gh:`122160`.)
+
+* Replace the :opcode:`!LOAD_ASSERTION_ERROR` opcode with
+  :opcode:`LOAD_COMMON_CONSTANT` and add support for loading
+  :exc:`NotImplementedError`.
+
+* Add the :opcode:`LOAD_FAST_BORROW` and :opcode:`LOAD_FAST_BORROW_LOAD_FAST_BORROW`
+  opcodes to reduce reference counting overhead when the interpreter can prove
+  that the reference in the frame outlives the reference loaded onto the stack.
+  (Contributed by Matt Page in :gh:`130704`.)
+
+* Add the :opcode:`LOAD_SMALL_INT` opcode, which pushes a small integer
+  equal to the ``oparg`` to the stack.
+  The :opcode:`!RETURN_CONST` opcode is removed as it is no longer used.
+  (Contributed by Mark Shannon in :gh:`125837`.)
+
+* Add the new :opcode:`LOAD_SPECIAL` instruction.
+  Generate code for :keyword:`with` and :keyword:`async with` statements
+  using the new instruction.
+  Removed the :opcode:`!BEFORE_WITH` and :opcode:`!BEFORE_ASYNC_WITH` instructions.
+  (Contributed by Mark Shannon in :gh:`120507`.)
+
+* Add the :opcode:`POP_ITER` opcode to support 'virtual' iterators.
+  (Contributed by Mark Shannon in :gh:`132554`.)
+
+Pseudo-instructions
+-------------------
+
+* Add the :opcode:`!ANNOTATIONS_PLACEHOLDER` pseudo instruction
+  to support partially executed module-level annotations with
+  :ref:`deferred evaluation of annotations <whatsnew314-pep649>`.
+  (Contributed by Jelle Zijlstra in :gh:`130907`.)
+
+* Add the :opcode:`!BINARY_OP_EXTEND` pseudo instruction,
+  which executes a pair of functions (guard and specialization functions)
+  accessed from the inline cache.
+  (Contributed by Irit Katriel in :gh:`100239`.)
+
+* Add three specializations for :opcode:`CALL_KW`;
+  :opcode:`!CALL_KW_PY` for calls to Python functions,
+  :opcode:`!CALL_KW_BOUND_METHOD` for calls to bound methods, and
+  :opcode:`!CALL_KW_NON_PY` for all other calls.
+  (Contributed by Mark Shannon in :gh:`118093`.)
+
+* Add the :opcode:`JUMP_IF_TRUE` and :opcode:`JUMP_IF_FALSE` pseudo instructions,
+  conditional jumps which do not impact the stack.
+  Replaced by the sequence ``COPY 1``, ``TO_BOOL``, ``POP_JUMP_IF_TRUE/FALSE``.
+  (Contributed by Irit Katriel in :gh:`124285`.)
+
+* Add the :opcode:`!LOAD_CONST_MORTAL` pseudo instruction.
+  (Contributed by Mark Shannon in :gh:`128685`.)
+
+* Add the :opcode:`LOAD_CONST_IMMORTAL` pseudo instruction,
+  which does the same as :opcode:`!LOAD_CONST`, but is more efficient
+  for immortal objects.
+  (Contributed by Mark Shannon in :gh:`125837`.)
+
+* Add the :opcode:`NOT_TAKEN` pseudo instruction, used by :mod:`sys.monitoring`
+  to record branch events (such as :monitoring-event:`BRANCH_LEFT`).
+  (Contributed by Mark Shannon in :gh:`122548`.)
+
 
 C API changes
 =============
index 6e6934befccb3bde7ccac6e57a66cef3c8e3b984..9ac3bf53833f93e4e39cf8ca9a092887fe32c0e2 100644 (file)
@@ -2483,7 +2483,7 @@ avoiding possible problems use new functions :c:func:`PySlice_Unpack` and
 CPython bytecode changes
 ------------------------
 
-There are two new opcodes: :opcode:`LOAD_METHOD` and :opcode:`!CALL_METHOD`.
+There are two new opcodes: :opcode:`!LOAD_METHOD` and :opcode:`!CALL_METHOD`.
 (Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)
 
 The :opcode:`!STORE_ANNOTATION` opcode has been removed.