1****************************
2  What's New In Python 3.10
3****************************
4
5:Editor: Pablo Galindo Salgado
6
7.. Rules for maintenance:
8
9   * Anyone can add text to this document.  Do not spend very much time
10   on the wording of your changes, because your text will probably
11   get rewritten to some degree.
12
13   * The maintainer will go through Misc/NEWS periodically and add
14   changes; it's therefore more important to add your changes to
15   Misc/NEWS than to this file.
16
17   * This is not a complete list of every single change; completeness
18   is the purpose of Misc/NEWS.  Some changes I consider too small
19   or esoteric to include.  If such a change is added to the text,
20   I'll just remove it.  (This is another reason you shouldn't spend
21   too much time on writing your addition.)
22
23   * If you want to draw your new text to the attention of the
24   maintainer, add 'XXX' to the beginning of the paragraph or
25   section.
26
27   * It's OK to just add a fragmentary note about a change.  For
28   example: "XXX Describe the transmogrify() function added to the
29   socket module."  The maintainer will research the change and
30   write the necessary text.
31
32   * You can comment out your additions if you like, but it's not
33   necessary (especially when a final release is some months away).
34
35   * Credit the author of a patch or bugfix.   Just the name is
36   sufficient; the e-mail address isn't necessary.
37
38   * It's helpful to add the bug/patch number as a comment:
39
40   XXX Describe the transmogrify() function added to the socket
41   module.
42   (Contributed by P.Y. Developer in :issue:`12345`.)
43
44   This saves the maintainer the effort of going through the git log
45   when researching a change.
46
47This article explains the new features in Python 3.10, compared to 3.9.
48Python 3.10 was released on October 4, 2021.
49For full details, see the :ref:`changelog <changelog>`.
50
51Summary -- Release highlights
52=============================
53
54.. This section singles out the most important changes in Python 3.10.
55   Brevity is key.
56
57
58.. PEP-sized items next.
59
60New syntax features:
61
62* :pep:`634`, Structural Pattern Matching: Specification
63* :pep:`635`, Structural Pattern Matching: Motivation and Rationale
64* :pep:`636`, Structural Pattern Matching: Tutorial
65* :issue:`12782`, Parenthesized context managers are now officially allowed.
66
67New features in the standard library:
68
69* :pep:`618`, Add Optional Length-Checking To zip.
70
71Interpreter improvements:
72
73* :pep:`626`, Precise line numbers for debugging and other tools.
74
75New typing features:
76
77* :pep:`604`, Allow writing union types as X | Y
78* :pep:`612`, Parameter Specification Variables
79* :pep:`613`, Explicit Type Aliases
80* :pep:`647`, User-Defined Type Guards
81
82Important deprecations, removals or restrictions:
83
84* :pep:`644`, Require OpenSSL 1.1.1 or newer
85* :pep:`632`, Deprecate distutils module.
86* :pep:`623`, Deprecate and prepare for the removal of the wstr member in PyUnicodeObject.
87* :pep:`624`, Remove Py_UNICODE encoder APIs
88* :pep:`597`, Add optional EncodingWarning
89
90
91New Features
92============
93
94.. _whatsnew310-pep563:
95
96Parenthesized context managers
97------------------------------
98
99Using enclosing parentheses for continuation across multiple lines
100in context managers is now supported. This allows formatting a long
101collection of context managers in multiple lines in a similar way
102as it was previously possible with import statements. For instance,
103all these examples are now valid:
104
105.. code-block:: python
106
107    with (CtxManager() as example):
108        ...
109
110    with (
111        CtxManager1(),
112        CtxManager2()
113    ):
114        ...
115
116    with (CtxManager1() as example,
117          CtxManager2()):
118        ...
119
120    with (CtxManager1(),
121          CtxManager2() as example):
122        ...
123
124    with (
125        CtxManager1() as example1,
126        CtxManager2() as example2
127    ):
128        ...
129
130it is also possible to use a trailing comma at the end of the
131enclosed group:
132
133.. code-block:: python
134
135    with (
136        CtxManager1() as example1,
137        CtxManager2() as example2,
138        CtxManager3() as example3,
139    ):
140        ...
141
142This new syntax uses the non LL(1) capacities of the new parser.
143Check :pep:`617` for more details.
144
145(Contributed by Guido van Rossum, Pablo Galindo and Lysandros Nikolaou
146in :issue:`12782` and :issue:`40334`.)
147
148
149Better error messages
150---------------------
151
152SyntaxErrors
153~~~~~~~~~~~~
154
155When parsing code that contains unclosed parentheses or brackets the interpreter
156now includes the location of the unclosed bracket of parentheses instead of displaying
157*SyntaxError: unexpected EOF while parsing* or pointing to some incorrect location.
158For instance, consider the following code (notice the unclosed '{'):
159
160.. code-block:: python
161
162    expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
163                38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6,
164    some_other_code = foo()
165
166Previous versions of the interpreter reported confusing places as the location of
167the syntax error:
168
169.. code-block:: python
170
171   File "example.py", line 3
172       some_other_code = foo()
173                       ^
174   SyntaxError: invalid syntax
175
176but in Python 3.10 a more informative error is emitted:
177
178.. code-block:: python
179
180    File "example.py", line 1
181        expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
182                   ^
183    SyntaxError: '{' was never closed
184
185
186In a similar way, errors involving unclosed string literals (single and triple
187quoted) now point to the start of the string instead of reporting EOF/EOL.
188
189These improvements are inspired by previous work in the PyPy interpreter.
190
191(Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in
192:issue:`40176`.)
193
194:exc:`SyntaxError` exceptions raised by the interpreter will now highlight the
195full error range of the expression that constitutes the syntax error itself,
196instead of just where the problem is detected. In this way, instead of displaying
197(before Python 3.10):
198
199.. code-block:: python
200
201    >>> foo(x, z for z in range(10), t, w)
202      File "<stdin>", line 1
203        foo(x, z for z in range(10), t, w)
204               ^
205    SyntaxError: Generator expression must be parenthesized
206
207now Python 3.10 will display the exception as:
208
209.. code-block:: python
210
211    >>> foo(x, z for z in range(10), t, w)
212      File "<stdin>", line 1
213        foo(x, z for z in range(10), t, w)
214               ^^^^^^^^^^^^^^^^^^^^
215    SyntaxError: Generator expression must be parenthesized
216
217This improvement was contributed by Pablo Galindo in :issue:`43914`.
218
219A considerable amount of new specialized messages for :exc:`SyntaxError` exceptions
220have been incorporated. Some of the most notable ones are as follows:
221
222* Missing ``:`` before blocks:
223
224    .. code-block:: python
225
226        >>> if rocket.position > event_horizon
227          File "<stdin>", line 1
228            if rocket.position > event_horizon
229                                              ^
230        SyntaxError: expected ':'
231
232    (Contributed by Pablo Galindo in :issue:`42997`.)
233
234* Unparenthesised tuples in comprehensions targets:
235
236    .. code-block:: python
237
238        >>> {x,y for x,y in zip('abcd', '1234')}
239          File "<stdin>", line 1
240            {x,y for x,y in zip('abcd', '1234')}
241             ^
242        SyntaxError: did you forget parentheses around the comprehension target?
243
244    (Contributed by Pablo Galindo in :issue:`43017`.)
245
246* Missing commas in collection literals and between expressions:
247
248    .. code-block:: python
249
250        >>> items = {
251        ... x: 1,
252        ... y: 2
253        ... z: 3,
254          File "<stdin>", line 3
255            y: 2
256               ^
257        SyntaxError: invalid syntax. Perhaps you forgot a comma?
258
259    (Contributed by Pablo Galindo in :issue:`43822`.)
260
261* Multiple Exception types without parentheses:
262
263    .. code-block:: python
264
265        >>> try:
266        ...     build_dyson_sphere()
267        ... except NotEnoughScienceError, NotEnoughResourcesError:
268          File "<stdin>", line 3
269            except NotEnoughScienceError, NotEnoughResourcesError:
270                   ^
271        SyntaxError: multiple exception types must be parenthesized
272
273    (Contributed by Pablo Galindo in :issue:`43149`.)
274
275* Missing ``:`` and values in dictionary literals:
276
277    .. code-block:: python
278
279        >>> values = {
280        ... x: 1,
281        ... y: 2,
282        ... z:
283        ... }
284          File "<stdin>", line 4
285            z:
286             ^
287        SyntaxError: expression expected after dictionary key and ':'
288
289        >>> values = {x:1, y:2, z w:3}
290          File "<stdin>", line 1
291            values = {x:1, y:2, z w:3}
292                                ^
293        SyntaxError: ':' expected after dictionary key
294
295    (Contributed by Pablo Galindo in :issue:`43823`.)
296
297* ``try`` blocks without ``except`` or ``finally`` blocks:
298
299    .. code-block:: python
300
301        >>> try:
302        ...     x = 2
303        ... something = 3
304          File "<stdin>", line 3
305            something  = 3
306            ^^^^^^^^^
307        SyntaxError: expected 'except' or 'finally' block
308
309    (Contributed by Pablo Galindo in :issue:`44305`.)
310
311* Usage of ``=`` instead of ``==`` in comparisons:
312
313    .. code-block:: python
314
315        >>> if rocket.position = event_horizon:
316          File "<stdin>", line 1
317            if rocket.position = event_horizon:
318                               ^
319        SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='?
320
321    (Contributed by Pablo Galindo in :issue:`43797`.)
322
323* Usage of ``*`` in f-strings:
324
325    .. code-block:: python
326
327        >>> f"Black holes {*all_black_holes} and revelations"
328          File "<stdin>", line 1
329            (*all_black_holes)
330             ^
331        SyntaxError: f-string: cannot use starred expression here
332
333    (Contributed by Pablo Galindo in :issue:`41064`.)
334
335IndentationErrors
336~~~~~~~~~~~~~~~~~
337
338Many :exc:`IndentationError` exceptions now have more context regarding what kind of block
339was expecting an indentation, including the location of the statement:
340
341.. code-block:: python
342
343    >>> def foo():
344    ...    if lel:
345    ...    x = 2
346      File "<stdin>", line 3
347        x = 2
348        ^
349    IndentationError: expected an indented block after 'if' statement in line 2
350
351
352AttributeErrors
353~~~~~~~~~~~~~~~
354
355When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer
356suggestions of similar attribute names in the object that the exception was
357raised from:
358
359.. code-block:: python
360
361    >>> collections.namedtoplo
362    Traceback (most recent call last):
363      File "<stdin>", line 1, in <module>
364    AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?
365
366(Contributed by Pablo Galindo in :issue:`38530`.)
367
368   .. warning::
369      Notice this won't work if :c:func:`PyErr_Display` is not called to display the error
370      which can happen if some other custom error display function is used. This is a common
371      scenario in some REPLs like IPython.
372
373NameErrors
374~~~~~~~~~~
375
376When printing :exc:`NameError` raised by the interpreter, :c:func:`PyErr_Display`
377will offer suggestions of similar variable names in the function that the exception
378was raised from:
379
380.. code-block:: python
381
382    >>> schwarzschild_black_hole = None
383    >>> schwarschild_black_hole
384    Traceback (most recent call last):
385      File "<stdin>", line 1, in <module>
386    NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole?
387
388(Contributed by Pablo Galindo in :issue:`38530`.)
389
390   .. warning::
391      Notice this won't work if :c:func:`PyErr_Display` is not called to display the error,
392      which can happen if some other custom error display function is used. This is a common
393      scenario in some REPLs like IPython.
394
395
396PEP 626: Precise line numbers for debugging and other tools
397-----------------------------------------------------------
398
399PEP 626 brings more precise and reliable line numbers for debugging, profiling and coverage tools.
400Tracing events, with the correct line number, are generated for all lines of code executed and only for lines of code that are executed.
401
402The ``f_lineno`` attribute of frame objects will always contain the expected line number.
403
404The ``co_lnotab`` attribute of code objects is deprecated and will be removed in 3.12.
405Code that needs to convert from offset to line number should use the new ``co_lines()`` method instead.
406
407PEP 634: Structural Pattern Matching
408------------------------------------
409
410Structural pattern matching has been added in the form of a *match statement*
411and *case statements* of patterns with associated actions. Patterns
412consist of sequences, mappings, primitive data types as well as class instances.
413Pattern matching enables programs to extract information from complex data types,
414branch on the structure of data, and apply specific actions based on different
415forms of data.
416
417Syntax and operations
418~~~~~~~~~~~~~~~~~~~~~
419
420The generic syntax of pattern matching is::
421
422      match subject:
423          case <pattern_1>:
424              <action_1>
425          case <pattern_2>:
426              <action_2>
427          case <pattern_3>:
428              <action_3>
429          case _:
430              <action_wildcard>
431
432A match statement takes an expression and compares its value to successive
433patterns given as one or more case blocks.  Specifically, pattern matching
434operates by:
435
436    1. using data with type and shape (the ``subject``)
437    2. evaluating the ``subject`` in the ``match`` statement
438    3. comparing the subject with each pattern in a ``case`` statement
439       from top to bottom until a match is confirmed.
440    4. executing the action associated with the pattern of the confirmed
441       match
442    5. If an exact match is not confirmed, the last case, a wildcard ``_``,
443       if provided, will be used as the matching case. If an exact match is
444       not confirmed and a wildcard case does not exist, the entire match
445       block is a no-op.
446
447Declarative approach
448~~~~~~~~~~~~~~~~~~~~
449
450Readers may be aware of pattern matching through the simple example of matching
451a subject (data object) to a literal (pattern) with the switch statement found
452in C, Java or JavaScript (and many other languages). Often the switch statement
453is used for comparison of an object/expression with case statements containing
454literals.
455
456More powerful examples of pattern matching can be found in languages such as
457Scala and Elixir. With structural pattern matching, the approach is "declarative" and
458explicitly states the conditions (the patterns) for data to match.
459
460While an "imperative" series of instructions using nested "if" statements
461could be used to accomplish something similar to structural pattern matching,
462it is less clear than the "declarative" approach. Instead the "declarative"
463approach states the conditions to meet for a match and is more readable through
464its explicit patterns. While structural pattern matching can be used in its
465simplest form comparing a variable to a literal in a case statement, its
466true value for Python lies in its handling of the subject's type and shape.
467
468Simple pattern: match to a literal
469~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
470
471Let's look at this example as pattern matching in its simplest form: a value,
472the subject, being matched to several literals, the patterns. In the example
473below, ``status`` is the subject of the match statement. The patterns are
474each of the case statements, where literals represent request status codes.
475The associated action to the case is executed after a match::
476
477    def http_error(status):
478        match status:
479            case 400:
480                return "Bad request"
481            case 404:
482                return "Not found"
483            case 418:
484                return "I'm a teapot"
485            case _:
486                return "Something's wrong with the internet"
487
488If the above function is passed a ``status`` of 418, "I'm a teapot" is returned.
489If the above function is passed a ``status`` of 500, the case statement with
490``_`` will match as a wildcard, and "Something's wrong with the internet" is
491returned.
492Note the last block: the variable name, ``_``, acts as a *wildcard* and insures
493the subject will always match. The use of ``_`` is optional.
494
495You can combine several literals in a single pattern using ``|`` ("or")::
496
497            case 401 | 403 | 404:
498                return "Not allowed"
499
500Behavior without the wildcard
501^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
502
503If we modify the above example by removing the last case block, the example
504becomes::
505
506    def http_error(status):
507        match status:
508            case 400:
509                return "Bad request"
510            case 404:
511                return "Not found"
512            case 418:
513                return "I'm a teapot"
514
515Without the use of ``_`` in a case statement, a match may not exist. If no
516match exists, the behavior is a no-op. For example, if ``status`` of 500 is
517passed, a no-op occurs.
518
519Patterns with a literal and variable
520~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
521
522Patterns can look like unpacking assignments, and a pattern may be used to bind
523variables. In this example, a data point can be unpacked to its x-coordinate
524and y-coordinate::
525
526    # point is an (x, y) tuple
527    match point:
528        case (0, 0):
529            print("Origin")
530        case (0, y):
531            print(f"Y={y}")
532        case (x, 0):
533            print(f"X={x}")
534        case (x, y):
535            print(f"X={x}, Y={y}")
536        case _:
537            raise ValueError("Not a point")
538
539The first pattern has two literals, ``(0, 0)``, and may be thought of as an
540extension of the literal pattern shown above. The next two patterns combine a
541literal and a variable, and the variable *binds* a value from the subject
542(``point``).  The fourth pattern captures two values, which makes it
543conceptually similar to the unpacking assignment ``(x, y) = point``.
544
545Patterns and classes
546~~~~~~~~~~~~~~~~~~~~
547
548If you are using classes to structure your data, you can use as a pattern
549the class name followed by an argument list resembling a constructor. This
550pattern has the ability to capture class attributes into variables::
551
552    class Point:
553        x: int
554        y: int
555
556    def location(point):
557        match point:
558            case Point(x=0, y=0):
559                print("Origin is the point's location.")
560            case Point(x=0, y=y):
561                print(f"Y={y} and the point is on the y-axis.")
562            case Point(x=x, y=0):
563                print(f"X={x} and the point is on the x-axis.")
564            case Point():
565                print("The point is located somewhere else on the plane.")
566            case _:
567                print("Not a point")
568
569Patterns with positional parameters
570^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
571
572You can use positional parameters with some builtin classes that provide an
573ordering for their attributes (e.g. dataclasses). You can also define a specific
574position for attributes in patterns by setting the ``__match_args__`` special
575attribute in your classes. If it's set to ("x", "y"), the following patterns
576are all equivalent (and all bind the ``y`` attribute to the ``var`` variable)::
577
578    Point(1, var)
579    Point(1, y=var)
580    Point(x=1, y=var)
581    Point(y=var, x=1)
582
583Nested patterns
584~~~~~~~~~~~~~~~
585
586Patterns can be arbitrarily nested.  For example, if our data is a short
587list of points, it could be matched like this::
588
589    match points:
590        case []:
591            print("No points in the list.")
592        case [Point(0, 0)]:
593            print("The origin is the only point in the list.")
594        case [Point(x, y)]:
595            print(f"A single point {x}, {y} is in the list.")
596        case [Point(0, y1), Point(0, y2)]:
597            print(f"Two points on the Y axis at {y1}, {y2} are in the list.")
598        case _:
599            print("Something else is found in the list.")
600
601Complex patterns and the wildcard
602~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
603
604To this point, the examples have used ``_`` alone in the last case statement.
605A wildcard can be used in more complex patterns, such as ``('error', code, _)``.
606For example::
607
608   match test_variable:
609       case ('warning', code, 40):
610           print("A warning has been received.")
611       case ('error', code, _):
612           print(f"An error {code} occurred.")
613
614In the above case, ``test_variable`` will match for ('error', code, 100) and
615('error', code, 800).
616
617Guard
618~~~~~
619
620We can add an ``if`` clause to a pattern, known as a "guard".  If the
621guard is false, ``match`` goes on to try the next case block.  Note
622that value capture happens before the guard is evaluated::
623
624    match point:
625        case Point(x, y) if x == y:
626            print(f"The point is located on the diagonal Y=X at {x}.")
627        case Point(x, y):
628            print(f"Point is not on the diagonal.")
629
630Other Key Features
631~~~~~~~~~~~~~~~~~~
632
633Several other key features:
634
635- Like unpacking assignments, tuple and list patterns have exactly the
636  same meaning and actually match arbitrary sequences. Technically,
637  the subject must be a sequence.
638  Therefore, an important exception is that patterns don't match iterators.
639  Also, to prevent a common mistake, sequence patterns don't match strings.
640
641- Sequence patterns support wildcards: ``[x, y, *rest]`` and ``(x, y,
642  *rest)`` work similar to wildcards in unpacking assignments.  The
643  name after ``*`` may also be ``_``, so ``(x, y, *_)`` matches a sequence
644  of at least two items without binding the remaining items.
645
646- Mapping patterns: ``{"bandwidth": b, "latency": l}`` captures the
647  ``"bandwidth"`` and ``"latency"`` values from a dict.  Unlike sequence
648  patterns, extra keys are ignored.  A wildcard ``**rest`` is also
649  supported.  (But ``**_`` would be redundant, so is not allowed.)
650
651- Subpatterns may be captured using the ``as`` keyword::
652
653      case (Point(x1, y1), Point(x2, y2) as p2): ...
654
655  This binds x1, y1, x2, y2 like you would expect without the ``as`` clause,
656  and p2 to the entire second item of the subject.
657
658- Most literals are compared by equality. However, the singletons ``True``,
659  ``False`` and ``None`` are compared by identity.
660
661- Named constants may be used in patterns.  These named constants must be
662  dotted names to prevent the constant from being interpreted as a capture
663  variable::
664
665      from enum import Enum
666      class Color(Enum):
667          RED = 0
668          GREEN = 1
669          BLUE = 2
670
671      match color:
672          case Color.RED:
673              print("I see red!")
674          case Color.GREEN:
675              print("Grass is green")
676          case Color.BLUE:
677              print("I'm feeling the blues :(")
678
679For the full specification see :pep:`634`.  Motivation and rationale
680are in :pep:`635`, and a longer tutorial is in :pep:`636`.
681
682
683.. _whatsnew310-pep597:
684
685Optional ``EncodingWarning`` and ``encoding="locale"`` option
686-------------------------------------------------------------
687
688The default encoding of :class:`TextIOWrapper` and :func:`open` is
689platform and locale dependent. Since UTF-8 is used on most Unix
690platforms, omitting ``encoding`` option when opening UTF-8 files
691(e.g. JSON, YAML, TOML, Markdown) is a very common bug. For example::
692
693   # BUG: "rb" mode or encoding="utf-8" should be used.
694   with open("data.json") as f:
695       data = json.load(f)
696
697To find this type of bug, an optional ``EncodingWarning`` is added.
698It is emitted when :data:`sys.flags.warn_default_encoding <sys.flags>`
699is true and locale-specific default encoding is used.
700
701``-X warn_default_encoding`` option and :envvar:`PYTHONWARNDEFAULTENCODING`
702are added to enable the warning.
703
704See :ref:`io-text-encoding` for more information.
705
706.. _new-feat-related-type-hints:
707
708New Features Related to Type Hints
709==================================
710
711This section covers major changes affecting :pep:`484` type hints and
712the :mod:`typing` module.
713
714
715PEP 604: New Type Union Operator
716--------------------------------
717
718A new type union operator was introduced which enables the syntax ``X | Y``.
719This provides a cleaner way of expressing 'either type X or type Y' instead of
720using :data:`typing.Union`, especially in type hints.
721
722In previous versions of Python, to apply a type hint for functions accepting
723arguments of multiple types, :data:`typing.Union` was used::
724
725   def square(number: Union[int, float]) -> Union[int, float]:
726       return number ** 2
727
728
729Type hints can now be written in a more succinct manner::
730
731   def square(number: int | float) -> int | float:
732       return number ** 2
733
734
735This new syntax is also accepted as the second argument to :func:`isinstance`
736and :func:`issubclass`::
737
738   >>> isinstance(1, int | str)
739   True
740
741See :ref:`types-union` and :pep:`604` for more details.
742
743(Contributed by Maggie Moss and Philippe Prados in :issue:`41428`,
744with additions by Yurii Karabas and Serhiy Storchaka in :issue:`44490`.)
745
746
747PEP 612: Parameter Specification Variables
748------------------------------------------
749
750Two new options to improve the information provided to static type checkers for
751:pep:`484`\ 's ``Callable`` have been added to the :mod:`typing` module.
752
753The first is the parameter specification variable.  They are used to forward the
754parameter types of one callable to another callable -- a pattern commonly
755found in higher order functions and decorators.  Examples of usage can be found
756in :class:`typing.ParamSpec`. Previously, there was no easy way to type annotate
757dependency of parameter types in such a precise manner.
758
759The second option is the new ``Concatenate`` operator. It's used in conjunction
760with parameter specification variables to type annotate a higher order callable
761which adds or removes parameters of another callable.  Examples of usage can
762be found in :class:`typing.Concatenate`.
763
764See :class:`typing.Callable`, :class:`typing.ParamSpec`,
765:class:`typing.Concatenate`, :class:`typing.ParamSpecArgs`,
766:class:`typing.ParamSpecKwargs`, and :pep:`612` for more details.
767
768(Contributed by Ken Jin in :issue:`41559`, with minor enhancements by Jelle
769Zijlstra in :issue:`43783`.  PEP written by Mark Mendoza.)
770
771
772PEP 613: TypeAlias
773------------------
774
775:pep:`484` introduced the concept of type aliases, only requiring them to be
776top-level unannotated assignments. This simplicity sometimes made it difficult
777for type checkers to distinguish between type aliases and ordinary assignments,
778especially when forward references or invalid types were involved. Compare::
779
780   StrCache = 'Cache[str]'  # a type alias
781   LOG_PREFIX = 'LOG[DEBUG]'  # a module constant
782
783Now the :mod:`typing` module has a special value :data:`TypeAlias`
784which lets you declare type aliases more explicitly::
785
786   StrCache: TypeAlias = 'Cache[str]'  # a type alias
787   LOG_PREFIX = 'LOG[DEBUG]'  # a module constant
788
789See :pep:`613` for more details.
790
791(Contributed by Mikhail Golubev in :issue:`41923`.)
792
793PEP 647: User-Defined Type Guards
794---------------------------------
795
796:data:`TypeGuard` has been added to the :mod:`typing` module to annotate
797type guard functions and improve information provided to static type checkers
798during type narrowing.  For more information, please see :data:`TypeGuard`\ 's
799documentation, and :pep:`647`.
800
801(Contributed by Ken Jin and Guido van Rossum in :issue:`43766`.
802PEP written by Eric Traut.)
803
804Other Language Changes
805======================
806
807* The :class:`int` type has a new method :meth:`int.bit_count`, returning the
808  number of ones in the binary expansion of a given integer, also known
809  as the population count. (Contributed by Niklas Fiekas in :issue:`29882`.)
810
811* The views returned by :meth:`dict.keys`, :meth:`dict.values` and
812  :meth:`dict.items` now all have a ``mapping`` attribute that gives a
813  :class:`types.MappingProxyType` object wrapping the original
814  dictionary. (Contributed by Dennis Sweeney in :issue:`40890`.)
815
816* :pep:`618`: The :func:`zip` function now has an optional ``strict`` flag, used
817  to require that all the iterables have an equal length.
818
819* Builtin and extension functions that take integer arguments no longer accept
820  :class:`~decimal.Decimal`\ s, :class:`~fractions.Fraction`\ s and other
821  objects that can be converted to integers only with a loss (e.g. that have
822  the :meth:`~object.__int__` method but do not have the
823  :meth:`~object.__index__` method).
824  (Contributed by Serhiy Storchaka in :issue:`37999`.)
825
826* If :func:`object.__ipow__` returns :const:`NotImplemented`, the operator will
827  correctly fall back to :func:`object.__pow__` and :func:`object.__rpow__` as expected.
828  (Contributed by Alex Shkop in :issue:`38302`.)
829
830* Assignment expressions can now be used unparenthesized within set literals
831  and set comprehensions, as well as in sequence indexes (but not slices).
832
833* Functions have a new ``__builtins__`` attribute which is used to look for
834  builtin symbols when a function is executed, instead of looking into
835  ``__globals__['__builtins__']``. The attribute is initialized from
836  ``__globals__["__builtins__"]`` if it exists, else from the current builtins.
837  (Contributed by Mark Shannon in :issue:`42990`.)
838
839* Two new builtin functions -- :func:`aiter` and :func:`anext` have been added
840  to provide asynchronous counterparts to :func:`iter` and :func:`next`,
841  respectively.
842  (Contributed by Joshua Bronson, Daniel Pope, and Justin Wang in :issue:`31861`.)
843
844* Static methods (:func:`@staticmethod <staticmethod>`) and class methods
845  (:func:`@classmethod <classmethod>`) now inherit the method attributes
846  (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``,
847  ``__annotations__``) and have a new ``__wrapped__`` attribute.
848  Moreover, static methods are now callable as regular functions.
849  (Contributed by Victor Stinner in :issue:`43682`.)
850
851* Annotations for complex targets (everything beside ``simple name`` targets
852  defined by :pep:`526`) no longer cause any runtime effects with ``from __future__ import annotations``.
853  (Contributed by Batuhan Taskaya in :issue:`42737`.)
854
855* Class and module objects now lazy-create empty annotations dicts on demand.
856  The annotations dicts are stored in the object’s ``__dict__`` for
857  backwards compatibility.  This improves the best practices for working
858  with ``__annotations__``; for more information, please see
859  :ref:`annotations-howto`.
860  (Contributed by Larry Hastings in :issue:`43901`.)
861
862* Annotations consist of ``yield``, ``yield from``, ``await`` or named expressions
863  are now forbidden under ``from __future__ import annotations`` due to their side
864  effects.
865  (Contributed by Batuhan Taskaya in :issue:`42725`.)
866
867* Usage of unbound variables, ``super()`` and other expressions that might
868  alter the processing of symbol table as annotations are now rendered
869  effectless under ``from __future__ import annotations``.
870  (Contributed by Batuhan Taskaya in :issue:`42725`.)
871
872* Hashes of NaN values of both :class:`float` type and
873  :class:`decimal.Decimal` type now depend on object identity. Formerly, they
874  always hashed to ``0`` even though NaN values are not equal to one another.
875  This caused potentially quadratic runtime behavior due to excessive hash
876  collisions when creating dictionaries and sets containing multiple NaNs.
877  (Contributed by Raymond Hettinger in :issue:`43475`.)
878
879* A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting
880  the :const:`__debug__` constant.  (Contributed by Dong-hee Na in :issue:`45000`.)
881
882* :exc:`SyntaxError` exceptions now have ``end_lineno`` and
883  ``end_offset`` attributes.  They will be ``None`` if not determined.
884  (Contributed by Pablo Galindo in :issue:`43914`.)
885
886New Modules
887===========
888
889* None yet.
890
891
892Improved Modules
893================
894
895asyncio
896-------
897
898Add missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket`
899method.
900(Contributed by Alex Grönholm in :issue:`41332`.)
901
902argparse
903--------
904
905Misleading phrase "optional arguments" was replaced with "options" in argparse help. Some tests might require adaptation if they rely on exact output match.
906(Contributed by Raymond Hettinger in :issue:`9694`.)
907
908array
909-----
910
911The :meth:`~array.array.index` method of :class:`array.array` now has
912optional *start* and *stop* parameters.
913(Contributed by Anders Lorentsen and Zackery Spytz in :issue:`31956`.)
914
915asynchat, asyncore, smtpd
916-------------------------
917These modules have been marked as deprecated in their module documentation
918since Python 3.6.  An import-time :class:`DeprecationWarning` has now been
919added to all three of these modules.
920
921base64
922------
923
924Add :func:`base64.b32hexencode` and :func:`base64.b32hexdecode` to support the
925Base32 Encoding with Extended Hex Alphabet.
926
927bdb
928---
929
930Add :meth:`~bdb.Breakpoint.clearBreakpoints` to reset all set breakpoints.
931(Contributed by Irit Katriel in :issue:`24160`.)
932
933bisect
934------
935
936Added the possibility of providing a *key* function to the APIs in the :mod:`bisect`
937module. (Contributed by Raymond Hettinger in :issue:`4356`.)
938
939codecs
940------
941
942Add a :func:`codecs.unregister` function to unregister a codec search function.
943(Contributed by Hai Shi in :issue:`41842`.)
944
945collections.abc
946---------------
947
948The ``__args__`` of the :ref:`parameterized generic <types-genericalias>` for
949:class:`collections.abc.Callable` are now consistent with :data:`typing.Callable`.
950:class:`collections.abc.Callable` generic now flattens type parameters, similar
951to what :data:`typing.Callable` currently does.  This means that
952``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of
953``(int, str, str)``; previously this was ``([int, str], str)``.  To allow this
954change, :class:`types.GenericAlias` can now be subclassed, and a subclass will
955be returned when subscripting the :class:`collections.abc.Callable` type.  Note
956that a :exc:`TypeError` may be raised for invalid forms of parameterizing
957:class:`collections.abc.Callable` which may have passed silently in Python 3.9.
958(Contributed by Ken Jin in :issue:`42195`.)
959
960contextlib
961----------
962
963Add a :func:`contextlib.aclosing` context manager to safely close async generators
964and objects representing asynchronously released resources.
965(Contributed by Joongi Kim and John Belmonte in :issue:`41229`.)
966
967Add asynchronous context manager support to :func:`contextlib.nullcontext`.
968(Contributed by Tom Gringauz in :issue:`41543`.)
969
970Add :class:`AsyncContextDecorator`, for supporting usage of async context managers
971as decorators.
972
973curses
974------
975
976The extended color functions added in ncurses 6.1 will be used transparently
977by :func:`curses.color_content`, :func:`curses.init_color`,
978:func:`curses.init_pair`, and :func:`curses.pair_content`. A new function,
979:func:`curses.has_extended_color_support`, indicates whether extended color
980support is provided by the underlying ncurses library.
981(Contributed by Jeffrey Kintscher and Hans Petter Jansson in :issue:`36982`.)
982
983The ``BUTTON5_*`` constants are now exposed in the :mod:`curses` module if
984they are provided by the underlying curses library.
985(Contributed by Zackery Spytz in :issue:`39273`.)
986
987dataclasses
988-----------
989
990__slots__
991~~~~~~~~~
992
993Added ``slots`` parameter in :func:`dataclasses.dataclass` decorator.
994(Contributed by Yurii Karabas in :issue:`42269`)
995
996Keyword-only fields
997~~~~~~~~~~~~~~~~~~~
998
999dataclasses now supports fields that are keyword-only in the
1000generated __init__ method.  There are a number of ways of specifying
1001keyword-only fields.
1002
1003You can say that every field is keyword-only:
1004
1005.. code-block:: python
1006
1007    from dataclasses import dataclass
1008
1009    @dataclass(kw_only=True)
1010    class Birthday:
1011        name: str
1012        birthday: datetime.date
1013
1014Both ``name`` and ``birthday`` are keyword-only parameters to the
1015generated __init__ method.
1016
1017You can specify keyword-only on a per-field basis:
1018
1019.. code-block:: python
1020
1021    from dataclasses import dataclass, field
1022
1023    @dataclass
1024    class Birthday:
1025        name: str
1026        birthday: datetime.date = field(kw_only=True)
1027
1028Here only ``birthday`` is keyword-only.  If you set ``kw_only`` on
1029individual fields, be aware that there are rules about re-ordering
1030fields due to keyword-only fields needing to follow non-keyword-only
1031fields.  See the full dataclasses documentation for details.
1032
1033You can also specify that all fields following a KW_ONLY marker are
1034keyword-only.  This will probably be the most common usage:
1035
1036.. code-block:: python
1037
1038    from dataclasses import dataclass, KW_ONLY
1039
1040    @dataclass
1041    class Point:
1042        x: float
1043        y: float
1044        _: KW_ONLY
1045        z: float = 0.0
1046        t: float = 0.0
1047
1048Here, ``z`` and ``t`` are keyword-only parameters, while ``x`` and
1049``y`` are not.
1050(Contributed by Eric V. Smith in :issue:`43532`.)
1051
1052.. _distutils-deprecated:
1053
1054distutils
1055---------
1056
1057The entire ``distutils`` package is deprecated, to be removed in Python
10583.12. Its functionality for specifying package builds has already been
1059completely replaced by third-party packages ``setuptools`` and
1060``packaging``, and most other commonly used APIs are available elsewhere
1061in the standard library (such as :mod:`platform`, :mod:`shutil`,
1062:mod:`subprocess` or :mod:`sysconfig`). There are no plans to migrate
1063any other functionality from ``distutils``, and applications that are
1064using other functions should plan to make private copies of the code.
1065Refer to :pep:`632` for discussion.
1066
1067The ``bdist_wininst`` command deprecated in Python 3.8 has been removed.
1068The ``bdist_wheel`` command is now recommended to distribute binary packages
1069on Windows.
1070(Contributed by Victor Stinner in :issue:`42802`.)
1071
1072doctest
1073-------
1074
1075When a module does not define ``__loader__``, fall back to ``__spec__.loader``.
1076(Contributed by Brett Cannon in :issue:`42133`.)
1077
1078encodings
1079---------
1080
1081:func:`encodings.normalize_encoding` now ignores non-ASCII characters.
1082(Contributed by Hai Shi in :issue:`39337`.)
1083
1084enum
1085----
1086
1087:class:`Enum` :func:`__repr__` now returns ``enum_name.member_name`` and
1088:func:`__str__` now returns ``member_name``.  Stdlib enums available as
1089module constants have a :func:`repr` of ``module_name.member_name``.
1090(Contributed by Ethan Furman in :issue:`40066`.)
1091
1092Add :class:`enum.StrEnum` for enums where all members are strings.
1093(Contributed by Ethan Furman in :issue:`41816`.)
1094
1095fileinput
1096---------
1097
1098Add *encoding* and *errors* parameters in :func:`fileinput.input` and
1099:class:`fileinput.FileInput`.
1100(Contributed by Inada Naoki in :issue:`43712`.)
1101
1102:func:`fileinput.hook_compressed` now returns :class:`TextIOWrapper` object
1103when *mode* is "r" and file is compressed, like uncompressed files.
1104(Contributed by Inada Naoki in :issue:`5758`.)
1105
1106faulthandler
1107------------
1108
1109The :mod:`faulthandler` module now detects if a fatal error occurs during a
1110garbage collector collection.
1111(Contributed by Victor Stinner in :issue:`44466`.)
1112
1113gc
1114--
1115
1116Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and
1117:func:`gc.get_referents`. (Contributed by Pablo Galindo in :issue:`43439`.)
1118
1119glob
1120----
1121
1122Add the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and
1123:func:`~glob.iglob` which allow to specify the root directory for searching.
1124(Contributed by Serhiy Storchaka in :issue:`38144`.)
1125
1126hashlib
1127-------
1128
1129The hashlib module requires OpenSSL 1.1.1 or newer.
1130(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.)
1131
1132The hashlib module has preliminary support for OpenSSL 3.0.0.
1133(Contributed by Christian Heimes in :issue:`38820` and other issues.)
1134
1135The pure-Python fallback of :func:`~hashlib.pbkdf2_hmac` is deprecated. In
1136the future PBKDF2-HMAC will only be available when Python has been built with
1137OpenSSL support.
1138(Contributed by Christian Heimes in :issue:`43880`.)
1139
1140hmac
1141----
1142
1143The hmac module now uses OpenSSL's HMAC implementation internally.
1144(Contributed by Christian Heimes in :issue:`40645`.)
1145
1146IDLE and idlelib
1147----------------
1148
1149Make IDLE invoke :func:`sys.excepthook` (when started without '-n').
1150User hooks were previously ignored.  (Contributed by Ken Hilton in
1151:issue:`43008`.)
1152
1153Rearrange the settings dialog.  Split the General tab into Windows
1154and Shell/Ed tabs.  Move help sources, which extend the Help menu, to the
1155Extensions tab.  Make space for new options and shorten the dialog. The
1156latter makes the dialog better fit small screens.  (Contributed by Terry Jan
1157Reedy in :issue:`40468`.)  Move the indent space setting from the Font tab to
1158the new Windows tab.  (Contributed by Mark Roseman and Terry Jan Reedy in
1159:issue:`33962`.)
1160
1161The changes above were backported to a 3.9 maintenance release.
1162
1163Add a Shell sidebar.  Move the primary prompt ('>>>') to the sidebar.
1164Add secondary prompts ('...') to the sidebar.  Left click and optional
1165drag selects one or more lines of text, as with the editor
1166line number sidebar.  Right click after selecting text lines displays
1167a context menu with 'copy with prompts'.  This zips together prompts
1168from the sidebar with lines from the selected text.  This option also
1169appears on the context menu for the text.  (Contributed by Tal Einat
1170in :issue:`37903`.)
1171
1172Use spaces instead of tabs to indent interactive code.  This makes
1173interactive code entries 'look right'.  Making this feasible was a
1174major motivation for adding the shell sidebar.  (Contributed by
1175Terry Jan Reedy in :issue:`37892`.)
1176
1177Highlight the new :ref:`soft keywords <soft-keywords>` :keyword:`match`,
1178:keyword:`case <match>`, and :keyword:`_ <wildcard-patterns>` in
1179pattern-matching statements. However, this highlighting is not perfect
1180and will be incorrect in some rare cases, including some ``_``-s in
1181``case`` patterns.  (Contributed by Tal Einat in :issue:`44010`.)
1182
1183New in 3.10 maintenance releases.
1184
1185Apply syntax highlighting to ``.pyi`` files. (Contributed by Alex
1186Waygood and Terry Jan Reedy in :issue:`45447`.)
1187
1188Include prompts when saving Shell with inputs and outputs.
1189(Contributed by Terry Jan Reedy in :gh:`95191`.)
1190
1191importlib.metadata
1192------------------
1193
1194Feature parity with ``importlib_metadata`` 4.6
1195(`history <https://importlib-metadata.readthedocs.io/en/latest/history.html>`_).
1196
1197:ref:`importlib.metadata entry points <entry-points>`
1198now provide a nicer experience
1199for selecting entry points by group and name through a new
1200:class:`importlib.metadata.EntryPoints` class. See the Compatibility
1201Note in the docs for more info on the deprecation and usage.
1202
1203Added :func:`importlib.metadata.packages_distributions` for resolving
1204top-level Python modules and packages to their
1205:class:`importlib.metadata.Distribution`.
1206
1207inspect
1208-------
1209
1210When a module does not define ``__loader__``, fall back to ``__spec__.loader``.
1211(Contributed by Brett Cannon in :issue:`42133`.)
1212
1213Add :func:`inspect.get_annotations`, which safely computes the annotations
1214defined on an object. It works around the quirks of accessing the annotations
1215on various types of objects, and makes very few assumptions about the object
1216it examines. :func:`inspect.get_annotations` can also correctly un-stringize
1217stringized annotations.  :func:`inspect.get_annotations` is now considered
1218best practice for accessing the annotations dict defined on any Python object;
1219for more information on best practices for working with annotations, please see
1220:ref:`annotations-howto`.
1221Relatedly, :func:`inspect.signature`,
1222:func:`inspect.Signature.from_callable`, and :func:`inspect.Signature.from_function`
1223now call :func:`inspect.get_annotations` to retrieve annotations. This means
1224:func:`inspect.signature` and :func:`inspect.Signature.from_callable` can
1225also now un-stringize stringized annotations.
1226(Contributed by Larry Hastings in :issue:`43817`.)
1227
1228itertools
1229---------
1230
1231Add :func:`itertools.pairwise()`.
1232(Contributed by Raymond Hettinger in :issue:`38200`.)
1233
1234linecache
1235---------
1236
1237When a module does not define ``__loader__``, fall back to ``__spec__.loader``.
1238(Contributed by Brett Cannon in :issue:`42133`.)
1239
1240os
1241--
1242
1243Add :func:`os.cpu_count()` support for VxWorks RTOS.
1244(Contributed by Peixing Xin in :issue:`41440`.)
1245
1246Add a new function :func:`os.eventfd` and related helpers to wrap the
1247``eventfd2`` syscall on Linux.
1248(Contributed by Christian Heimes in :issue:`41001`.)
1249
1250Add :func:`os.splice()` that allows to move data between two file
1251descriptors without copying between kernel address space and user
1252address space, where one of the file descriptors must refer to a
1253pipe. (Contributed by Pablo Galindo in :issue:`41625`.)
1254
1255Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK`
1256and :data:`~os.O_NOFOLLOW_ANY` for macOS.
1257(Contributed by Dong-hee Na in :issue:`43106`.)
1258
1259os.path
1260-------
1261
1262:func:`os.path.realpath` now accepts a *strict* keyword-only argument. When set
1263to ``True``, :exc:`OSError` is raised if a path doesn't exist or a symlink loop
1264is encountered.
1265(Contributed by Barney Gale in :issue:`43757`.)
1266
1267pathlib
1268-------
1269
1270Add slice support to :attr:`PurePath.parents <pathlib.PurePath.parents>`.
1271(Contributed by Joshua Cannon in :issue:`35498`.)
1272
1273Add negative indexing support to :attr:`PurePath.parents
1274<pathlib.PurePath.parents>`.
1275(Contributed by Yaroslav Pankovych in :issue:`21041`.)
1276
1277Add :meth:`Path.hardlink_to <pathlib.Path.hardlink_to>` method that
1278supersedes :meth:`~pathlib.Path.link_to`. The new method has the same argument
1279order as :meth:`~pathlib.Path.symlink_to`.
1280(Contributed by Barney Gale in :issue:`39950`.)
1281
1282:meth:`pathlib.Path.stat` and :meth:`~pathlib.Path.chmod` now accept a
1283*follow_symlinks* keyword-only argument for consistency with corresponding
1284functions in the :mod:`os` module.
1285(Contributed by Barney Gale in :issue:`39906`.)
1286
1287platform
1288--------
1289
1290Add :func:`platform.freedesktop_os_release()` to retrieve operation system
1291identification from `freedesktop.org os-release
1292<https://www.freedesktop.org/software/systemd/man/os-release.html>`_ standard file.
1293(Contributed by Christian Heimes in :issue:`28468`.)
1294
1295pprint
1296------
1297
1298:func:`pprint.pprint` now accepts a new ``underscore_numbers`` keyword argument.
1299(Contributed by sblondon in :issue:`42914`.)
1300
1301:mod:`pprint` can now pretty-print :class:`dataclasses.dataclass` instances.
1302(Contributed by Lewis Gaul in :issue:`43080`.)
1303
1304py_compile
1305----------
1306
1307Add ``--quiet`` option to command-line interface of :mod:`py_compile`.
1308(Contributed by Gregory Schevchenko in :issue:`38731`.)
1309
1310pyclbr
1311------
1312
1313Add an ``end_lineno`` attribute to the ``Function`` and ``Class``
1314objects in the tree returned by :func:`pyclbr.readline` and
1315:func:`pyclbr.readline_ex`.  It matches the existing (start) ``lineno``.
1316(Contributed by Aviral Srivastava in :issue:`38307`.)
1317
1318shelve
1319------
1320
1321The :mod:`shelve` module now uses :data:`pickle.DEFAULT_PROTOCOL` by default
1322instead of :mod:`pickle` protocol ``3`` when creating shelves.
1323(Contributed by Zackery Spytz in :issue:`34204`.)
1324
1325statistics
1326----------
1327
1328Add :func:`~statistics.covariance`, Pearson's
1329:func:`~statistics.correlation`, and simple
1330:func:`~statistics.linear_regression` functions.
1331(Contributed by Tymoteusz Wołodźko in :issue:`38490`.)
1332
1333site
1334----
1335
1336When a module does not define ``__loader__``, fall back to ``__spec__.loader``.
1337(Contributed by Brett Cannon in :issue:`42133`.)
1338
1339socket
1340------
1341
1342The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`.
1343(Contributed by Christian Heimes in :issue:`42413`.)
1344
1345Add option to create MPTCP sockets with ``IPPROTO_MPTCP``
1346(Contributed by Rui Cunha in :issue:`43571`.)
1347
1348Add ``IP_RECVTOS`` option to receive the type of service (ToS) or DSCP/ECN fields
1349(Contributed by Georg Sauthoff in :issue:`44077`.)
1350
1351ssl
1352---
1353
1354The ssl module requires OpenSSL 1.1.1 or newer.
1355(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.)
1356
1357The ssl module has preliminary support for OpenSSL 3.0.0 and new option
1358:data:`~ssl.OP_IGNORE_UNEXPECTED_EOF`.
1359(Contributed by Christian Heimes in :issue:`38820`, :issue:`43794`,
1360:issue:`43788`, :issue:`43791`, :issue:`43799`, :issue:`43920`,
1361:issue:`43789`, and :issue:`43811`.)
1362
1363Deprecated function and use of deprecated constants now result in
1364a :exc:`DeprecationWarning`. :attr:`ssl.SSLContext.options` has
1365:data:`~ssl.OP_NO_SSLv2` and :data:`~ssl.OP_NO_SSLv3` set by default and
1366therefore cannot warn about setting the flag again. The
1367:ref:`deprecation section <whatsnew310-deprecated>` has a list of deprecated
1368features.
1369(Contributed by Christian Heimes in :issue:`43880`.)
1370
1371The ssl module now has more secure default settings. Ciphers without forward
1372secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits
1373weak RSA, DH, and ECC keys with less than 112 bits of security.
1374:class:`~ssl.SSLContext` defaults to minimum protocol version TLS 1.2.
1375Settings are based on Hynek Schlawack's research.
1376(Contributed by Christian Heimes in :issue:`43998`.)
1377
1378The deprecated protocols SSL 3.0, TLS 1.0, and TLS 1.1 are no longer
1379officially supported. Python does not block them actively. However
1380OpenSSL build options, distro configurations, vendor patches, and cipher
1381suites may prevent a successful handshake.
1382
1383Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function.
1384(Contributed by Zackery Spytz in :issue:`31870`.)
1385
1386The ssl module uses heap-types and multi-phase initialization.
1387(Contributed by Christian Heimes in :issue:`42333`.)
1388
1389A new verify flag :data:`~ssl.VERIFY_X509_PARTIAL_CHAIN` has been added.
1390(Contributed by l0x in :issue:`40849`.)
1391
1392sqlite3
1393-------
1394
1395Add audit events for :func:`~sqlite3.connect/handle`,
1396:meth:`~sqlite3.Connection.enable_load_extension`, and
1397:meth:`~sqlite3.Connection.load_extension`.
1398(Contributed by Erlend E. Aasland in :issue:`43762`.)
1399
1400sys
1401---
1402
1403Add :data:`sys.orig_argv` attribute: the list of the original command line
1404arguments passed to the Python executable.
1405(Contributed by Victor Stinner in :issue:`23427`.)
1406
1407Add :data:`sys.stdlib_module_names`, containing the list of the standard library
1408module names.
1409(Contributed by Victor Stinner in :issue:`42955`.)
1410
1411_thread
1412-------
1413
1414:func:`_thread.interrupt_main` now takes an optional signal number to
1415simulate (the default is still :data:`signal.SIGINT`).
1416(Contributed by Antoine Pitrou in :issue:`43356`.)
1417
1418threading
1419---------
1420
1421Add :func:`threading.gettrace` and :func:`threading.getprofile` to
1422retrieve the functions set by :func:`threading.settrace` and
1423:func:`threading.setprofile` respectively.
1424(Contributed by Mario Corchero in :issue:`42251`.)
1425
1426Add :data:`threading.__excepthook__` to allow retrieving the original value
1427of :func:`threading.excepthook` in case it is set to a broken or a different
1428value.
1429(Contributed by Mario Corchero in :issue:`42308`.)
1430
1431traceback
1432---------
1433
1434The :func:`~traceback.format_exception`,
1435:func:`~traceback.format_exception_only`, and
1436:func:`~traceback.print_exception` functions can now take an exception object
1437as a positional-only argument.
1438(Contributed by Zackery Spytz and Matthias Bussonnier in :issue:`26389`.)
1439
1440types
1441-----
1442
1443Reintroduce the :data:`types.EllipsisType`, :data:`types.NoneType`
1444and :data:`types.NotImplementedType` classes, providing a new set
1445of types readily interpretable by type checkers.
1446(Contributed by Bas van Beek in :issue:`41810`.)
1447
1448typing
1449------
1450
1451For major changes, see :ref:`new-feat-related-type-hints`.
1452
1453The behavior of :class:`typing.Literal` was changed to conform with :pep:`586`
1454and to match the behavior of static type checkers specified in the PEP.
1455
14561. ``Literal`` now de-duplicates parameters.
14572. Equality comparisons between ``Literal`` objects are now order independent.
14583. ``Literal`` comparisons now respect types.  For example,
1459   ``Literal[0] == Literal[False]`` previously evaluated to ``True``.  It is
1460   now ``False``.  To support this change, the internally used type cache now
1461   supports differentiating types.
14624. ``Literal`` objects will now raise a :exc:`TypeError` exception during
1463   equality comparisons if any of their parameters are not :term:`hashable`.
1464   Note that declaring ``Literal`` with unhashable parameters will not throw
1465   an error::
1466
1467      >>> from typing import Literal
1468      >>> Literal[{0}]
1469      >>> Literal[{0}] == Literal[{False}]
1470      Traceback (most recent call last):
1471        File "<stdin>", line 1, in <module>
1472      TypeError: unhashable type: 'set'
1473
1474(Contributed by Yurii Karabas in :issue:`42345`.)
1475
1476Add new function :func:`typing.is_typeddict` to introspect if an annotation
1477is a :class:`typing.TypedDict`.
1478(Contributed by Patrick Reader in :issue:`41792`.)
1479
1480Subclasses of ``typing.Protocol`` which only have data variables declared
1481will now raise a ``TypeError`` when checked with ``isinstance`` unless they
1482are decorated with :func:`runtime_checkable`.  Previously, these checks
1483passed silently.  Users should decorate their
1484subclasses with the :func:`runtime_checkable` decorator
1485if they want runtime protocols.
1486(Contributed by Yurii Karabas in :issue:`38908`.)
1487
1488Importing from the ``typing.io`` and ``typing.re`` submodules will now emit
1489:exc:`DeprecationWarning`.  These submodules have been deprecated since
1490Python 3.8 and will be removed in a future version of Python.  Anything
1491belonging to those submodules should be imported directly from
1492:mod:`typing` instead.
1493(Contributed by Sebastian Rittau in :issue:`38291`.)
1494
1495unittest
1496--------
1497
1498Add new method :meth:`~unittest.TestCase.assertNoLogs` to complement the
1499existing :meth:`~unittest.TestCase.assertLogs`. (Contributed by Kit Yan Choi
1500in :issue:`39385`.)
1501
1502urllib.parse
1503------------
1504
1505Python versions earlier than Python 3.10 allowed using both ``;`` and ``&`` as
1506query parameter separators in :func:`urllib.parse.parse_qs` and
1507:func:`urllib.parse.parse_qsl`.  Due to security concerns, and to conform with
1508newer W3C recommendations, this has been changed to allow only a single
1509separator key, with ``&`` as the default.  This change also affects
1510:func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected
1511functions internally.  For more details, please see their respective
1512documentation.
1513(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)
1514
1515xml
1516---
1517
1518Add a :class:`~xml.sax.handler.LexicalHandler` class to the
1519:mod:`xml.sax.handler` module.
1520(Contributed by Jonathan Gossage and Zackery Spytz in :issue:`35018`.)
1521
1522zipimport
1523---------
1524Add methods related to :pep:`451`: :meth:`~zipimport.zipimporter.find_spec`,
1525:meth:`zipimport.zipimporter.create_module`, and
1526:meth:`zipimport.zipimporter.exec_module`.
1527(Contributed by Brett Cannon in :issue:`42131`.)
1528
1529Add :meth:`~zipimport.zipimporter.invalidate_caches` method.
1530(Contributed by Desmond Cheong in :issue:`14678`.)
1531
1532
1533Optimizations
1534=============
1535
1536* Constructors :func:`str`, :func:`bytes` and :func:`bytearray` are now faster
1537  (around 30--40% for small objects).
1538  (Contributed by Serhiy Storchaka in :issue:`41334`.)
1539
1540* The :mod:`runpy` module now imports fewer modules.
1541  The ``python3 -m module-name`` command startup time is 1.4x faster in
1542  average. On Linux, ``python3 -I -m module-name`` imports 69 modules on Python
1543  3.9, whereas it only imports 51 modules (-18) on Python 3.10.
1544  (Contributed by Victor Stinner in :issue:`41006` and :issue:`41718`.)
1545
1546* The ``LOAD_ATTR`` instruction now uses new "per opcode cache" mechanism.  It
1547  is about 36% faster now for regular attributes and 44% faster for slots.
1548  (Contributed by Pablo Galindo and Yury Selivanov in :issue:`42093` and Guido
1549  van Rossum in :issue:`42927`, based on ideas implemented originally in PyPy
1550  and MicroPython.)
1551
1552* When building Python with :option:`--enable-optimizations` now
1553  ``-fno-semantic-interposition`` is added to both the compile and link line.
1554  This speeds builds of the Python interpreter created with :option:`--enable-shared`
1555  with ``gcc`` by up to 30%. See `this article
1556  <https://developers.redhat.com/blog/2020/06/25/red-hat-enterprise-linux-8-2-brings-faster-python-3-8-run-speeds/>`_
1557  for more details. (Contributed by Victor Stinner and Pablo Galindo in
1558  :issue:`38980`.)
1559
1560* Use a new output buffer management code for :mod:`bz2` / :mod:`lzma` /
1561  :mod:`zlib` modules, and add ``.readall()`` function to
1562  ``_compression.DecompressReader`` class. bz2 decompression is now 1.09x ~ 1.17x
1563  faster, lzma decompression 1.20x ~ 1.32x faster, ``GzipFile.read(-1)`` 1.11x
1564  ~ 1.18x faster. (Contributed by Ma Lin, reviewed by Gregory P. Smith, in :issue:`41486`)
1565
1566* When using stringized annotations, annotations dicts for functions are no longer
1567  created when the function is created.  Instead, they are stored as a tuple of
1568  strings, and the function object lazily converts this into the annotations dict
1569  on demand.  This optimization cuts the CPU time needed to define an annotated
1570  function by half.
1571  (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`.)
1572
1573* Substring search functions such as ``str1 in str2`` and ``str2.find(str1)``
1574  now sometimes use Crochemore & Perrin's "Two-Way" string searching
1575  algorithm to avoid quadratic behavior on long strings.  (Contributed
1576  by Dennis Sweeney in :issue:`41972`)
1577
1578* Add micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup
1579  performance in the common case of cache hits. This makes the interpreter 1.04 times faster
1580  on average. (Contributed by Dino Viehland in :issue:`43452`.)
1581
1582* The following built-in functions now support the faster :pep:`590` vectorcall calling convention:
1583  :func:`map`, :func:`filter`, :func:`reversed`, :func:`bool` and :func:`float`.
1584  (Contributed by Dong-hee Na and Jeroen Demeyer in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`.)
1585
1586* :class:`BZ2File` performance is improved by removing internal ``RLock``.
1587  This makes :class:`BZ2File` thread unsafe in the face of multiple simultaneous
1588  readers or writers, just like its equivalent classes in :mod:`gzip` and
1589  :mod:`lzma` have always been.  (Contributed by Inada Naoki in :issue:`43785`.)
1590
1591.. _whatsnew310-deprecated:
1592
1593Deprecated
1594==========
1595
1596* Currently Python accepts numeric literals immediately followed by keywords,
1597  for example ``0in x``, ``1or x``, ``0if 1else 2``.  It allows confusing
1598  and ambiguous expressions like ``[0x1for x in y]`` (which can be
1599  interpreted as ``[0x1 for x in y]`` or ``[0x1f or x in y]``).  Starting in
1600  this release, a deprecation warning is raised if the numeric literal is
1601  immediately followed by one of keywords :keyword:`and`, :keyword:`else`,
1602  :keyword:`for`, :keyword:`if`, :keyword:`in`, :keyword:`is` and :keyword:`or`.
1603  In future releases it will be changed to syntax warning, and finally to
1604  syntax error.
1605  (Contributed by Serhiy Storchaka in :issue:`43833`.)
1606
1607* Starting in this release, there will be a concerted effort to begin
1608  cleaning up old import semantics that were kept for Python 2.7
1609  compatibility. Specifically,
1610  :meth:`~importlib.abc.PathEntryFinder.find_loader`/:meth:`~importlib.abc.Finder.find_module`
1611  (superseded by :meth:`~importlib.abc.Finder.find_spec`),
1612  :meth:`~importlib.abc.Loader.load_module`
1613  (superseded by :meth:`~importlib.abc.Loader.exec_module`),
1614  :meth:`~importlib.abc.Loader.module_repr` (which the import system
1615  takes care of for you), the ``__package__`` attribute
1616  (superseded by ``__spec__.parent``), the ``__loader__`` attribute
1617  (superseded by ``__spec__.loader``), and the ``__cached__`` attribute
1618  (superseded by ``__spec__.cached``) will slowly be removed (as well
1619  as other classes and methods in :mod:`importlib`).
1620  :exc:`ImportWarning` and/or :exc:`DeprecationWarning` will be raised
1621  as appropriate to help identify code which needs updating during
1622  this transition.
1623
1624* The entire ``distutils`` namespace is deprecated, to be removed in
1625  Python 3.12. Refer to the :ref:`module changes <distutils-deprecated>`
1626  section for more information.
1627
1628* Non-integer arguments to :func:`random.randrange` are deprecated.
1629  The :exc:`ValueError` is deprecated in favor of a :exc:`TypeError`.
1630  (Contributed by Serhiy Storchaka and Raymond Hettinger in :issue:`37319`.)
1631
1632* The various ``load_module()`` methods of :mod:`importlib` have been
1633  documented as deprecated since Python 3.6, but will now also trigger
1634  a :exc:`DeprecationWarning`. Use
1635  :meth:`~importlib.abc.Loader.exec_module` instead.
1636  (Contributed by Brett Cannon in :issue:`26131`.)
1637
1638* :meth:`zimport.zipimporter.load_module` has been deprecated in
1639  preference for :meth:`~zipimport.zipimporter.exec_module`.
1640  (Contributed by Brett Cannon in :issue:`26131`.)
1641
1642* The use of :meth:`~importlib.abc.Loader.load_module` by the import
1643  system now triggers an :exc:`ImportWarning` as
1644  :meth:`~importlib.abc.Loader.exec_module` is preferred.
1645  (Contributed by Brett Cannon in :issue:`26131`.)
1646
1647* The use of :meth:`importlib.abc.MetaPathFinder.find_module` and
1648  :meth:`importlib.abc.PathEntryFinder.find_module` by the import system now
1649  trigger an :exc:`ImportWarning` as
1650  :meth:`importlib.abc.MetaPathFinder.find_spec` and
1651  :meth:`importlib.abc.PathEntryFinder.find_spec`
1652  are preferred, respectively. You can use
1653  :func:`importlib.util.spec_from_loader` to help in porting.
1654  (Contributed by Brett Cannon in :issue:`42134`.)
1655
1656* The use of :meth:`importlib.abc.PathEntryFinder.find_loader` by the import
1657  system now triggers an :exc:`ImportWarning` as
1658  :meth:`importlib.abc.PathEntryFinder.find_spec` is preferred. You can use
1659  :func:`importlib.util.spec_from_loader` to help in porting.
1660  (Contributed by Brett Cannon in :issue:`43672`.)
1661
1662* The various implementations of
1663  :meth:`importlib.abc.MetaPathFinder.find_module` (
1664  :meth:`importlib.machinery.BuiltinImporter.find_module`,
1665  :meth:`importlib.machinery.FrozenImporter.find_module`,
1666  :meth:`importlib.machinery.WindowsRegistryFinder.find_module`,
1667  :meth:`importlib.machinery.PathFinder.find_module`,
1668  :meth:`importlib.abc.MetaPathFinder.find_module` ),
1669  :meth:`importlib.abc.PathEntryFinder.find_module` (
1670  :meth:`importlib.machinery.FileFinder.find_module` ), and
1671  :meth:`importlib.abc.PathEntryFinder.find_loader` (
1672  :meth:`importlib.machinery.FileFinder.find_loader` )
1673  now raise :exc:`DeprecationWarning` and are slated for removal in
1674  Python 3.12 (previously they were documented as deprecated in Python 3.4).
1675  (Contributed by Brett Cannon in :issue:`42135`.)
1676
1677* :class:`importlib.abc.Finder` is deprecated (including its sole method,
1678  :meth:`~importlib.abc.Finder.find_module`). Both
1679  :class:`importlib.abc.MetaPathFinder` and :class:`importlib.abc.PathEntryFinder`
1680  no longer inherit from the class. Users should inherit from one of these two
1681  classes as appropriate instead.
1682  (Contributed by Brett Cannon in :issue:`42135`.)
1683
1684* The deprecations of :mod:`imp`, :func:`importlib.find_loader`,
1685  :func:`importlib.util.set_package_wrapper`,
1686  :func:`importlib.util.set_loader_wrapper`,
1687  :func:`importlib.util.module_for_loader`,
1688  :class:`pkgutil.ImpImporter`, and
1689  :class:`pkgutil.ImpLoader` have all been updated to list Python 3.12 as the
1690  slated version of removal (they began raising :exc:`DeprecationWarning` in
1691  previous versions of Python).
1692  (Contributed by Brett Cannon in :issue:`43720`.)
1693
1694* The import system now uses the ``__spec__`` attribute on modules before
1695  falling back on :meth:`~importlib.abc.Loader.module_repr` for a module's
1696  ``__repr__()`` method. Removal of the use of ``module_repr()`` is scheduled
1697  for Python 3.12.
1698  (Contributed by Brett Cannon in :issue:`42137`.)
1699
1700* :meth:`importlib.abc.Loader.module_repr`,
1701  :meth:`importlib.machinery.FrozenLoader.module_repr`, and
1702  :meth:`importlib.machinery.BuiltinLoader.module_repr` are deprecated and
1703  slated for removal in Python 3.12.
1704  (Contributed by Brett Cannon in :issue:`42136`.)
1705
1706* ``sqlite3.OptimizedUnicode`` has been undocumented and obsolete since Python
1707  3.3, when it was made an alias to :class:`str`.  It is now deprecated,
1708  scheduled for removal in Python 3.12.
1709  (Contributed by Erlend E. Aasland in :issue:`42264`.)
1710
1711* The undocumented built-in function ``sqlite3.enable_shared_cache`` is now
1712  deprecated, scheduled for removal in Python 3.12.  Its use is strongly
1713  discouraged by the SQLite3 documentation.  See `the SQLite3 docs
1714  <https://sqlite.org/c3ref/enable_shared_cache.html>`_ for more details.
1715  If a shared cache must be used, open the database in URI mode using the
1716  ``cache=shared`` query parameter.
1717  (Contributed by Erlend E. Aasland in :issue:`24464`.)
1718
1719* The following ``threading`` methods are now deprecated:
1720
1721  * ``threading.currentThread`` => :func:`threading.current_thread`
1722
1723  * ``threading.activeCount`` => :func:`threading.active_count`
1724
1725  * ``threading.Condition.notifyAll`` =>
1726    :meth:`threading.Condition.notify_all`
1727
1728  * ``threading.Event.isSet`` => :meth:`threading.Event.is_set`
1729
1730  * ``threading.Thread.setName`` => :attr:`threading.Thread.name`
1731
1732  * ``threading.thread.getName`` => :attr:`threading.Thread.name`
1733
1734  * ``threading.Thread.isDaemon`` => :attr:`threading.Thread.daemon`
1735
1736  * ``threading.Thread.setDaemon`` => :attr:`threading.Thread.daemon`
1737
1738  (Contributed by Jelle Zijlstra in :gh:`87889`.)
1739
1740* :meth:`pathlib.Path.link_to` is deprecated and slated for removal in
1741  Python 3.12. Use :meth:`pathlib.Path.hardlink_to` instead.
1742  (Contributed by Barney Gale in :issue:`39950`.)
1743
1744* ``cgi.log()`` is deprecated and slated for removal in Python 3.12.
1745  (Contributed by Inada Naoki in :issue:`41139`.)
1746
1747* The following :mod:`ssl` features have been deprecated since Python 3.6,
1748  Python 3.7, or OpenSSL 1.1.0 and will be removed in 3.11:
1749
1750  * :data:`~ssl.OP_NO_SSLv2`, :data:`~ssl.OP_NO_SSLv3`, :data:`~ssl.OP_NO_TLSv1`,
1751    :data:`~ssl.OP_NO_TLSv1_1`, :data:`~ssl.OP_NO_TLSv1_2`, and
1752    :data:`~ssl.OP_NO_TLSv1_3` are replaced by
1753    :attr:`sslSSLContext.minimum_version` and
1754    :attr:`sslSSLContext.maximum_version`.
1755
1756  * :data:`~ssl.PROTOCOL_SSLv2`, :data:`~ssl.PROTOCOL_SSLv3`,
1757    :data:`~ssl.PROTOCOL_SSLv23`, :data:`~ssl.PROTOCOL_TLSv1`,
1758    :data:`~ssl.PROTOCOL_TLSv1_1`, :data:`~ssl.PROTOCOL_TLSv1_2`, and
1759    :data:`~ssl.PROTOCOL_TLS` are deprecated in favor of
1760    :data:`~ssl.PROTOCOL_TLS_CLIENT` and :data:`~ssl.PROTOCOL_TLS_SERVER`
1761
1762  * :func:`~ssl.wrap_socket` is replaced by :meth:`ssl.SSLContext.wrap_socket`
1763
1764  * :func:`~ssl.match_hostname`
1765
1766  * :func:`~ssl.RAND_pseudo_bytes`, :func:`~ssl.RAND_egd`
1767
1768  * NPN features like :meth:`ssl.SSLSocket.selected_npn_protocol` and
1769    :meth:`ssl.SSLContext.set_npn_protocols` are replaced by ALPN.
1770
1771* The threading debug (:envvar:`PYTHONTHREADDEBUG` environment variable) is
1772  deprecated in Python 3.10 and will be removed in Python 3.12. This feature
1773  requires a :ref:`debug build of Python <debug-build>`.
1774  (Contributed by Victor Stinner in :issue:`44584`.)
1775
1776* Importing from the ``typing.io`` and ``typing.re`` submodules will now emit
1777  :exc:`DeprecationWarning`.  These submodules will be removed in a future version
1778  of Python.  Anything belonging to these submodules should be imported directly
1779  from :mod:`typing` instead.
1780  (Contributed by Sebastian Rittau in :issue:`38291`.)
1781
1782.. _whatsnew310-removed:
1783
1784Removed
1785=======
1786
1787* Removed special methods ``__int__``, ``__float__``, ``__floordiv__``,
1788  ``__mod__``, ``__divmod__``, ``__rfloordiv__``, ``__rmod__`` and
1789  ``__rdivmod__`` of the :class:`complex` class.  They always raised
1790  a :exc:`TypeError`.
1791  (Contributed by Serhiy Storchaka in :issue:`41974`.)
1792
1793* The ``ParserBase.error()`` method from the private and undocumented ``_markupbase``
1794  module has been removed.  :class:`html.parser.HTMLParser` is the only subclass of
1795  ``ParserBase`` and its ``error()`` implementation was already removed in
1796  Python 3.5.
1797  (Contributed by Berker Peksag in :issue:`31844`.)
1798
1799* Removed the ``unicodedata.ucnhash_CAPI`` attribute which was an internal
1800  PyCapsule object. The related private ``_PyUnicode_Name_CAPI`` structure was
1801  moved to the internal C API.
1802  (Contributed by Victor Stinner in :issue:`42157`.)
1803
1804* Removed the ``parser`` module, which was deprecated in 3.9 due to the
1805  switch to the new PEG parser, as well as all the C source and header files
1806  that were only being used by the old parser, including ``node.h``, ``parser.h``,
1807  ``graminit.h`` and ``grammar.h``.
1808
1809* Removed the Public C API functions ``PyParser_SimpleParseStringFlags``,
1810  ``PyParser_SimpleParseStringFlagsFilename``,
1811  ``PyParser_SimpleParseFileFlags`` and ``PyNode_Compile``
1812  that were deprecated in 3.9 due to the switch to the new PEG parser.
1813
1814* Removed the ``formatter`` module, which was deprecated in Python 3.4.
1815  It is somewhat obsolete, little used, and not tested. It was originally
1816  scheduled to be removed in Python 3.6, but such removals were delayed until
1817  after Python 2.7 EOL. Existing users should copy whatever classes they use
1818  into their code.
1819  (Contributed by Dong-hee Na and Terry J. Reedy in :issue:`42299`.)
1820
1821* Removed the :c:func:`PyModule_GetWarningsModule` function that was useless
1822  now due to the _warnings module was converted to a builtin module in 2.6.
1823  (Contributed by Hai Shi in :issue:`42599`.)
1824
1825* Remove deprecated aliases to :ref:`collections-abstract-base-classes` from
1826  the :mod:`collections` module.
1827  (Contributed by Victor Stinner in :issue:`37324`.)
1828
1829* The ``loop`` parameter has been removed from most of :mod:`asyncio`\ 's
1830  :doc:`high-level API <../library/asyncio-api-index>` following deprecation
1831  in Python 3.8.  The motivation behind this change is multifold:
1832
1833  1. This simplifies the high-level API.
1834  2. The functions in the high-level API have been implicitly getting the
1835     current thread's running event loop since Python 3.7.  There isn't a need to
1836     pass the event loop to the API in most normal use cases.
1837  3. Event loop passing is error-prone especially when dealing with loops
1838     running in different threads.
1839
1840  Note that the low-level API will still accept ``loop``.
1841  See :ref:`changes-python-api` for examples of how to replace existing code.
1842
1843  (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley
1844  in :issue:`42392`.)
1845
1846
1847Porting to Python 3.10
1848======================
1849
1850This section lists previously described changes and other bugfixes
1851that may require changes to your code.
1852
1853
1854Changes in the Python syntax
1855----------------------------
1856
1857* Deprecation warning is now emitted when compiling previously valid syntax
1858  if the numeric literal is immediately followed by a keyword (like in ``0in x``).
1859  In future releases it will be changed to syntax warning, and finally to a
1860  syntax error.  To get rid of the warning and make the code compatible with
1861  future releases just add a space between the numeric literal and the
1862  following keyword.
1863  (Contributed by Serhiy Storchaka in :issue:`43833`.)
1864
1865.. _changes-python-api:
1866
1867Changes in the Python API
1868-------------------------
1869
1870* The *etype* parameters of the :func:`~traceback.format_exception`,
1871  :func:`~traceback.format_exception_only`, and
1872  :func:`~traceback.print_exception` functions in the :mod:`traceback` module
1873  have been renamed to *exc*.
1874  (Contributed by Zackery Spytz and Matthias Bussonnier in :issue:`26389`.)
1875
1876* :mod:`atexit`: At Python exit, if a callback registered with
1877  :func:`atexit.register` fails, its exception is now logged. Previously, only
1878  some exceptions were logged, and the last exception was always silently
1879  ignored.
1880  (Contributed by Victor Stinner in :issue:`42639`.)
1881
1882* :class:`collections.abc.Callable` generic now flattens type parameters, similar
1883  to what :data:`typing.Callable` currently does.  This means that
1884  ``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of
1885  ``(int, str, str)``; previously this was ``([int, str], str)``.  Code which
1886  accesses the arguments via :func:`typing.get_args` or ``__args__`` need to account
1887  for this change.  Furthermore, :exc:`TypeError` may be raised for invalid forms
1888  of parameterizing :class:`collections.abc.Callable` which may have passed
1889  silently in Python 3.9.
1890  (Contributed by Ken Jin in :issue:`42195`.)
1891
1892* :meth:`socket.htons` and :meth:`socket.ntohs` now raise :exc:`OverflowError`
1893  instead of :exc:`DeprecationWarning` if the given parameter will not fit in
1894  a 16-bit unsigned integer.
1895  (Contributed by Erlend E. Aasland in :issue:`42393`.)
1896
1897* The ``loop`` parameter has been removed from most of :mod:`asyncio`\ 's
1898  :doc:`high-level API <../library/asyncio-api-index>` following deprecation
1899  in Python 3.8.
1900
1901  A coroutine that currently looks like this::
1902
1903     async def foo(loop):
1904         await asyncio.sleep(1, loop=loop)
1905
1906  Should be replaced with this::
1907
1908     async def foo():
1909         await asyncio.sleep(1)
1910
1911  If ``foo()`` was specifically designed *not* to run in the current thread's
1912  running event loop (e.g. running in another thread's event loop), consider
1913  using :func:`asyncio.run_coroutine_threadsafe` instead.
1914
1915  (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley
1916  in :issue:`42392`.)
1917
1918* The :data:`types.FunctionType` constructor now inherits the current builtins
1919  if the *globals* dictionary has no ``"__builtins__"`` key, rather than using
1920  ``{"None": None}`` as builtins: same behavior as :func:`eval` and
1921  :func:`exec` functions.  Defining a function with ``def function(...): ...``
1922  in Python is not affected, globals cannot be overridden with this syntax: it
1923  also inherits the current builtins.
1924  (Contributed by Victor Stinner in :issue:`42990`.)
1925
1926Changes in the C API
1927--------------------
1928
1929* The C API functions ``PyParser_SimpleParseStringFlags``,
1930  ``PyParser_SimpleParseStringFlagsFilename``,
1931  ``PyParser_SimpleParseFileFlags``, ``PyNode_Compile`` and the type
1932  used by these functions, ``struct _node``, were removed due to the switch
1933  to the new PEG parser.
1934
1935  Source should be now be compiled directly to a code object using, for
1936  example, :c:func:`Py_CompileString`. The resulting code object can then be
1937  evaluated using, for example, :c:func:`PyEval_EvalCode`.
1938
1939  Specifically:
1940
1941  * A call to ``PyParser_SimpleParseStringFlags`` followed by
1942    ``PyNode_Compile`` can be replaced by calling :c:func:`Py_CompileString`.
1943
1944  * There is no direct replacement for ``PyParser_SimpleParseFileFlags``.
1945    To compile code from a ``FILE *`` argument, you will need to read
1946    the file in C and pass the resulting buffer to :c:func:`Py_CompileString`.
1947
1948  * To compile a file given a ``char *`` filename, explicitly open the file, read
1949    it and compile the result. One way to do this is using the :py:mod:`io`
1950    module with :c:func:`PyImport_ImportModule`, :c:func:`PyObject_CallMethod`,
1951    :c:func:`PyBytes_AsString` and :c:func:`Py_CompileString`,
1952    as sketched below. (Declarations and error handling are omitted.) ::
1953
1954       io_module = Import_ImportModule("io");
1955       fileobject = PyObject_CallMethod(io_module, "open", "ss", filename, "rb");
1956       source_bytes_object = PyObject_CallMethod(fileobject, "read", "");
1957       result = PyObject_CallMethod(fileobject, "close", "");
1958       source_buf = PyBytes_AsString(source_bytes_object);
1959       code = Py_CompileString(source_buf, filename, Py_file_input);
1960
1961  * For ``FrameObject`` objects, the ``f_lasti`` member now represents a wordcode
1962    offset instead of a simple offset into the bytecode string. This means that this
1963    number needs to be multiplied by 2 to be used with APIs that expect a byte offset
1964    instead (like :c:func:`PyCode_Addr2Line` for example). Notice as well that the
1965    ``f_lasti`` member of ``FrameObject`` objects is not considered stable: please
1966    use :c:func:`PyFrame_GetLineNumber` instead.
1967
1968CPython bytecode changes
1969========================
1970
1971* The ``MAKE_FUNCTION`` instruction now accepts either a dict or a tuple of
1972  strings as the function's annotations.
1973  (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`.)
1974
1975Build Changes
1976=============
1977
1978* :pep:`644`: Python now requires OpenSSL 1.1.1 or newer. OpenSSL 1.0.2 is no
1979  longer supported.
1980  (Contributed by Christian Heimes in :issue:`43669`.)
1981
1982* The C99 functions :c:func:`snprintf` and :c:func:`vsnprintf` are now required
1983  to build Python.
1984  (Contributed by Victor Stinner in :issue:`36020`.)
1985
1986* :mod:`sqlite3` requires SQLite 3.7.15 or higher. (Contributed by Sergey Fedoseev
1987  and Erlend E. Aasland in :issue:`40744` and :issue:`40810`.)
1988
1989* The :mod:`atexit` module must now always be built as a built-in module.
1990  (Contributed by Victor Stinner in :issue:`42639`.)
1991
1992* Add :option:`--disable-test-modules` option to the ``configure`` script:
1993  don't build nor install test modules.
1994  (Contributed by Xavier de Gaye, Thomas Petazzoni and Peixing Xin in :issue:`27640`.)
1995
1996* Add :option:`--with-wheel-pkg-dir=PATH option <--with-wheel-pkg-dir>`
1997  to the ``./configure`` script. If
1998  specified, the :mod:`ensurepip` module looks for ``setuptools`` and ``pip``
1999  wheel packages in this directory: if both are present, these wheel packages
2000  are used instead of ensurepip bundled wheel packages.
2001
2002  Some Linux distribution packaging policies recommend against bundling
2003  dependencies. For example, Fedora installs wheel packages in the
2004  ``/usr/share/python-wheels/`` directory and don't install the
2005  ``ensurepip._bundled`` package.
2006
2007  (Contributed by Victor Stinner in :issue:`42856`.)
2008
2009* Add a new :option:`configure --without-static-libpython option
2010  <--without-static-libpython>` to not build the ``libpythonMAJOR.MINOR.a``
2011  static library and not install the ``python.o`` object file.
2012
2013  (Contributed by Victor Stinner in :issue:`43103`.)
2014
2015* The ``configure`` script now uses the ``pkg-config`` utility, if available,
2016  to detect the location of Tcl/Tk headers and libraries.  As before, those
2017  locations can be explicitly specified with the ``--with-tcltk-includes``
2018  and ``--with-tcltk-libs`` configuration options.
2019  (Contributed by Manolis Stamatogiannakis in :issue:`42603`.)
2020
2021* Add :option:`--with-openssl-rpath` option to ``configure`` script. The option
2022  simplifies building Python with a custom OpenSSL installation, e.g.
2023  ``./configure --with-openssl=/path/to/openssl --with-openssl-rpath=auto``.
2024  (Contributed by Christian Heimes in :issue:`43466`.)
2025
2026
2027C API Changes
2028=============
2029
2030PEP 652: Maintaining the Stable ABI
2031-----------------------------------
2032
2033The Stable ABI (Application Binary Interface) for extension modules or
2034embedding Python is now explicitly defined.
2035:ref:`stable` describes C API and ABI stability guarantees along with best
2036practices for using the Stable ABI.
2037
2038(Contributed by Petr Viktorin in :pep:`652` and :issue:`43795`.)
2039
2040New Features
2041------------
2042
2043* The result of :c:func:`PyNumber_Index` now always has exact type :class:`int`.
2044  Previously, the result could have been an instance of a subclass of ``int``.
2045  (Contributed by Serhiy Storchaka in :issue:`40792`.)
2046
2047* Add a new :c:member:`~PyConfig.orig_argv` member to the :c:type:`PyConfig`
2048  structure: the list of the original command line arguments passed to the
2049  Python executable.
2050  (Contributed by Victor Stinner in :issue:`23427`.)
2051
2052* The :c:func:`PyDateTime_DATE_GET_TZINFO` and
2053  :c:func:`PyDateTime_TIME_GET_TZINFO` macros have been added for accessing
2054  the ``tzinfo`` attributes of :class:`datetime.datetime` and
2055  :class:`datetime.time` objects.
2056  (Contributed by Zackery Spytz in :issue:`30155`.)
2057
2058* Add a :c:func:`PyCodec_Unregister` function to unregister a codec
2059  search function.
2060  (Contributed by Hai Shi in :issue:`41842`.)
2061
2062* The :c:func:`PyIter_Send` function was added to allow
2063  sending value into iterator without raising ``StopIteration`` exception.
2064  (Contributed by Vladimir Matveev in :issue:`41756`.)
2065
2066* Add :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API.
2067  (Contributed by Alex Gaynor in :issue:`41784`.)
2068
2069* Add :c:func:`PyModule_AddObjectRef` function: similar to
2070  :c:func:`PyModule_AddObject` but don't steal a reference to the value on
2071  success.
2072  (Contributed by Victor Stinner in :issue:`1635741`.)
2073
2074* Add :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the
2075  reference count of an object and return the object.
2076  (Contributed by Victor Stinner in :issue:`42262`.)
2077
2078* The :c:func:`PyType_FromSpecWithBases` and :c:func:`PyType_FromModuleAndSpec`
2079  functions now accept a single class as the *bases* argument.
2080  (Contributed by Serhiy Storchaka in :issue:`42423`.)
2081
2082* The :c:func:`PyType_FromModuleAndSpec` function now accepts NULL ``tp_doc``
2083  slot.
2084  (Contributed by Hai Shi in :issue:`41832`.)
2085
2086* The :c:func:`PyType_GetSlot` function can accept
2087  :ref:`static types <static-types>`.
2088  (Contributed by Hai Shi and Petr Viktorin in :issue:`41073`.)
2089
2090* Add a new :c:func:`PySet_CheckExact` function to the C-API to check if an
2091  object is an instance of :class:`set` but not an instance of a subtype.
2092  (Contributed by Pablo Galindo in :issue:`43277`.)
2093
2094* Add :c:func:`PyErr_SetInterruptEx` which allows passing a signal number
2095  to simulate.
2096  (Contributed by Antoine Pitrou in :issue:`43356`.)
2097
2098* The limited C API is now supported if :ref:`Python is built in debug mode
2099  <debug-build>` (if the ``Py_DEBUG`` macro is defined). In the limited C API,
2100  the :c:func:`Py_INCREF` and :c:func:`Py_DECREF` functions are now implemented
2101  as opaque function
2102  calls, rather than accessing directly the :c:member:`PyObject.ob_refcnt`
2103  member, if Python is built in debug mode and the ``Py_LIMITED_API`` macro
2104  targets Python 3.10 or newer. It became possible to support the limited C API
2105  in debug mode because the :c:type:`PyObject` structure is the same in release
2106  and debug mode since Python 3.8 (see :issue:`36465`).
2107
2108  The limited C API is still not supported in the :option:`--with-trace-refs`
2109  special build (``Py_TRACE_REFS`` macro).
2110  (Contributed by Victor Stinner in :issue:`43688`.)
2111
2112* Add the :c:func:`Py_Is(x, y) <Py_Is>` function to test if the *x* object is
2113  the *y* object, the same as ``x is y`` in Python. Add also the
2114  :c:func:`Py_IsNone`, :c:func:`Py_IsTrue`, :c:func:`Py_IsFalse` functions to
2115  test if an object is, respectively, the ``None`` singleton, the ``True``
2116  singleton or the ``False`` singleton.
2117  (Contributed by Victor Stinner in :issue:`43753`.)
2118
2119* Add new functions to control the garbage collector from C code:
2120  :c:func:`PyGC_Enable()`,
2121  :c:func:`PyGC_Disable()`,
2122  :c:func:`PyGC_IsEnabled()`.
2123  These functions allow to activate, deactivate and query the state of the garbage collector from C code without
2124  having to import the :mod:`gc` module.
2125
2126* Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow
2127  creating type instances.
2128  (Contributed by Victor Stinner in :issue:`43916`.)
2129
2130* Add a new :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag for creating immutable
2131  type objects: type attributes cannot be set nor deleted.
2132  (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.)
2133
2134Porting to Python 3.10
2135----------------------
2136
2137* The ``PY_SSIZE_T_CLEAN`` macro must now be defined to use
2138  :c:func:`PyArg_ParseTuple` and :c:func:`Py_BuildValue` formats which use
2139  ``#``: ``es#``, ``et#``, ``s#``, ``u#``, ``y#``, ``z#``, ``U#`` and ``Z#``.
2140  See :ref:`arg-parsing` and :pep:`353`.
2141  (Contributed by Victor Stinner in :issue:`40943`.)
2142
2143* Since :c:func:`Py_REFCNT()` is changed to the inline static function,
2144  ``Py_REFCNT(obj) = new_refcnt`` must be replaced with ``Py_SET_REFCNT(obj, new_refcnt)``:
2145  see :c:func:`Py_SET_REFCNT()` (available since Python 3.9). For backward
2146  compatibility, this macro can be used::
2147
2148      #if PY_VERSION_HEX < 0x030900A4
2149      #  define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0)
2150      #endif
2151
2152  (Contributed by Victor Stinner in :issue:`39573`.)
2153
2154* Calling :c:func:`PyDict_GetItem` without :term:`GIL` held had been allowed
2155  for historical reason. It is no longer allowed.
2156  (Contributed by Victor Stinner in :issue:`40839`.)
2157
2158* ``PyUnicode_FromUnicode(NULL, size)`` and ``PyUnicode_FromStringAndSize(NULL, size)``
2159  raise ``DeprecationWarning`` now.  Use :c:func:`PyUnicode_New` to allocate
2160  Unicode object without initial data.
2161  (Contributed by Inada Naoki in :issue:`36346`.)
2162
2163* The private ``_PyUnicode_Name_CAPI`` structure of the PyCapsule API
2164  ``unicodedata.ucnhash_CAPI`` has been moved to the internal C API.
2165  (Contributed by Victor Stinner in :issue:`42157`.)
2166
2167* :c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`,
2168  :c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome` and
2169  :c:func:`Py_GetProgramName` functions now return ``NULL`` if called before
2170  :c:func:`Py_Initialize` (before Python is initialized). Use the new
2171  :ref:`init-config` API to get the :ref:`init-path-config`.
2172  (Contributed by Victor Stinner in :issue:`42260`.)
2173
2174* :c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and
2175  :c:func:`PyCell_SET` macros can no longer be used as l-value or r-value.
2176  For example, ``x = PyList_SET_ITEM(a, b, c)`` and
2177  ``PyList_SET_ITEM(a, b, c) = x`` now fail with a compiler error. It prevents
2178  bugs like ``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test.
2179  (Contributed by Zackery Spytz and Victor Stinner in :issue:`30459`.)
2180
2181* The non-limited API files ``odictobject.h``, ``parser_interface.h``,
2182  ``picklebufobject.h``, ``pyarena.h``, ``pyctype.h``, ``pydebug.h``,
2183  ``pyfpe.h``, and ``pytime.h`` have been moved to the ``Include/cpython``
2184  directory. These files must not be included directly, as they are already
2185  included in ``Python.h``; see :ref:`api-includes`. If they have
2186  been included directly, consider including ``Python.h`` instead.
2187  (Contributed by Nicholas Sim in :issue:`35134`.)
2188
2189* Use the :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag to create immutable type
2190  objects. Do not rely on :c:data:`Py_TPFLAGS_HEAPTYPE` to decide if a type
2191  object is mutable or not; check if :c:data:`Py_TPFLAGS_IMMUTABLETYPE` is set
2192  instead.
2193  (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.)
2194
2195* The undocumented function ``Py_FrozenMain`` has been removed from the
2196  limited API. The function is mainly useful for custom builds of Python.
2197  (Contributed by Petr Viktorin in :issue:`26241`.)
2198
2199Deprecated
2200----------
2201
2202* The ``PyUnicode_InternImmortal()`` function is now deprecated
2203  and will be removed in Python 3.12: use :c:func:`PyUnicode_InternInPlace`
2204  instead.
2205  (Contributed by Victor Stinner in :issue:`41692`.)
2206
2207Removed
2208-------
2209
2210* Removed ``Py_UNICODE_str*`` functions manipulating ``Py_UNICODE*`` strings.
2211  (Contributed by Inada Naoki in :issue:`41123`.)
2212
2213   * ``Py_UNICODE_strlen``: use :c:func:`PyUnicode_GetLength` or
2214     :c:macro:`PyUnicode_GET_LENGTH`
2215   * ``Py_UNICODE_strcat``: use :c:func:`PyUnicode_CopyCharacters` or
2216     :c:func:`PyUnicode_FromFormat`
2217   * ``Py_UNICODE_strcpy``, ``Py_UNICODE_strncpy``: use
2218     :c:func:`PyUnicode_CopyCharacters` or :c:func:`PyUnicode_Substring`
2219   * ``Py_UNICODE_strcmp``: use :c:func:`PyUnicode_Compare`
2220   * ``Py_UNICODE_strncmp``: use :c:func:`PyUnicode_Tailmatch`
2221   * ``Py_UNICODE_strchr``, ``Py_UNICODE_strrchr``: use
2222     :c:func:`PyUnicode_FindChar`
2223
2224* Removed ``PyUnicode_GetMax()``. Please migrate to new (:pep:`393`) APIs.
2225  (Contributed by Inada Naoki in :issue:`41103`.)
2226
2227* Removed ``PyLong_FromUnicode()``. Please migrate to :c:func:`PyLong_FromUnicodeObject`.
2228  (Contributed by Inada Naoki in :issue:`41103`.)
2229
2230* Removed ``PyUnicode_AsUnicodeCopy()``. Please use :c:func:`PyUnicode_AsUCS4Copy` or
2231  :c:func:`PyUnicode_AsWideCharString`
2232  (Contributed by Inada Naoki in :issue:`41103`.)
2233
2234* Removed ``_Py_CheckRecursionLimit`` variable: it has been replaced by
2235  ``ceval.recursion_limit`` of the :c:type:`PyInterpreterState` structure.
2236  (Contributed by Victor Stinner in :issue:`41834`.)
2237
2238* Removed undocumented macros ``Py_ALLOW_RECURSION`` and
2239  ``Py_END_ALLOW_RECURSION`` and the ``recursion_critical`` field of the
2240  :c:type:`PyInterpreterState` structure.
2241  (Contributed by Serhiy Storchaka in :issue:`41936`.)
2242
2243* Removed the undocumented ``PyOS_InitInterrupts()`` function. Initializing
2244  Python already implicitly installs signal handlers: see
2245  :c:member:`PyConfig.install_signal_handlers`.
2246  (Contributed by Victor Stinner in :issue:`41713`.)
2247
2248* Remove the ``PyAST_Validate()`` function. It is no longer possible to build a
2249  AST object (``mod_ty`` type) with the public C API. The function was already
2250  excluded from the limited C API (:pep:`384`).
2251  (Contributed by Victor Stinner in :issue:`43244`.)
2252
2253* Remove the ``symtable.h`` header file and the undocumented functions:
2254
2255  * ``PyST_GetScope()``
2256  * ``PySymtable_Build()``
2257  * ``PySymtable_BuildObject()``
2258  * ``PySymtable_Free()``
2259  * ``Py_SymtableString()``
2260  * ``Py_SymtableStringObject()``
2261
2262  The ``Py_SymtableString()`` function was part the stable ABI by mistake but
2263  it could not be used, because the ``symtable.h`` header file was excluded
2264  from the limited C API.
2265
2266  Use Python :mod:`symtable` module instead.
2267  (Contributed by Victor Stinner in :issue:`43244`.)
2268
2269* Remove :c:func:`PyOS_ReadlineFunctionPointer` from the limited C API headers
2270  and from ``python3.dll``, the library that provides the stable ABI on
2271  Windows. Since the function takes a ``FILE*`` argument, its ABI stability
2272  cannot be guaranteed.
2273  (Contributed by Petr Viktorin in :issue:`43868`.)
2274
2275* Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files.
2276  These functions were undocumented and excluded from the limited C API.
2277  Most names defined by these header files were not prefixed by ``Py`` and so
2278  could create names conflicts. For example, ``Python-ast.h`` defined a
2279  ``Yield`` macro which was conflict with the ``Yield`` name used by the
2280  Windows ``<winbase.h>`` header. Use the Python :mod:`ast` module instead.
2281  (Contributed by Victor Stinner in :issue:`43244`.)
2282
2283* Remove the compiler and parser functions using ``struct _mod`` type, because
2284  the public AST C API was removed:
2285
2286  * ``PyAST_Compile()``
2287  * ``PyAST_CompileEx()``
2288  * ``PyAST_CompileObject()``
2289  * ``PyFuture_FromAST()``
2290  * ``PyFuture_FromASTObject()``
2291  * ``PyParser_ASTFromFile()``
2292  * ``PyParser_ASTFromFileObject()``
2293  * ``PyParser_ASTFromFilename()``
2294  * ``PyParser_ASTFromString()``
2295  * ``PyParser_ASTFromStringObject()``
2296
2297  These functions were undocumented and excluded from the limited C API.
2298  (Contributed by Victor Stinner in :issue:`43244`.)
2299
2300* Remove the ``pyarena.h`` header file with functions:
2301
2302  * ``PyArena_New()``
2303  * ``PyArena_Free()``
2304  * ``PyArena_Malloc()``
2305  * ``PyArena_AddPyObject()``
2306
2307  These functions were undocumented, excluded from the limited C API, and were
2308  only used internally by the compiler.
2309  (Contributed by Victor Stinner in :issue:`43244`.)
2310
2311* The ``PyThreadState.use_tracing`` member has been removed to optimize Python.
2312  (Contributed by Mark Shannon in :issue:`43760`.)
2313