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