mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Python 3.9.0
This commit is contained in:
parent
e8165e79f5
commit
9cf6752276
11 changed files with 910 additions and 557 deletions
|
@ -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 @@
|
||||||
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
|
||||||
.. 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-sized items next.
|
* :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.
|
||||||
|
|
||||||
|
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
|
||||||
<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
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
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
|
||||||
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:
|
||||||
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
|
||||||
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
|
||||||
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.
|
||||||
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
|
||||||
: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.
|
||||||
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
|
||||||
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``
|
||||||
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
|
||||||
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.
|
||||||
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
|
||||||
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
|
||||||
: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.
|
||||||
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.
|
||||||
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
|
||||||
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
|
||||||
|
|
||||||
(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
|
||||||
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
|
||||||
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
|
||||||
* 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
|
||||||
.. _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
|
||||||
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
|
||||||
|
|
||||||
(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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
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
|
||||||
|
|
||||||
* 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
|
||||||
* ``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
|
||||||
|
|
||||||
(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
|
||||||
* ``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 @@
|
||||||
#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.
|
||||||
|
|
File diff suppressed because it is too large
Load diff
57
Misc/NEWS.d/3.9.0.rst
Normal file
57
Misc/NEWS.d/3.9.0.rst
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
.. 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.
|
|
@ -1,2 +0,0 @@
|
||||||
Update :c:macro:`Py_UNREACHABLE` to use __builtin_unreachable() if only the
|
|
||||||
compiler is able to use it. Patch by Dong-hee Na.
|
|
|
@ -1 +0,0 @@
|
||||||
fix default `_missing_` so a duplicate `ValueError` is not set as the `__context__` of the original `ValueError`
|
|
|
@ -1 +0,0 @@
|
||||||
Fixed crash when mutate list of parameters during iteration in :mod:`sqlite3`.
|
|
|
@ -1,2 +0,0 @@
|
||||||
No longer override exceptions raised in ``__len__()`` of a sequence of
|
|
||||||
parameters in :mod:`sqlite3` with :exc:`~sqlite3.ProgrammingError`.
|
|
|
@ -1,2 +0,0 @@
|
||||||
Fix SQLite3 segfault when backing up closed database. Patch contributed by
|
|
||||||
Peter David McCormick.
|
|
|
@ -1 +0,0 @@
|
||||||
Add tests for SIGINT handling in the runpy module.
|
|
|
@ -1,5 +1,5 @@
|
||||||
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue