What's New in Python 3.9: Reorganize C API Changes (GH-19794)

Move Build Changes and C API Changes to the end of the document.
Most Python users don't build Python themselves and don't use the C
API. Other changes:

* Add Build Changes section
* Add sub-sections to the C API Changes
* Sort modules in Improved Modules section: move nntplib after
  multiprocessing
This commit is contained in:
Victor Stinner 2020-04-29 17:57:25 +02:00 committed by GitHub
parent 57697245e1
commit e5963ee320
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 173 additions and 159 deletions

View File

@ -369,13 +369,6 @@ Add :func:`math.ulp`: return the value of the least significant bit
of a float.
(Contributed by Victor Stinner in :issue:`39310`.)
nntplib
-------
:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a :class:`ValueError`
if the given timeout for their constructor is zero to prevent the creation of
a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
multiprocessing
---------------
@ -384,6 +377,13 @@ The :class:`multiprocessing.SimpleQueue` class has a new
queue.
(Contributed by Victor Stinner in :issue:`30966`.)
nntplib
-------
:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a :class:`ValueError`
if the given timeout for their constructor is zero to prevent the creation of
a non-blocking socket. (Contributed by Dong-hee Na in :issue:`39259`.)
os
--
@ -534,157 +534,6 @@ Optimizations
Stinner in :issue:`38061`.)
Build and C API Changes
=======================
* New :c:func:`PyFrame_GetCode` function: get a frame code.
New :c:func:`PyFrame_GetBack` function: get the frame next outer frame.
(Contributed by Victor Stinner in :issue:`40421`.)
* Add :c:func:`PyFrame_GetLineNumber` to the limited C API.
(Contributed by Victor Stinner in :issue:`40421`.)
* New :c:func:`PyThreadState_GetInterpreter` and
:c:func:`PyInterpreterState_Get` functions to get the interpreter.
New :c:func:`PyThreadState_GetFrame` function to get the current frame of a
Python thread state.
New :c:func:`PyThreadState_GetID` function: get the unique identifier of a
Python thread state.
(Contributed by Victor Stinner in :issue:`39947`.)
* Add ``--with-platlibdir`` option to the ``configure`` script: name of the
platform-specific library directory, stored in the new :attr:`sys.platlibdir`
attribute. See :attr:`sys.platlibdir` attribute for more information.
(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor Stinner in :issue:`1294959`.)
* Add 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
way to call a callable Python object without any argument.
(Contributed by Victor Stinner in :issue:`37194`.)
* The global variable :c:data:`PyStructSequence_UnnamedField` is now a constant
and refers to a constant string.
(Contributed by Serhiy Storchaka in :issue:`38650`.)
* Exclude ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of
``pyfpe.h`` from ``Py_LIMITED_API`` (stable API).
(Contributed by Victor Stinner in :issue:`38835`.)
* The ``tp_print`` slot of :ref:`PyTypeObject <type-structs>` has been removed.
It was used for printing objects to files in Python 2.7 and before. Since
Python 3.0, it has been ignored and unused.
(Contributed by Jeroen Demeyer in :issue:`36974`.)
* On non-Windows platforms, the :c:func:`setenv` and :c:func:`unsetenv`
functions are now required to build Python.
(Contributed by Victor Stinner in :issue:`39395`.)
* The ``COUNT_ALLOCS`` special build macro has been removed.
(Contributed by Victor Stinner in :issue:`39489`.)
* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
* Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall`
as regular functions for the limited API. Previously, there were defined as
macros, but these macros didn't compile with the limited C API which cannot
access ``PyThreadState.recursion_depth`` field (the structure is opaque in
the limited C API).
* Exclude the following functions from the limited C API:
* ``_Py_CheckRecursionLimit``
* ``_Py_NewReference()``
* ``_Py_ForgetReference()``
* ``_PyTraceMalloc_NewReference()``
* ``_Py_GetRefTotal()``
* The trashcan mechanism which never worked in the limited C API.
* ``PyTrash_UNWIND_LEVEL``
* ``Py_TRASHCAN_BEGIN_CONDITION``
* ``Py_TRASHCAN_BEGIN``
* ``Py_TRASHCAN_END``
* ``Py_TRASHCAN_SAFE_BEGIN``
* ``Py_TRASHCAN_SAFE_END``
* The following static inline functions or macros become regular "opaque"
function to hide implementation details:
* ``_Py_NewReference()``
* ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` become aliases to
:c:func:`PyObject_Init` and :c:func:`PyObject_InitVar` in the limited C
API, but are overriden with static inline function otherwise. Thanks to
that, it was possible to exclude ``_Py_NewReference()`` from the limited
C API.
* Move following functions and definitions to the internal C API:
* ``_PyDebug_PrintTotalRefs()``
* ``_Py_PrintReferences()``
* ``_Py_PrintReferenceAddresses()``
* ``_Py_tracemalloc_config``
* ``_Py_AddToAllObjects()`` (specific to ``Py_TRACE_REFS`` build)
(Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
* ``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory
*tstate* parameter (``PyThreadState*``).
(Contributed by Victor Stinner in :issue:`38500`.)
* Extension modules: :c:member:`~PyModuleDef.m_traverse`,
:c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free`
functions of :c:type:`PyModuleDef` are no longer called if the module state
was requested but is not allocated yet. This is the case immediately after
the module is created and before the module is executed
(:c:data:`Py_mod_exec` function). More precisely, these functions are not called
if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module state (as
returned by :c:func:`PyModule_GetState`) is ``NULL``.
Extension modules without module state (``m_size <= 0``) are not affected.
* If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function is
now scheduled to be called from the subinterpreter, rather than being called
from the main interpreter. Each subinterpreter now has its own list of
scheduled calls.
(Contributed by Victor Stinner in :issue:`39984`.)
* Remove ``_PyRuntime.getframe`` hook and remove ``_PyThreadState_GetFrame``
macro which was an alias to ``_PyRuntime.getframe``. They were only exposed
by the internal C API. Remove also ``PyThreadFrameGetter`` type.
(Contributed by Victor Stinner in :issue:`39946`.)
* The :c:func:`PyModule_AddType` function is added to help adding a type to a module.
(Contributed by Dong-hee Na in :issue:`40024`.)
* The Windows registry is no longer used to initialize :data:`sys.path` when
the ``-E`` option is used. This is significant when embedding Python on
Windows.
(Contributed by Zackery Spytz in :issue:`8901`.)
* Add the functions :c:func:`PyObject_GC_IsTracked` and
: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
the garbage collector respectively. (Contributed by Pablo Galindo in
:issue:`40241`.)
* Remove the following functions from the C API. Call :c:func:`PyGC_Collect`
explicitly to clear all free lists.
(Contributed by Inada Naoki and Victor Stinner in :issue:`37340`,
:issue:`38896` and :issue:`40428`.)
* ``PyAsyncGen_ClearFreeLists()``
* ``PyContext_ClearFreeList()``
* ``PyDict_ClearFreeList()``
* ``PyFloat_ClearFreeList()``
* ``PyFrame_ClearFreeList()``
* ``PyList_ClearFreeList()``
* ``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``:
the free lists of bound method objects have been removed.
* ``PySet_ClearFreeList()``: the set free list has been removed
in Python 3.4.
* ``PyTuple_ClearFreeList()``
* ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in
Python 3.3.
Deprecated
==========
@ -729,7 +578,7 @@ Deprecated
deprecated and will be removed in version 3.11.
(Contributed by Yury Selivanov and Kyle Stanley in :issue:`34790`.)
* binhex4 and hexbin4 standards are now deprecated. The :`binhex` module
* binhex4 and hexbin4 standards are now deprecated. The :mod:`binhex` module
and the following :mod:`binascii` functions are now deprecated:
* :func:`~binascii.b2a_hqx`, :func:`~binascii.a2b_hqx`
@ -934,3 +783,168 @@ CPython bytecode changes
:keyword:`assert` statement. Previously, the assert statement would not work
correctly if the :exc:`AssertionError` exception was being shadowed.
(Contributed by Zackery Spytz in :issue:`34880`.)
Build Changes
=============
* Add ``--with-platlibdir`` option to the ``configure`` script: name of the
platform-specific library directory, stored in the new :attr:`sys.platlibdir`
attribute. See :attr:`sys.platlibdir` attribute for more information.
(Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis
and Victor Stinner in :issue:`1294959`.)
* The ``COUNT_ALLOCS`` special build macro has been removed.
(Contributed by Victor Stinner in :issue:`39489`.)
* On non-Windows platforms, the :c:func:`setenv` and :c:func:`unsetenv`
functions are now required to build Python.
(Contributed by Victor Stinner in :issue:`39395`.)
C API Changes
=============
New Features
------------
* Add :c:func:`PyFrame_GetCode` function: get a frame code.
Add :c:func:`PyFrame_GetBack` function: get the frame next outer frame.
(Contributed by Victor Stinner in :issue:`40421`.)
* Add :c:func:`PyFrame_GetLineNumber` to the limited C API.
(Contributed by Victor Stinner in :issue:`40421`.)
* Add :c:func:`PyThreadState_GetInterpreter` and
:c:func:`PyInterpreterState_Get` functions to get the interpreter.
Add :c:func:`PyThreadState_GetFrame` function to get the current frame of a
Python thread state.
Add :c:func:`PyThreadState_GetID` function: get the unique identifier of a
Python thread state.
(Contributed by Victor Stinner in :issue:`39947`.)
* Add 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
way to call a callable Python object without any argument.
(Contributed by Victor Stinner in :issue:`37194`.)
* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
* Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall`
as regular functions for the limited API. Previously, there were defined as
macros, but these macros didn't compile with the limited C API which cannot
access ``PyThreadState.recursion_depth`` field (the structure is opaque in
the limited C API).
* ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` become regular "opaque"
function to hide implementation details.
(Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
* The :c:func:`PyModule_AddType` function is added to help adding a type
to a module.
(Contributed by Dong-hee Na in :issue:`40024`.)
* Add the functions :c:func:`PyObject_GC_IsTracked` and
: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
the garbage collector respectively. (Contributed by Pablo Galindo in
:issue:`40241`.)
Porting to Python 3.9
---------------------
* ``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory
*tstate* parameter (``PyThreadState*``).
(Contributed by Victor Stinner in :issue:`38500`.)
* Extension modules: :c:member:`~PyModuleDef.m_traverse`,
:c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free`
functions of :c:type:`PyModuleDef` are no longer called if the module state
was requested but is not allocated yet. This is the case immediately after
the module is created and before the module is executed
(:c:data:`Py_mod_exec` function). More precisely, these functions are not called
if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module state (as
returned by :c:func:`PyModule_GetState`) is ``NULL``.
Extension modules without module state (``m_size <= 0``) are not affected.
* If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function is
now scheduled to be called from the subinterpreter, rather than being called
from the main interpreter. Each subinterpreter now has its own list of
scheduled calls.
(Contributed by Victor Stinner in :issue:`39984`.)
* The Windows registry is no longer used to initialize :data:`sys.path` when
the ``-E`` option is used (if :c:member:`PyConfig.use_environment` is set to
``0``). This is significant when embedding Python on Windows.
(Contributed by Zackery Spytz in :issue:`8901`.)
* The global variable :c:data:`PyStructSequence_UnnamedField` is now a constant
and refers to a constant string.
(Contributed by Serhiy Storchaka in :issue:`38650`.)
Removed
-------
* Exclude ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of
``pyfpe.h`` from the limited C API.
(Contributed by Victor Stinner in :issue:`38835`.)
* The ``tp_print`` slot of :ref:`PyTypeObject <type-structs>` has been removed.
It was used for printing objects to files in Python 2.7 and before. Since
Python 3.0, it has been ignored and unused.
(Contributed by Jeroen Demeyer in :issue:`36974`.)
* Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):
* Exclude the following functions from the limited C API:
* ``_Py_CheckRecursionLimit``
* ``_Py_NewReference()``
* ``_Py_ForgetReference()``
* ``_PyTraceMalloc_NewReference()``
* ``_Py_GetRefTotal()``
* The trashcan mechanism which never worked in the limited C API.
* ``PyTrash_UNWIND_LEVEL``
* ``Py_TRASHCAN_BEGIN_CONDITION``
* ``Py_TRASHCAN_BEGIN``
* ``Py_TRASHCAN_END``
* ``Py_TRASHCAN_SAFE_BEGIN``
* ``Py_TRASHCAN_SAFE_END``
* Move following functions and definitions to the internal C API:
* ``_PyDebug_PrintTotalRefs()``
* ``_Py_PrintReferences()``
* ``_Py_PrintReferenceAddresses()``
* ``_Py_tracemalloc_config``
* ``_Py_AddToAllObjects()`` (specific to ``Py_TRACE_REFS`` build)
(Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)
* Remove ``_PyRuntime.getframe`` hook and remove ``_PyThreadState_GetFrame``
macro which was an alias to ``_PyRuntime.getframe``. They were only exposed
by the internal C API. Remove also ``PyThreadFrameGetter`` type.
(Contributed by Victor Stinner in :issue:`39946`.)
* Remove the following functions from the C API. Call :c:func:`PyGC_Collect`
explicitly to clear all free lists.
(Contributed by Inada Naoki and Victor Stinner in :issue:`37340`,
:issue:`38896` and :issue:`40428`.)
* ``PyAsyncGen_ClearFreeLists()``
* ``PyContext_ClearFreeList()``
* ``PyDict_ClearFreeList()``
* ``PyFloat_ClearFreeList()``
* ``PyFrame_ClearFreeList()``
* ``PyList_ClearFreeList()``
* ``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``:
the free lists of bound method objects have been removed.
* ``PySet_ClearFreeList()``: the set free list has been removed
in Python 3.4.
* ``PyTuple_ClearFreeList()``
* ``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in
Python 3.3.