Skip to content
Snippets Groups Projects
Unverified Commit 9cf67522 authored by Łukasz Langa's avatar Łukasz Langa
Browse files

Python 3.9.0

parent e8165e79
No related branches found
No related tags found
No related merge requests found
...@@ -4,22 +4,21 @@ ...@@ -4,22 +4,21 @@
:Release: |release| :Release: |release|
:Date: |today| :Date: |today|
:Editor: Łukasz Langa
.. Rules for maintenance: .. Rules for maintenance:
* Anyone can add text to this document. Do not spend very much time * Anyone can add text to this document. Your text might get
on the wording of your changes, because your text will probably rewritten to some degree.
get rewritten to some degree.
* The maintainer will go through Misc/NEWS periodically and add * The maintainer will go through Misc/NEWS periodically and add
changes; it's therefore more important to add your changes to changes; it's therefore more important to add your changes to
Misc/NEWS than to this file. Misc/NEWS than to this file.
* This is not a complete list of every single change; completeness * This is not a complete list of every single change; completeness
is the purpose of Misc/NEWS. Some changes I consider too small is the purpose of Misc/NEWS. Some changes will be too small
or esoteric to include. If such a change is added to the text, or esoteric to include. If such a change is added to the text,
I'll just remove it. (This is another reason you shouldn't spend it might get removed during final editing.
too much time on writing your addition.)
* If you want to draw your new text to the attention of the * If you want to draw your new text to the attention of the
maintainer, add 'XXX' to the beginning of the paragraph or maintainer, add 'XXX' to the beginning of the paragraph or
...@@ -46,14 +45,13 @@ ...@@ -46,14 +45,13 @@
when researching a change. when researching a change.
This article explains the new features in Python 3.9, compared to 3.8. This article explains the new features in Python 3.9, compared to 3.8.
Python 3.9 was released on October 5th, 2020.
For full details, see the :ref:`changelog <changelog>`. For full details, see the :ref:`changelog <changelog>`.
.. note:: .. seealso::
Prerelease users should be aware that this document is currently in draft :pep:`596` - Python 3.9 Release Schedule
form. It will be updated substantially as Python 3.9 moves towards release,
so it's worth checking back even after reading earlier versions.
Summary -- Release highlights Summary -- Release highlights
...@@ -62,27 +60,70 @@ Summary -- Release highlights ...@@ -62,27 +60,70 @@ Summary -- Release highlights
.. This section singles out the most important changes in Python 3.9. .. This section singles out the most important changes in Python 3.9.
Brevity is key. Brevity is key.
New syntax features:
* :pep:`584`, union operators added to ``dict``;
* :pep:`585`, type hinting generics in standard collections;
* :pep:`614`, relaxed grammar restrictions on decorators.
New built-in features:
* :pep:`616`, string methods to remove prefixes and suffixes.
New features in the standard library:
* :pep:`593`, flexible function and variable annotations;
* :func:`os.pidfd_open` added that allows process management without races
and signals.
Interpreter improvements:
* :pep:`573`, fast access to module state from methods of C extension
types;
* :pep:`617`, CPython now uses a new parser based on PEG;
* a number of Python builtins (range, tuple, set, frozenset, list, dict) are
now sped up using :pep:`590` vectorcall;
* garbage collection does not block on resurrected objects;
* a number of Python modules (:mod:`_abc`, :mod:`audioop`, :mod:`_bz2`,
:mod:`_codecs`, :mod:`_contextvars`, :mod:`_crypt`, :mod:`_functools`,
:mod:`_json`, :mod:`_locale`, :mod:`math`, :mod:`operator`, :mod:`resource`,
:mod:`time`, :mod:`_weakref`) now use multiphase initialization as defined
by PEP 489;
* a number of standard library modules (:mod:`audioop`, :mod:`ast`, :mod:`grp`,
:mod:`_hashlib`, :mod:`pwd`, :mod:`_posixsubprocess`, :mod:`random`,
:mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) are now using
the stable ABI defined by PEP 384.
.. PEP-sized items next. New library modules:
* :pep:`615`, the IANA Time Zone Database is now present in the standard
library in the :mod:`zoneinfo` module;
* an implementation of a topological sort of a graph is now provided in
the new :mod:`graphlib` module.
Release process changes:
* :pep:`602`, CPython adopts an annual release cycle.
You should check for DeprecationWarning in your code You should check for DeprecationWarning in your code
==================================================== ====================================================
When Python 2.7 was still supported, many functions were kept for backward When Python 2.7 was still supported, a lot of functionality in Python 3
compatibility with Python 2.7. With the end of Python 2.7 support, these was kept for backward compatibility with Python 2.7. With the end of Python
backward compatibility layers have been removed, or will be removed soon. 2 support, these backward compatibility layers have been removed, or will
Most of them emitted a :exc:`DeprecationWarning` warning for several years. For be removed soon. Most of them emitted a :exc:`DeprecationWarning` warning for
example, using ``collections.Mapping`` instead of ``collections.abc.Mapping`` several years. For example, using ``collections.Mapping`` instead of
emits a :exc:`DeprecationWarning` since Python 3.3, released in 2012. ``collections.abc.Mapping`` emits a :exc:`DeprecationWarning` since Python
3.3, released in 2012.
Test your application with the :option:`-W` ``default`` command-line option to see Test your application with the :option:`-W` ``default`` command-line option to see
:exc:`DeprecationWarning` and :exc:`PendingDeprecationWarning`, or even with :exc:`DeprecationWarning` and :exc:`PendingDeprecationWarning`, or even with
:option:`-W` ``error`` to treat them as errors. :ref:`Warnings Filter :option:`-W` ``error`` to treat them as errors. :ref:`Warnings Filter
<warning-filter>` can be used to ignore warnings from third-party code. <warning-filter>` can be used to ignore warnings from third-party code.
It has been decided to keep a few backward compatibility layers for one last Python 3.9 is the last version providing those Python 2 backward compatibility
release, to give more time to Python projects maintainers to organize the layers, to give more time to Python projects maintainers to organize the
removal of the Python 2 support and add support for Python 3.9. removal of the Python 2 support and add support for Python 3.9.
Aliases to :ref:`Abstract Base Classes <collections-abstract-base-classes>` in Aliases to :ref:`Abstract Base Classes <collections-abstract-base-classes>` in
...@@ -94,6 +135,9 @@ More generally, try to run your tests in the :ref:`Python Development Mode ...@@ -94,6 +135,9 @@ More generally, try to run your tests in the :ref:`Python Development Mode
<devmode>` which helps to prepare your code to make it compatible with the <devmode>` which helps to prepare your code to make it compatible with the
next Python version. next Python version.
Note: a number of pre-existing deprecatations were removed in this version
of Python as well. Consult the :ref:`removed-in-python-39` section.
New Features New Features
============ ============
...@@ -102,11 +146,23 @@ Dictionary Merge & Update Operators ...@@ -102,11 +146,23 @@ Dictionary Merge & Update Operators
----------------------------------- -----------------------------------
Merge (``|``) and update (``|=``) operators have been added to the built-in Merge (``|``) and update (``|=``) operators have been added to the built-in
:class:`dict` class. See :pep:`584` for a full description. :class:`dict` class. Those complement the existing ``dict.update`` and
``{**d1, **d2}`` methods of merging dictionaries.
Example::
>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}
See :pep:`584` for a full description.
(Contributed by Brandt Bucher in :issue:`36144`.) (Contributed by Brandt Bucher in :issue:`36144`.)
PEP 616: New removeprefix() and removesuffix() string methods New String Methods to Remove Prefixes and Suffixes
------------------------------------------------------------- --------------------------------------------------
:meth:`str.removeprefix(prefix)<str.removeprefix>` and :meth:`str.removeprefix(prefix)<str.removeprefix>` and
:meth:`str.removesuffix(suffix)<str.removesuffix>` have been added :meth:`str.removesuffix(suffix)<str.removesuffix>` have been added
...@@ -115,8 +171,8 @@ to easily remove an unneeded prefix or a suffix from a string. Corresponding ...@@ -115,8 +171,8 @@ to easily remove an unneeded prefix or a suffix from a string. Corresponding
added. See :pep:`616` for a full description. (Contributed by Dennis Sweeney in added. See :pep:`616` for a full description. (Contributed by Dennis Sweeney in
:issue:`39939`.) :issue:`39939`.)
PEP 585: Builtin Generic Types Type Hinting Generics in Standard Collections
------------------------------ ---------------------------------------------
In type annotations you can now use built-in collection types such as In type annotations you can now use built-in collection types such as
``list`` and ``dict`` as generic types instead of importing the ``list`` and ``dict`` as generic types instead of importing the
...@@ -135,8 +191,8 @@ Example: ...@@ -135,8 +191,8 @@ Example:
See :pep:`585` for more details. (Contributed by Guido van Rossum, See :pep:`585` for more details. (Contributed by Guido van Rossum,
Ethan Smith, and Batuhan Taşkaya in :issue:`39481`.) Ethan Smith, and Batuhan Taşkaya in :issue:`39481`.)
PEP 617: New Parser New Parser
------------------- ----------
Python 3.9 uses a new parser, based on `PEG Python 3.9 uses a new parser, based on `PEG
<https://en.wikipedia.org/wiki/Parsing_expression_grammar>`_ instead <https://en.wikipedia.org/wiki/Parsing_expression_grammar>`_ instead
...@@ -167,7 +223,6 @@ Other Language Changes ...@@ -167,7 +223,6 @@ Other Language Changes
its top-level package. its top-level package.
(Contributed by Ngalim Siregar in :issue:`37444`.) (Contributed by Ngalim Siregar in :issue:`37444`.)
* Python now gets the absolute path of the script filename specified on * Python now gets the absolute path of the script filename specified on
the command line (ex: ``python3 script.py``): the ``__file__`` attribute of the command line (ex: ``python3 script.py``): the ``__file__`` attribute of
the :mod:`__main__` module became an absolute path, rather than a relative the :mod:`__main__` module became an absolute path, rather than a relative
...@@ -201,6 +256,17 @@ Other Language Changes ...@@ -201,6 +256,17 @@ Other Language Changes
for the correspondent concrete type (``list`` in this case). for the correspondent concrete type (``list`` in this case).
(Contributed by Serhiy Storchaka in :issue:`40257`.) (Contributed by Serhiy Storchaka in :issue:`40257`.)
* Parallel running of :meth:`~agen.aclose` / :meth:`~agen.asend` /
:meth:`~agen.athrow` is now prohibited, and ``ag_running`` now reflects
the actual running status of the async generator.
(Contributed by Yury Selivanov in :issue:`30773`.)
* Unexpected errors in calling the ``__iter__`` method are no longer masked by
``TypeError`` in the :keyword:`in` operator and functions
:func:`~operator.contains`, :func:`~operator.indexOf` and
:func:`~operator.countOf` of the :mod:`operator` module.
(Contributed by Serhiy Storchaka in :issue:`40824`.)
New Modules New Modules
=========== ===========
...@@ -248,9 +314,10 @@ PyPI and maintained by the CPython core team. ...@@ -248,9 +314,10 @@ PyPI and maintained by the CPython core team.
graphlib graphlib
--------- ---------
Add the :mod:`graphlib` that contains the :class:`graphlib.TopologicalSorter` class A new module, :mod:`graphlib`, was added that contains the
to offer functionality to perform topological sorting of graphs. (Contributed by Pablo :class:`graphlib.TopologicalSorter` class to offer functionality to perform
Galindo, Tim Peters and Larry Hastings in :issue:`17005`.) topological sorting of graphs. (Contributed by Pablo Galindo, Tim Peters and
Larry Hastings in :issue:`17005`.)
Improved Modules Improved Modules
...@@ -296,6 +363,15 @@ loop, and essentially works as a high-level version of ...@@ -296,6 +363,15 @@ loop, and essentially works as a high-level version of
:meth:`~asyncio.loop.run_in_executor` that can directly take keyword arguments. :meth:`~asyncio.loop.run_in_executor` that can directly take keyword arguments.
(Contributed by Kyle Stanley and Yury Selivanov in :issue:`32309`.) (Contributed by Kyle Stanley and Yury Selivanov in :issue:`32309`.)
When cancelling the task due to a timeout, :meth:`asyncio.wait_for` will now
wait until the cancellation is complete also in the case when *timeout* is
<= 0, like it does with positive timeouts.
(Contributed by Elvis Pranskevichus in :issue:`32751`.)
:mod:`asyncio` now raises :exc:`TyperError` when calling incompatible
methods with an :class:`ssl.SSLSocket` socket.
(Contributed by Ido Michael in :issue:`37404`.)
compileall compileall
---------- ----------
...@@ -328,7 +404,7 @@ startup overhead and reduces the amount of lost CPU time to idle workers. ...@@ -328,7 +404,7 @@ startup overhead and reduces the amount of lost CPU time to idle workers.
curses curses
------ ------
Add :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`,
:func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions. :func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions.
(Contributed by Anthony Sottile in :issue:`38312`.) (Contributed by Anthony Sottile in :issue:`38312`.)
...@@ -375,12 +451,17 @@ finalized by the garbage collector. (Contributed by Pablo Galindo in ...@@ -375,12 +451,17 @@ finalized by the garbage collector. (Contributed by Pablo Galindo in
hashlib hashlib
------- -------
The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF from OpenSSL
when available.
(Contributed by Christian Heimes in :issue:`37630`.)
Builtin hash modules can now be disabled with Builtin hash modules can now be disabled with
``./configure --without-builtin-hashlib-hashes`` or selectively enabled with ``./configure --without-builtin-hashlib-hashes`` or selectively enabled with
e.g. ``./configure --with-builtin-hashlib-hashes=sha3,blake2`` to force use e.g. ``./configure --with-builtin-hashlib-hashes=sha3,blake2`` to force use
of OpenSSL based implementation. of OpenSSL based implementation.
(Contributed by Christian Heimes in :issue:`40479`) (Contributed by Christian Heimes in :issue:`40479`)
http http
---- ----
...@@ -390,13 +471,13 @@ HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` ...@@ -390,13 +471,13 @@ HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY``
IDLE and idlelib IDLE and idlelib
---------------- ----------------
Add option to toggle cursor blink off. (Contributed by Zackery Spytz Added option to toggle cursor blink off. (Contributed by Zackery Spytz
in :issue:`4603`.) in :issue:`4603`.)
Escape key now closes IDLE completion windows. (Contributed by Johnny Escape key now closes IDLE completion windows. (Contributed by Johnny
Najera in :issue:`38944`.) Najera in :issue:`38944`.)
Add keywords to module name completion list. (Contributed by Terry J. Added keywords to module name completion list. (Contributed by Terry J.
Reedy in :issue:`37765`.) Reedy in :issue:`37765`.)
The changes above have been backported to 3.8 maintenance releases. The changes above have been backported to 3.8 maintenance releases.
...@@ -426,6 +507,17 @@ now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative ...@@ -426,6 +507,17 @@ now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
import attempts. import attempts.
(Contributed by Ngalim Siregar in :issue:`37444`.) (Contributed by Ngalim Siregar in :issue:`37444`.)
Import loaders which publish immutable module objects can now publish
immutable packages in addition to individual modules.
(Contributed by Dino Viehland in :issue:`39336`.)
Added :func:`importlib.resources.files` function with support for
subdirectories in package data, matching backport in ``importlib_resources``
version 1.5.
(Contributed by Jason R. Coombs in :issue:`39791`.)
Refreshed ``importlib.metadata`` from ``importlib_metadata`` version 1.6.1.
inspect inspect
------- -------
...@@ -448,15 +540,15 @@ Expanded the :func:`math.gcd` function to handle multiple arguments. ...@@ -448,15 +540,15 @@ Expanded the :func:`math.gcd` function to handle multiple arguments.
Formerly, it only supported two arguments. Formerly, it only supported two arguments.
(Contributed by Serhiy Storchaka in :issue:`39648`.) (Contributed by Serhiy Storchaka in :issue:`39648`.)
Add :func:`math.lcm`: return the least common multiple of specified arguments. Added :func:`math.lcm`: return the least common multiple of specified arguments.
(Contributed by Mark Dickinson, Ananthakrishnan and Serhiy Storchaka in (Contributed by Mark Dickinson, Ananthakrishnan and Serhiy Storchaka in
:issue:`39479` and :issue:`39648`.) :issue:`39479` and :issue:`39648`.)
Add :func:`math.nextafter`: return the next floating-point value after *x* Added :func:`math.nextafter`: return the next floating-point value after *x*
towards *y*. towards *y*.
(Contributed by Victor Stinner in :issue:`39288`.) (Contributed by Victor Stinner in :issue:`39288`.)
Add :func:`math.ulp`: return the value of the least significant bit Added :func:`math.ulp`: return the value of the least significant bit
of a float. of a float.
(Contributed by Victor Stinner in :issue:`39310`.) (Contributed by Victor Stinner in :issue:`39310`.)
...@@ -492,7 +584,7 @@ The :func:`os.putenv` and :func:`os.unsetenv` functions are now always ...@@ -492,7 +584,7 @@ The :func:`os.putenv` and :func:`os.unsetenv` functions are now always
available. available.
(Contributed by Victor Stinner in :issue:`39395`.) (Contributed by Victor Stinner in :issue:`39395`.)
Add :func:`os.waitstatus_to_exitcode` function: Added :func:`os.waitstatus_to_exitcode` function:
convert a wait status to an exit code. convert a wait status to an exit code.
(Contributed by Victor Stinner in :issue:`40094`.) (Contributed by Victor Stinner in :issue:`40094`.)
...@@ -503,6 +595,12 @@ Added :meth:`pathlib.Path.readlink()` which acts similarly to ...@@ -503,6 +595,12 @@ Added :meth:`pathlib.Path.readlink()` which acts similarly to
:func:`os.readlink`. :func:`os.readlink`.
(Contributed by Girts Folkmanis in :issue:`30618`) (Contributed by Girts Folkmanis in :issue:`30618`)
pdb
---
On Windows now :class:`~pdb.Pdb` supports ``~/.pdbrc``.
(Contributed by Tim Hopper and Dan Lidral-Porter in :issue:`20523`.)
poplib poplib
------ ------
...@@ -526,7 +624,7 @@ method etc, but for any object that has its own ``__doc__`` attribute. ...@@ -526,7 +624,7 @@ method etc, but for any object that has its own ``__doc__`` attribute.
random random
------ ------
Add a new :attr:`random.Random.randbytes` method: generate random bytes. Added a new :attr:`random.Random.randbytes` method: generate random bytes.
(Contributed by Victor Stinner in :issue:`40286`.) (Contributed by Victor Stinner in :issue:`40286`.)
signal signal
...@@ -555,6 +653,11 @@ constant on Linux 4.1 and greater. ...@@ -555,6 +653,11 @@ constant on Linux 4.1 and greater.
The socket module now supports the :data:`~socket.CAN_J1939` protocol on The socket module now supports the :data:`~socket.CAN_J1939` protocol on
platforms that support it. (Contributed by Karl Ding in :issue:`40291`.) platforms that support it. (Contributed by Karl Ding in :issue:`40291`.)
The socket module now has the :func:`socket.send_fds` and
:func:`socket.recv.fds` methods. (Contributed by Joannah Nanjekye, Shinya
Okano and Victor Stinner in :issue:`28724`.)
time time
---- ----
...@@ -566,7 +669,7 @@ which has nanosecond resolution, rather than ...@@ -566,7 +669,7 @@ which has nanosecond resolution, rather than
sys sys
--- ---
Add a new :attr:`sys.platlibdir` attribute: name of the platform-specific Added a new :attr:`sys.platlibdir` attribute: name of the platform-specific
library directory. It is used to build the path of standard library and the library directory. It is used to build the path of standard library and the
paths of installed extension modules. It is equal to ``"lib"`` on most paths of installed extension modules. It is equal to ``"lib"`` on most
platforms. On Fedora and SuSE, it is equal to ``"lib64"`` on 64-bit platforms. platforms. On Fedora and SuSE, it is equal to ``"lib64"`` on 64-bit platforms.
...@@ -630,7 +733,7 @@ Optimizations ...@@ -630,7 +733,7 @@ Optimizations
(Contributed by Serhiy Storchaka in :issue:`32856`.) (Contributed by Serhiy Storchaka in :issue:`32856`.)
* Optimize signal handling in multithreaded applications. If a thread different * Optimized signal handling in multithreaded applications. If a thread different
than the main thread gets a signal, the bytecode evaluation loop is no longer than the main thread gets a signal, the bytecode evaluation loop is no longer
interrupted at each bytecode instruction to check for pending signals which interrupted at each bytecode instruction to check for pending signals which
cannot be handled. Only the main thread of the main interpreter can handle cannot be handled. Only the main thread of the main interpreter can handle
...@@ -640,10 +743,36 @@ Optimizations ...@@ -640,10 +743,36 @@ Optimizations
until the main thread handles signals. until the main thread handles signals.
(Contributed by Victor Stinner in :issue:`40010`.) (Contributed by Victor Stinner in :issue:`40010`.)
* Optimize the :mod:`subprocess` module on FreeBSD using ``closefrom()``. * Optimized the :mod:`subprocess` module on FreeBSD using ``closefrom()``.
(Contributed by Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak and Victor (Contributed by Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak and Victor
Stinner in :issue:`38061`.) Stinner in :issue:`38061`.)
* :c:func:`PyLong_FromDouble` is now up to 1.87x faster for values that
fit into :c:type:`long`.
(Contributed by Sergey Fedoseev in :issue:`37986`.)
* A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`,
:class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using
:pep:`590` vectorcall protocol.
(Contributed by Dong-hee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.)
* Optimized :func:`~set.difference_update` for the case when the other set
is much larger than the base set.
(Suggested by Evgeny Kapun with code contributed by Michele Orrù in :issue:`8425`.)
* Python's small object allocator (``obmalloc.c``) now allows (no more than)
one empty arena to remain available for immediate reuse, without returning
it to the OS. This prevents thrashing in simple loops where an arena could
be created and destroyed anew on each iteration.
(Contributed by Tim Peters in :issue:`37257`.)
* :term:`floor division` of float operation now has a better performance. Also
the message of :exc:`ZeroDivisionError` for this operation is updated.
(Contributed by Dong-hee Na in :issue:`39434`.)
* Decoding short ASCII strings with UTF-8 and ascii codecs is now about
15% faster. (Contributed by Inada Naoki in :issue:`37348`.)
Here's a summary of performance improvements from Python 3.4 through Python 3.9: Here's a summary of performance improvements from Python 3.4 through Python 3.9:
.. code-block:: none .. code-block:: none
...@@ -699,10 +828,6 @@ in nanoseconds. The benchmarks were measured on an ...@@ -699,10 +828,6 @@ in nanoseconds. The benchmarks were measured on an
running the macOS 64-bit builds found at running the macOS 64-bit builds found at
`python.org <https://www.python.org/downloads/mac-osx/>`_. `python.org <https://www.python.org/downloads/mac-osx/>`_.
* A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`, :class:`frozenset`, :class:`list`, :class:`dict`)
are now sped up by using :pep:`590` vectorcall protocol.
(Contributed by Dong-hee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin in :issue:`37207`.)
Deprecated Deprecated
========== ==========
...@@ -784,6 +909,9 @@ Deprecated ...@@ -784,6 +909,9 @@ Deprecated
* Passing ``None`` as the first argument to the :func:`shlex.split` function * Passing ``None`` as the first argument to the :func:`shlex.split` function
has been deprecated. (Contributed by Zackery Spytz in :issue:`33262`.) has been deprecated. (Contributed by Zackery Spytz in :issue:`33262`.)
* :func:`smtpd.MailmanProxy` is now deprecated as it is unusable without
an external module, ``mailman``. (Contributed by Samuel Colvin in :issue:`35800`.)
* The :mod:`lib2to3` module now emits a :exc:`PendingDeprecationWarning`. * The :mod:`lib2to3` module now emits a :exc:`PendingDeprecationWarning`.
Python 3.9 switched to a PEG parser (see :pep:`617`), and Python 3.10 may Python 3.9 switched to a PEG parser (see :pep:`617`), and Python 3.10 may
include new language syntax that is not parsable by lib2to3's LL(1) parser. include new language syntax that is not parsable by lib2to3's LL(1) parser.
...@@ -798,6 +926,8 @@ Deprecated ...@@ -798,6 +926,8 @@ Deprecated
.. _LibCST: https://libcst.readthedocs.io/ .. _LibCST: https://libcst.readthedocs.io/
.. _parso: https://parso.readthedocs.io/ .. _parso: https://parso.readthedocs.io/
.. _removed-in-python-39:
Removed Removed
======= =======
...@@ -967,6 +1097,19 @@ Changes in the Python API ...@@ -967,6 +1097,19 @@ Changes in the Python API
of ``wchar_t`` since Python 3.3. of ``wchar_t`` since Python 3.3.
(Contributed by Inada Naoki in :issue:`34538`.) (Contributed by Inada Naoki in :issue:`34538`.)
* The :func:`logging.getLogger` API now returns the root logger when passed
the name ``'root'``, whereas previously it returned a non-root logger named
``'root'``. This could affect cases where user code explicitly wants a
non-root logger named ``'root'``, or instantiates a logger using
``logging.getLogger(__name__)`` in some top-level module called ``'root.py'``.
(Contributed by Vinay Sajip in :issue:`37742`.)
* Division handling of :class:`~pathlib.PurePath` now returns ``NotImplemented``
instead of raising a :exc:`TypeError` when passed something other than an
instance of ``str`` or :class:`~pathlib.PurePath`. This allows creating
compatible classes that don't inherit from those mentioned types.
(Contributed by Roger Aiudi in :issue:`34775`).
Changes in the C API Changes in the C API
-------------------- --------------------
...@@ -1017,6 +1160,11 @@ Changes in the C API ...@@ -1017,6 +1160,11 @@ Changes in the C API
(See :issue:`35810` and :issue:`40217` for more information.) (See :issue:`35810` and :issue:`40217` for more information.)
* The functions ``PyEval_CallObject``, ``PyEval_CallFunction``,
``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated.
Use :c:func:`PyObject_Call` and its variants instead.
(See more details in :issue:`29548`.)
CPython bytecode changes CPython bytecode changes
------------------------ ------------------------
...@@ -1025,11 +1173,21 @@ CPython bytecode changes ...@@ -1025,11 +1173,21 @@ CPython bytecode changes
correctly if the :exc:`AssertionError` exception was being shadowed. correctly if the :exc:`AssertionError` exception was being shadowed.
(Contributed by Zackery Spytz in :issue:`34880`.) (Contributed by Zackery Spytz in :issue:`34880`.)
* The :opcode:`COMPARE_OP` opcode was split into four distinct instructions:
* ``COMPARE_OP`` for rich comparisons
* ``IS_OP`` for 'is' and 'is not' tests
* ``CONTAINS_OP`` for 'in' and 'is not' tests
* ``JUMP_IF_NOT_EXC_MATCH`` for checking exceptions in 'try-except'
statements.
(Contributed by Mark Shannon in :issue:`39156`.)
Build Changes Build Changes
============= =============
* Add ``--with-platlibdir`` option to the ``configure`` script: name of the * Added ``--with-platlibdir`` option to the ``configure`` script: name of the
platform-specific library directory, stored in the new :attr:`sys.platlibdir` platform-specific library directory, stored in the new :attr:`sys.platlibdir`
attribute. See :attr:`sys.platlibdir` attribute for more information. attribute. See :attr:`sys.platlibdir` attribute for more information.
(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis
...@@ -1042,6 +1200,34 @@ Build Changes ...@@ -1042,6 +1200,34 @@ Build Changes
functions are now required to build Python. functions are now required to build Python.
(Contributed by Victor Stinner in :issue:`39395`.) (Contributed by Victor Stinner in :issue:`39395`.)
* On non-Windows platforms, creating ``bdist_wininst`` installers is now
officially unsupported. (See :issue:`10945` for more details.)
* When building Python on macOS from source, ``_tkinter`` now links with
non-system Tcl and Tk frameworks if they are installed in
``/Library/Frameworks``, as had been the case on older releases
of macOS. If a macOS SDK is explicitly configured, by using
``--enable-universalsdk=`` or ``-isysroot``, only the SDK itself is
searched. The default behavior can still be overridden with
``--with-tcltk-includes`` and ``--with-tcltk-libs``.
(Contributed by Ned Deily in :issue:`34956`.)
* Python can now be built for Windows 10 ARM64.
(Contributed by Steve Dower in :issue:`33125`.)
* Some individual tests are now skipped when ``--pgo`` is used. The tests
in question increased the PGO task time significantly and likely
didn't help improve optimization of the final executable. This
speeds up the task by a factor of about 15x. Running the full unit test
suite is slow. This change may result in a slightly less optimized build
since not as many code branches will be executed. If you are willing to
wait for the much slower build, the old behavior can be restored using
``./configure [..] PROFILE_TASK="-m test --pgo-extended"``. We make no
guarantees as to which PGO task set produces a faster build. Users who care
should run their own relevant benchmarks as results can depend on the
environment, workload, and compiler tool chain.
(See :issue:`36044` and :issue:`37707` for more details.)
C API Changes C API Changes
============= =============
...@@ -1049,29 +1235,29 @@ C API Changes ...@@ -1049,29 +1235,29 @@ C API Changes
New Features New Features
------------ ------------
* :pep:`573`: Add :c:func:`PyType_FromModuleAndSpec` to associate * :pep:`573`: Added :c:func:`PyType_FromModuleAndSpec` to associate
a module with a class; :c:func:`PyType_GetModule` and a module with a class; :c:func:`PyType_GetModule` and
:c:func:`PyType_GetModuleState` to retrieve the module and its state; and :c:func:`PyType_GetModuleState` to retrieve the module and its state; and
:c:data:`PyCMethod` and :c:data:`METH_METHOD` to allow a method to :c:data:`PyCMethod` and :c:data:`METH_METHOD` to allow a method to
access the class it was defined in. access the class it was defined in.
(Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.) (Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.)
* Add :c:func:`PyFrame_GetCode` function: get a frame code. * Added :c:func:`PyFrame_GetCode` function: get a frame code.
Add :c:func:`PyFrame_GetBack` function: get the frame next outer frame. Added :c:func:`PyFrame_GetBack` function: get the frame next outer frame.
(Contributed by Victor Stinner in :issue:`40421`.) (Contributed by Victor Stinner in :issue:`40421`.)
* Add :c:func:`PyFrame_GetLineNumber` to the limited C API. * Added :c:func:`PyFrame_GetLineNumber` to the limited C API.
(Contributed by Victor Stinner in :issue:`40421`.) (Contributed by Victor Stinner in :issue:`40421`.)
* Add :c:func:`PyThreadState_GetInterpreter` and * Added :c:func:`PyThreadState_GetInterpreter` and
:c:func:`PyInterpreterState_Get` functions to get the interpreter. :c:func:`PyInterpreterState_Get` functions to get the interpreter.
Add :c:func:`PyThreadState_GetFrame` function to get the current frame of a Added :c:func:`PyThreadState_GetFrame` function to get the current frame of a
Python thread state. Python thread state.
Add :c:func:`PyThreadState_GetID` function: get the unique identifier of a Added :c:func:`PyThreadState_GetID` function: get the unique identifier of a
Python thread state. Python thread state.
(Contributed by Victor Stinner in :issue:`39947`.) (Contributed by Victor Stinner in :issue:`39947`.)
* Add a new public :c:func:`PyObject_CallNoArgs` function to the C API, which * Added a new public :c:func:`PyObject_CallNoArgs` function to the C API, which
calls a callable Python object without any arguments. It is the most efficient calls a callable Python object without any arguments. It is the most efficient
way to call a callable Python object without any argument. way to call a callable Python object without any argument.
(Contributed by Victor Stinner in :issue:`37194`.) (Contributed by Victor Stinner in :issue:`37194`.)
...@@ -1093,11 +1279,15 @@ New Features ...@@ -1093,11 +1279,15 @@ New Features
to a module. to a module.
(Contributed by Dong-hee Na in :issue:`40024`.) (Contributed by Dong-hee Na in :issue:`40024`.)
* Add the functions :c:func:`PyObject_GC_IsTracked` and * Added the functions :c:func:`PyObject_GC_IsTracked` and
:c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if
Python objects are being currently tracked or have been already finalized by Python objects are being currently tracked or have been already finalized by
the garbage collector respectively. (Contributed by Pablo Galindo in the garbage collector respectively.
:issue:`40241`.) (Contributed by Pablo Galindo Salgado in :issue:`40241`.)
* Added :c:func:`_PyObject_FunctionStr` to get a user-friendly string
representation of a function-like object.
(Patch by Jeroen Demeyer in :issue:`37645`.)
Porting to Python 3.9 Porting to Python 3.9
...@@ -1144,10 +1334,44 @@ Porting to Python 3.9 ...@@ -1144,10 +1334,44 @@ Porting to Python 3.9
Python 3.3. Python 3.3.
(Contributed by Inada Naoki in :issue:`36346`.) (Contributed by Inada Naoki in :issue:`36346`.)
* The :c:func:`Py_FatalError` function is replaced with a macro which logs
automatically the name of the current function, unless the
``Py_LIMITED_API`` macro is defined.
(Contributed by Victor Stinner in :issue:`39882`.)
* The vectorcall protocol now requires that the caller passes only strings as
keyword names. (See :issue:`37540` for more information.)
* Implementation details of a number of macros and functions are now hidden:
* :c:func:`PyObject_IS_GC` macro was converted to a function.
* The :c:func:`PyObject_NEW` macro becomes an alias to the
:c:func:`PyObject_New` macro, and the :c:func:`PyObject_NEW_VAR` macro
becomes an alias to the :c:func:`PyObject_NewVar` macro. They no longer
access directly the :c:member:`PyTypeObject.tp_basicsize` member.
* :c:func:`PyType_HasFeature` now always calls :c:func:`PyType_GetFlags`.
Previously, it accessed directly the :c:member:`PyTypeObject.tp_flags`
member when the limited C API was not used.
* :c:func:`PyObject_GET_WEAKREFS_LISTPTR` macro was converted to a function:
the macro accessed directly the :c:member:`PyTypeObject.tp_weaklistoffset`
member.
* :c:func:`PyObject_CheckBuffer` macro was converted to a function: the macro
accessed directly the :c:member:`PyTypeObject.tp_as_buffer` member.
* :c:func:`PyIndex_Check` is now always declared as an opaque function to hide
implementation details: removed the ``PyIndex_Check()`` macro. The macro accessed
directly the :c:member:`PyTypeObject.tp_as_number` member.
(See :issue:`40170` for more details.)
Removed Removed
------- -------
* Exclude ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of * Excluded ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of
``pyfpe.h`` from the limited C API. ``pyfpe.h`` from the limited C API.
(Contributed by Victor Stinner in :issue:`38835`.) (Contributed by Victor Stinner in :issue:`38835`.)
...@@ -1158,7 +1382,7 @@ Removed ...@@ -1158,7 +1382,7 @@ Removed
* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined): * Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
* Exclude the following functions from the limited C API: * Excluded the following functions from the limited C API:
* ``PyThreadState_DeleteCurrent()`` * ``PyThreadState_DeleteCurrent()``
(Contributed by Joannah Nanjekye in :issue:`37878`.) (Contributed by Joannah Nanjekye in :issue:`37878`.)
...@@ -1175,7 +1399,7 @@ Removed ...@@ -1175,7 +1399,7 @@ Removed
* ``Py_TRASHCAN_SAFE_BEGIN`` * ``Py_TRASHCAN_SAFE_BEGIN``
* ``Py_TRASHCAN_SAFE_END`` * ``Py_TRASHCAN_SAFE_END``
* Move following functions and definitions to the internal C API: * Moved following functions and definitions to the internal C API:
* ``_PyDebug_PrintTotalRefs()`` * ``_PyDebug_PrintTotalRefs()``
* ``_Py_PrintReferences()`` * ``_Py_PrintReferences()``
...@@ -1185,12 +1409,12 @@ Removed ...@@ -1185,12 +1409,12 @@ Removed
(Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.) (Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
* Remove ``_PyRuntime.getframe`` hook and remove ``_PyThreadState_GetFrame`` * Removed ``_PyRuntime.getframe`` hook and removed ``_PyThreadState_GetFrame``
macro which was an alias to ``_PyRuntime.getframe``. They were only exposed macro which was an alias to ``_PyRuntime.getframe``. They were only exposed
by the internal C API. Remove also ``PyThreadFrameGetter`` type. by the internal C API. Removed also ``PyThreadFrameGetter`` type.
(Contributed by Victor Stinner in :issue:`39946`.) (Contributed by Victor Stinner in :issue:`39946`.)
* Remove the following functions from the C API. Call :c:func:`PyGC_Collect` * Removed the following functions from the C API. Call :c:func:`PyGC_Collect`
explicitly to clear all free lists. explicitly to clear all free lists.
(Contributed by Inada Naoki and Victor Stinner in :issue:`37340`, (Contributed by Inada Naoki and Victor Stinner in :issue:`37340`,
:issue:`38896` and :issue:`40428`.) :issue:`38896` and :issue:`40428`.)
...@@ -1209,10 +1433,20 @@ Removed ...@@ -1209,10 +1433,20 @@ Removed
* ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in * ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in
Python 3.3. Python 3.3.
* Remove ``_PyUnicode_ClearStaticStrings()`` function. * Removed ``_PyUnicode_ClearStaticStrings()`` function.
(Contributed by Victor Stinner in :issue:`39465`.) (Contributed by Victor Stinner in :issue:`39465`.)
* Remove ``Py_UNICODE_MATCH``. It has been deprecated by :pep:`393`, and * Removed ``Py_UNICODE_MATCH``. It has been deprecated by :pep:`393`, and
broken since Python 3.3. The :c:func:`PyUnicode_Tailmatch` function can be broken since Python 3.3. The :c:func:`PyUnicode_Tailmatch` function can be
used instead. used instead.
(Contributed by Inada Naoki in :issue:`36346`.) (Contributed by Inada Naoki in :issue:`36346`.)
* Cleaned header files of interfaces defined but with no implementation.
The public API symbols being removed are:
``_PyBytes_InsertThousandsGroupingLocale``,
``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``,
``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``,
``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``,
``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``,
``PyNoArgsFunction``.
(Contributed by Pablo Galindo Salgado in :issue:`39372`.)
...@@ -19,11 +19,11 @@ ...@@ -19,11 +19,11 @@
#define PY_MAJOR_VERSION 3 #define PY_MAJOR_VERSION 3
#define PY_MINOR_VERSION 9 #define PY_MINOR_VERSION 9
#define PY_MICRO_VERSION 0 #define PY_MICRO_VERSION 0
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL
#define PY_RELEASE_SERIAL 2 #define PY_RELEASE_SERIAL 0
/* Version as a string */ /* Version as a string */
#define PY_VERSION "3.9.0rc2+" #define PY_VERSION "3.9.0"
/*--end constants--*/ /*--end constants--*/
/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
......
This diff is collapsed.
.. bpo: 41815
.. date: 2020-09-19-23-14-54
.. nonce: RNpuX3
.. release date: 2020-10-04
.. section: Library
Fix SQLite3 segfault when backing up closed database. Patch contributed by
Peter David McCormick.
..
.. bpo: 41662
.. date: 2020-08-30-21-38-57
.. nonce: 6e9iZn
.. section: Library
No longer override exceptions raised in ``__len__()`` of a sequence of
parameters in :mod:`sqlite3` with :exc:`~sqlite3.ProgrammingError`.
..
.. bpo: 41662
.. date: 2020-08-29-16-07-36
.. nonce: Mn79zh
.. section: Library
Fixed crash when mutate list of parameters during iteration in
:mod:`sqlite3`.
..
.. bpo: 39728
.. date: 2020-02-24-10-58-34
.. nonce: kOOaHn
.. section: Library
fix default `_missing_` so a duplicate `ValueError` is not set as the
`__context__` of the original `ValueError`
..
.. bpo: 41602
.. date: 2020-08-25-19-25-36
.. nonce: Z64s0I
.. section: Tests
Add tests for SIGINT handling in the runpy module.
..
.. bpo: 38249
.. date: 2020-09-28-21-56-51
.. nonce: uzMCaZ
.. section: Build
Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() if only the
compiler is able to use it. Patch by Dong-hee Na.
Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() if only the
compiler is able to use it. Patch by Dong-hee Na.
fix default `_missing_` so a duplicate `ValueError` is not set as the `__context__` of the original `ValueError`
Fixed crash when mutate list of parameters during iteration in :mod:`sqlite3`.
No longer override exceptions raised in ``__len__()`` of a sequence of
parameters in :mod:`sqlite3` with :exc:`~sqlite3.ProgrammingError`.
Fix SQLite3 segfault when backing up closed database. Patch contributed by
Peter David McCormick.
Add tests for SIGINT handling in the runpy module.
This is Python version 3.9.0 release candidate 2 This is Python version 3.9.0
================================================ ============================
.. image:: https://travis-ci.org/python/cpython.svg?branch=3.9 .. image:: https://travis-ci.org/python/cpython.svg?branch=3.9
:alt: CPython build status on Travis CI :alt: CPython build status on Travis CI
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment