bpo-37759: Polish What's New in Python 3.8. (#16769)

This commit is contained in:
Serhiy Storchaka 2019-10-14 16:10:40 +03:00 committed by Łukasz Langa
parent 19d6842c15
commit 298439ce3f
1 changed files with 123 additions and 88 deletions

View File

@ -212,6 +212,7 @@ subdirectories).
(Contributed by Carl Meyer in :issue:`33499`.) (Contributed by Carl Meyer in :issue:`33499`.)
Debug build uses the same ABI as release build Debug build uses the same ABI as release build
----------------------------------------------- -----------------------------------------------
@ -285,6 +286,7 @@ calculations can be shown::
(Contributed by Eric V. Smith and Larry Hastings in :issue:`36817`.) (Contributed by Eric V. Smith and Larry Hastings in :issue:`36817`.)
PEP 587: Python Initialization Configuration PEP 587: Python Initialization Configuration
-------------------------------------------- --------------------------------------------
@ -411,7 +413,8 @@ Other Language Changes
* The syntax allowed for keyword names in function calls was further * The syntax allowed for keyword names in function calls was further
restricted. In particular, ``f((keyword)=arg)`` is no longer allowed. It was restricted. In particular, ``f((keyword)=arg)`` is no longer allowed. It was
never intended to permit more than a bare name on the left-hand side of a never intended to permit more than a bare name on the left-hand side of a
keyword argument assignment term. See :issue:`34641`. keyword argument assignment term.
(Contributed by Benjamin Peterson in :issue:`34641`.)
* Generalized iterable unpacking in :keyword:`yield` and * Generalized iterable unpacking in :keyword:`yield` and
:keyword:`return` statements no longer requires enclosing parentheses. :keyword:`return` statements no longer requires enclosing parentheses.
@ -425,7 +428,6 @@ Other Language Changes
>>> parse('simpsons homer marge bart lisa sally') >>> parse('simpsons homer marge bart lisa sally')
('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'sally') ('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'sally')
(Contributed by David Cuthbert and Jordan Chapman in :issue:`32117`.) (Contributed by David Cuthbert and Jordan Chapman in :issue:`32117`.)
* When a comma is missed in code such as ``[(10, 20) (30, 40)]``, the * When a comma is missed in code such as ``[(10, 20) (30, 40)]``, the
@ -521,6 +523,8 @@ Other Language Changes
'łukasz langa': 'Łukasz Langa', 'łukasz langa': 'Łukasz Langa',
'walter dörwald': 'Walter Dörwald'} 'walter dörwald': 'Walter Dörwald'}
(Contributed by Jörn Heissler in :issue:`35224`.)
New Modules New Modules
=========== ===========
@ -544,13 +548,12 @@ New Modules
PackagePath('requests-2.22.0.dist-info/RECORD'), PackagePath('requests-2.22.0.dist-info/RECORD'),
PackagePath('requests-2.22.0.dist-info/WHEEL')] PackagePath('requests-2.22.0.dist-info/WHEEL')]
(Contributed in :issue:`34632` by Barry Warsaw and Jason R. Coombs.) (Contributed by Barry Warsaw and Jason R. Coombs in :issue:`34632`.)
Improved Modules Improved Modules
================ ================
ast ast
--- ---
@ -558,6 +561,11 @@ AST nodes now have ``end_lineno`` and ``end_col_offset`` attributes,
which give the precise location of the end of the node. (This only which give the precise location of the end of the node. (This only
applies to nodes that have ``lineno`` and ``col_offset`` attributes.) applies to nodes that have ``lineno`` and ``col_offset`` attributes.)
New function :func:`ast.get_source_segment` returns the source code
for a specific AST node.
(Contributed by Ivan Levkivskyi in :issue:`33416`.)
The :func:`ast.parse` function has some new flags: The :func:`ast.parse` function has some new flags:
* ``type_comments=True`` causes it to return the text of :pep:`484` and * ``type_comments=True`` causes it to return the text of :pep:`484` and
@ -570,8 +578,7 @@ The :func:`ast.parse` function has some new flags:
version. (For example, ``feature_version=(3, 4)`` will treat version. (For example, ``feature_version=(3, 4)`` will treat
``async`` and ``await`` as non-reserved words.) ``async`` and ``await`` as non-reserved words.)
New function :func:`ast.get_source_segment` returns the source code (Contributed by Guido van Rossum in :issue:`35766`.)
for a specific AST node.
asyncio asyncio
@ -596,7 +603,6 @@ The :func:`compile` built-in has been improved to accept the
:func:`compile` will allow top-level ``await``, ``async for`` and ``async with`` :func:`compile` will allow top-level ``await``, ``async for`` and ``async with``
constructs that are usually considered invalid syntax. Asynchronous code object constructs that are usually considered invalid syntax. Asynchronous code object
marked with the ``CO_COROUTINE`` flag may then be returned. marked with the ``CO_COROUTINE`` flag may then be returned.
(Contributed by Matthias Bussonnier in :issue:`34616`) (Contributed by Matthias Bussonnier in :issue:`34616`)
@ -627,6 +633,7 @@ to specify flags for the underlying ``LoadLibraryEx`` call. The default flags ar
set to only load DLL dependencies from trusted locations, including the path set to only load DLL dependencies from trusted locations, including the path
where the DLL is stored (if a full or partial path is used to load the initial where the DLL is stored (if a full or partial path is used to load the initial
DLL) and paths added by :func:`~os.add_dll_directory`. DLL) and paths added by :func:`~os.add_dll_directory`.
(Contributed by Steve Dower in :issue:`36085`.)
datetime datetime
@ -660,8 +667,8 @@ gc
-- --
:func:`~gc.get_objects` can now receive an optional *generation* parameter :func:`~gc.get_objects` can now receive an optional *generation* parameter
indicating a generation to get objects from. Contributed in indicating a generation to get objects from.
:issue:`36016` by Pablo Galindo. (Contributed by Pablo Galindo in :issue:`36016`.)
gettext gettext
@ -723,6 +730,8 @@ for :func:`property`, :func:`classmethod`, and :func:`staticmethod`::
self.bit_rate = round(bit_rate / 1000.0, 1) self.bit_rate = round(bit_rate / 1000.0, 1)
self.duration = ceil(duration) self.duration = ceil(duration)
(Contributed by Raymond Hettinger in :issue:`36326`.)
io io
-- --
@ -780,7 +789,7 @@ multiprocessing
--------------- ---------------
Added new :mod:`multiprocessing.shared_memory` module. Added new :mod:`multiprocessing.shared_memory` module.
(Contributed Davin Potts in :issue:`35813`.) (Contributed by Davin Potts in :issue:`35813`.)
On macOS, the *spawn* start method is now used by default. On macOS, the *spawn* start method is now used by default.
(Contributed by Victor Stinner in :issue:`33725`.) (Contributed by Victor Stinner in :issue:`33725`.)
@ -792,6 +801,7 @@ os
Added new function :func:`~os.add_dll_directory` on Windows for providing Added new function :func:`~os.add_dll_directory` on Windows for providing
additional search paths for native dependencies when importing extension additional search paths for native dependencies when importing extension
modules or loading DLLs using :mod:`ctypes`. modules or loading DLLs using :mod:`ctypes`.
(Contributed by Steve Dower in :issue:`36085`.)
A new :func:`os.memfd_create` function was added to wrap the A new :func:`os.memfd_create` function was added to wrap the
``memfd_create()`` syscall. ``memfd_create()`` syscall.
@ -812,6 +822,8 @@ and so code that checks ``islink`` first will continue to treat junctions as
directories, while code that handles errors from :func:`os.readlink` may now directories, while code that handles errors from :func:`os.readlink` may now
treat junctions as links. treat junctions as links.
(Contributed by Steve Dower in :issue:`37834`.)
os.path os.path
------- -------
@ -827,6 +839,7 @@ characters or bytes unrepresentable at the OS level.
:func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE` :func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE`
environment variable and does not use :envvar:`HOME`, which is not normally set environment variable and does not use :envvar:`HOME`, which is not normally set
for regular user accounts. for regular user accounts.
(Contributed by Anthony Sottile in :issue:`36264`.)
:func:`~os.path.isdir` on Windows no longer returns true for a link to a :func:`~os.path.isdir` on Windows no longer returns true for a link to a
non-existent directory. non-existent directory.
@ -834,6 +847,8 @@ non-existent directory.
:func:`~os.path.realpath` on Windows now resolves reparse points, including :func:`~os.path.realpath` on Windows now resolves reparse points, including
symlinks and directory junctions. symlinks and directory junctions.
(Contributed by Steve Dower in :issue:`37834`.)
pathlib pathlib
------- -------
@ -883,11 +898,12 @@ py_compile
shlex shlex
---------- -----
The new :func:`shlex.join` function acts as the inverse of :func:`shlex.split`. The new :func:`shlex.join` function acts as the inverse of :func:`shlex.split`.
(Contributed by Bo Bayles in :issue:`32102`.) (Contributed by Bo Bayles in :issue:`32102`.)
shutil shutil
------ ------
@ -901,6 +917,7 @@ inherited from the corresponding change to the :mod:`tarfile` module.
:func:`shutil.rmtree` on Windows now removes directory junctions without :func:`shutil.rmtree` on Windows now removes directory junctions without
recursively removing their contents first. recursively removing their contents first.
(Contributed by Steve Dower in :issue:`37834`.)
socket socket
@ -995,18 +1012,18 @@ in a standardized and extensible format, and offers several other benefits.
threading threading
--------- ---------
* Add a new :func:`threading.excepthook` function which handles uncaught Add a new :func:`threading.excepthook` function which handles uncaught
:meth:`threading.Thread.run` exception. It can be overridden to control how :meth:`threading.Thread.run` exception. It can be overridden to control how
uncaught :meth:`threading.Thread.run` exceptions are handled. uncaught :meth:`threading.Thread.run` exceptions are handled.
(Contributed by Victor Stinner in :issue:`1230540`.) (Contributed by Victor Stinner in :issue:`1230540`.)
* Add a new Add a new :func:`threading.get_native_id` function and
:func:`threading.get_native_id` function and a :data:`~threading.Thread.native_id` a :data:`~threading.Thread.native_id`
attribute to the :class:`threading.Thread` class. These return the native attribute to the :class:`threading.Thread` class. These return the native
integral Thread ID of the current thread assigned by the kernel. integral Thread ID of the current thread assigned by the kernel.
This feature is only available on certain platforms, see This feature is only available on certain platforms, see
:func:`get_native_id <threading.get_native_id>` for more information. :func:`get_native_id <threading.get_native_id>` for more information.
(Contributed by Jake Tesler in :issue:`36084`.) (Contributed by Jake Tesler in :issue:`36084`.)
tokenize tokenize
@ -1017,6 +1034,7 @@ provided with input that does not have a trailing new line. This behavior
now matches what the C tokenizer does internally. now matches what the C tokenizer does internally.
(Contributed by Ammar Askar in :issue:`33899`.) (Contributed by Ammar Askar in :issue:`33899`.)
tkinter tkinter
------- -------
@ -1036,6 +1054,7 @@ The :class:`tkinter.PhotoImage` class now has
:meth:`~tkinter.PhotoImage.transparency_set` methods. (Contributed by :meth:`~tkinter.PhotoImage.transparency_set` methods. (Contributed by
Zackery Spytz in :issue:`25451`.) Zackery Spytz in :issue:`25451`.)
time time
---- ----
@ -1084,95 +1103,98 @@ The :mod:`typing` module incorporates several new features:
unicodedata unicodedata
----------- -----------
* The :mod:`unicodedata` module has been upgraded to use the `Unicode 12.1.0 The :mod:`unicodedata` module has been upgraded to use the `Unicode 12.1.0
<http://blog.unicode.org/2019/05/unicode-12-1-en.html>`_ release. <http://blog.unicode.org/2019/05/unicode-12-1-en.html>`_ release.
* New function :func:`~unicodedata.is_normalized` can be used to verify a string New function :func:`~unicodedata.is_normalized` can be used to verify a string
is in a specific normal form, often much faster than by actually normalizing is in a specific normal form, often much faster than by actually normalizing
the string. (Contributed by Max Belanger, David Euresti, and Greg Price in the string. (Contributed by Max Belanger, David Euresti, and Greg Price in
:issue:`32285` and :issue:`37966`). :issue:`32285` and :issue:`37966`).
unittest unittest
-------- --------
* Added :class:`AsyncMock` to support an asynchronous version of :class:`Mock`. Added :class:`AsyncMock` to support an asynchronous version of :class:`Mock`.
Appropriate new assert functions for testing have been added as well. Appropriate new assert functions for testing have been added as well.
(Contributed by Lisa Roach in :issue:`26467`). (Contributed by Lisa Roach in :issue:`26467`).
* Added :func:`~unittest.addModuleCleanup()` and Added :func:`~unittest.addModuleCleanup()` and
:meth:`~unittest.TestCase.addClassCleanup()` to unittest to support :meth:`~unittest.TestCase.addClassCleanup()` to unittest to support
cleanups for :func:`~unittest.setUpModule()` and cleanups for :func:`~unittest.setUpModule()` and
:meth:`~unittest.TestCase.setUpClass()`. :meth:`~unittest.TestCase.setUpClass()`.
(Contributed by Lisa Roach in :issue:`24412`.) (Contributed by Lisa Roach in :issue:`24412`.)
* Several mock assert functions now also print a list of actual calls upon Several mock assert functions now also print a list of actual calls upon
failure. (Contributed by Petter Strandmark in :issue:`35047`.) failure. (Contributed by Petter Strandmark in :issue:`35047`.)
* :mod:`unittest` module gained support for coroutines to be used as test cases :mod:`unittest` module gained support for coroutines to be used as test cases
with :class:`unittest.IsolatedAsyncioTestCase`. with :class:`unittest.IsolatedAsyncioTestCase`.
(Contributed by Andrew Svetlov in :issue:`32972`.) (Contributed by Andrew Svetlov in :issue:`32972`.)
Example:: Example::
import unittest import unittest
class TestRequest(unittest.IsolatedAsyncioTestCase): class TestRequest(unittest.IsolatedAsyncioTestCase):
async def asyncSetUp(self): async def asyncSetUp(self):
self.connection = await AsyncConnection() self.connection = await AsyncConnection()
async def test_get(self): async def test_get(self):
response = await self.connection.get("https://example.com") response = await self.connection.get("https://example.com")
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
async def asyncTearDown(self): async def asyncTearDown(self):
await self.connection.close() await self.connection.close()
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()
venv venv
---- ----
* :mod:`venv` now includes an ``Activate.ps1`` script on all platforms for :mod:`venv` now includes an ``Activate.ps1`` script on all platforms for
activating virtual environments under PowerShell Core 6.1. activating virtual environments under PowerShell Core 6.1.
(Contributed by Brett Cannon in :issue:`32718`.) (Contributed by Brett Cannon in :issue:`32718`.)
weakref weakref
------- -------
* The proxy objects returned by :func:`weakref.proxy` now support the matrix The proxy objects returned by :func:`weakref.proxy` now support the matrix
multiplication operators ``@`` and ``@=`` in addition to the other multiplication operators ``@`` and ``@=`` in addition to the other
numeric operators. (Contributed by Mark Dickinson in :issue:`36669`.) numeric operators. (Contributed by Mark Dickinson in :issue:`36669`.)
xml xml
--- ---
* As mitigation against DTD and external entity retrieval, the As mitigation against DTD and external entity retrieval, the
:mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process :mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process
external entities by default. external entities by default.
(Contributed by Christian Heimes in :issue:`17239`.) (Contributed by Christian Heimes in :issue:`17239`.)
* The ``.find*()`` methods in the :mod:`xml.etree.ElementTree` module The ``.find*()`` methods in the :mod:`xml.etree.ElementTree` module
support wildcard searches like ``{*}tag`` which ignores the namespace support wildcard searches like ``{*}tag`` which ignores the namespace
and ``{namespace}*`` which returns all tags in the given namespace. and ``{namespace}*`` which returns all tags in the given namespace.
(Contributed by Stefan Behnel in :issue:`28238`.) (Contributed by Stefan Behnel in :issue:`28238`.)
* The :mod:`xml.etree.ElementTree` module provides a new function The :mod:`xml.etree.ElementTree` module provides a new function
:func:`xml.etree.ElementTree.canonicalize()` that implements C14N 2.0. :func:`xml.etree.ElementTree.canonicalize()` that implements C14N 2.0.
(Contributed by Stefan Behnel in :issue:`13611`.) (Contributed by Stefan Behnel in :issue:`13611`.)
The target object of :class:`xml.etree.ElementTree.XMLParser` can
receive namespace declaration events through the new callback methods
``start_ns()`` and ``end_ns()``. Additionally, the
:class:`xml.etree.ElementTree.TreeBuilder` target can be configured
to process events about comments and processing instructions to include
them in the generated tree.
(Contributed by Stefan Behnel in :issue:`36676` and :issue:`36673`.)
* The target object of :class:`xml.etree.ElementTree.XMLParser` can
receive namespace declaration events through the new callback methods
``start_ns()`` and ``end_ns()``. Additionally, the
:class:`xml.etree.ElementTree.TreeBuilder` target can be configured
to process events about comments and processing instructions to include
them in the generated tree.
(Contributed by Stefan Behnel in :issue:`36676` and :issue:`36673`.)
Optimizations Optimizations
============= =============
@ -1220,6 +1242,7 @@ Optimizations
(Contributed by Inada Naoki in :issue:`33597`) (Contributed by Inada Naoki in :issue:`33597`)
* :class:`uuid.UUID` now uses ``__slots__`` to reduce its memory footprint. * :class:`uuid.UUID` now uses ``__slots__`` to reduce its memory footprint.
(Contributed by Wouter Bolsterlee and Tal Einat in :issue:`30977`)
* Improved performance of :func:`operator.itemgetter` by 33%. Optimized * Improved performance of :func:`operator.itemgetter` by 33%. Optimized
argument handling and added a fast path for the common case of a single argument handling and added a fast path for the common case of a single
@ -1412,7 +1435,8 @@ Deprecated
for the ``l*gettext()`` functions. for the ``l*gettext()`` functions.
(Contributed by Serhiy Storchaka in :issue:`33710`.) (Contributed by Serhiy Storchaka in :issue:`33710`.)
* The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` has been deprecated. * The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread`
has been deprecated.
(Contributed by Dong-hee Na in :issue:`35283`.) (Contributed by Dong-hee Na in :issue:`35283`.)
* Many builtin and extension functions that take integer arguments will * Many builtin and extension functions that take integer arguments will
@ -1516,7 +1540,7 @@ Changes in Python behavior
* The compiler now produces a :exc:`SyntaxWarning` when identity checks * The compiler now produces a :exc:`SyntaxWarning` when identity checks
(``is`` and ``is not``) are used with certain types of literals (``is`` and ``is not``) are used with certain types of literals
(e.g. strings, ints). These can often work by accident in CPython, (e.g. strings, numbers). These can often work by accident in CPython,
but are not guaranteed by the language spec. The warning advises users but are not guaranteed by the language spec. The warning advises users
to use equality tests (``==`` and ``!=``) instead. to use equality tests (``==`` and ``!=``) instead.
(Contributed by Serhiy Storchaka in :issue:`34850`.) (Contributed by Serhiy Storchaka in :issue:`34850`.)
@ -1545,6 +1569,8 @@ Changes in Python behavior
:c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`. If this :c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`. If this
behavior is not desired, guard the call by checking :c:func:`_Py_IsFinalizing` behavior is not desired, guard the call by checking :c:func:`_Py_IsFinalizing`
or :c:func:`sys.is_finalizing`. or :c:func:`sys.is_finalizing`.
(Contributed by Joannah Nanjekye in :issue:`36475`.)
Changes in the Python API Changes in the Python API
------------------------- -------------------------
@ -1569,6 +1595,7 @@ Changes in the Python API
* The :meth:`imap.IMAP4.logout` method no longer ignores silently arbitrary * The :meth:`imap.IMAP4.logout` method no longer ignores silently arbitrary
exceptions. exceptions.
(Contributed by Victor Stinner in :issue:`36348`.)
* The function :func:`platform.popen` has been removed, after having been deprecated since * The function :func:`platform.popen` has been removed, after having been deprecated since
Python 3.3: use :func:`os.popen` instead. Python 3.3: use :func:`os.popen` instead.
@ -1657,8 +1684,9 @@ Changes in the Python API
* :func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE` * :func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE`
environment variable and does not use :envvar:`HOME`, which is not normally environment variable and does not use :envvar:`HOME`, which is not normally
set for regular user accounts. set for regular user accounts.
(Contributed by Anthony Sottile in :issue:`36264`.)
* The Exception :class:`asyncio.CancelledError` now inherits from * The exception :class:`asyncio.CancelledError` now inherits from
:class:`BaseException` rather than a :class:`Exception`. :class:`BaseException` rather than a :class:`Exception`.
(Contributed by Yury Selivanov in :issue:`13528`.) (Contributed by Yury Selivanov in :issue:`13528`.)
@ -1675,7 +1703,7 @@ Changes in the Python API
directory while loading your library. Note that Windows 7 users will need to directory while loading your library. Note that Windows 7 users will need to
ensure that Windows Update KB2533625 has been installed (this is also verified ensure that Windows Update KB2533625 has been installed (this is also verified
by the installer). by the installer).
(See :issue:`36085`.) (Contributed by Steve Dower in :issue:`36085`.)
* The header files and functions related to pgen have been removed after its * The header files and functions related to pgen have been removed after its
replacement by a pure Python implementation. (Contributed by Pablo Galindo replacement by a pure Python implementation. (Contributed by Pablo Galindo
@ -1696,6 +1724,7 @@ Changes in the C API
field. It should be initialized to ``PY_MINOR_VERSION``. The field is ignored field. It should be initialized to ``PY_MINOR_VERSION``. The field is ignored
by default, and is used if and only if ``PyCF_ONLY_AST`` flag is set in by default, and is used if and only if ``PyCF_ONLY_AST`` flag is set in
*cf_flags*. *cf_flags*.
(Contributed by Guido van Rossum in :issue:`35766`.)
* The :c:func:`PyEval_ReInitThreads` function has been removed from the C API. * The :c:func:`PyEval_ReInitThreads` function has been removed from the C API.
It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child` It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child`
@ -1742,7 +1771,9 @@ Changes in the C API
:c:func:`PyObject_GC_NewVar`, or any other custom allocator that uses :c:func:`PyObject_GC_NewVar`, or any other custom allocator that uses
:c:func:`PyObject_Init` or :c:func:`PyObject_INIT`. :c:func:`PyObject_Init` or :c:func:`PyObject_INIT`.
Example:: Example:
.. code-block:: c
static foo_struct * static foo_struct *
foo_new(PyObject *type) { foo_new(PyObject *type) {
@ -1759,7 +1790,9 @@ Changes in the C API
* Ensure that all custom ``tp_dealloc`` functions of heap-allocated types * Ensure that all custom ``tp_dealloc`` functions of heap-allocated types
decrease the type's reference count. decrease the type's reference count.
Example:: Example:
.. code-block:: c
static void static void
foo_dealloc(foo_struct *instance) { foo_dealloc(foo_struct *instance) {
@ -1776,7 +1809,9 @@ Changes in the C API
* The :c:macro:`Py_DEPRECATED()` macro has been implemented for MSVC. * The :c:macro:`Py_DEPRECATED()` macro has been implemented for MSVC.
The macro now must be placed before the symbol name. The macro now must be placed before the symbol name.
Example:: Example:
.. code-block:: c
Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void); Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void);
@ -1797,12 +1832,12 @@ Changes in the C API
* The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept * The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept
two additional ``int`` arguments *end_lineno* and *end_col_offset*. two additional ``int`` arguments *end_lineno* and *end_col_offset*.
.. highlight:: shell
* The :file:`libpython38.a` file to allow MinGW tools to link directly against * The :file:`libpython38.a` file to allow MinGW tools to link directly against
:file:`python38.dll` is no longer included in the regular Windows distribution. :file:`python38.dll` is no longer included in the regular Windows distribution.
If you require this file, it may be generated with the ``gendef`` and If you require this file, it may be generated with the ``gendef`` and
``dlltool`` tools, which are part of the MinGW binutils package:: ``dlltool`` tools, which are part of the MinGW binutils package:
.. code-block:: shell
gendef python38.dll > tmp.def gendef python38.dll > tmp.def
dlltool --dllname python38.dll --def tmp.def --output-lib libpython38.a dlltool --dllname python38.dll --def tmp.def --output-lib libpython38.a
@ -1813,7 +1848,7 @@ Changes in the C API
placed in the same directory as :file:`pythonXY.lib`, which is generally the placed in the same directory as :file:`pythonXY.lib`, which is generally the
:file:`libs` directory under your Python installation. :file:`libs` directory under your Python installation.
.. highlight:: python3 (Contributed by Steve Dower in :issue:`37351`.)
CPython bytecode changes CPython bytecode changes