Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into pythonGH-83162
Browse files Browse the repository at this point in the history
  • Loading branch information
achhina committed Jun 6, 2023
2 parents d5e2c44 + bae415a commit 01a62e4
Show file tree
Hide file tree
Showing 61 changed files with 1,659 additions and 1,117 deletions.
4 changes: 2 additions & 2 deletions Doc/c-api/exceptions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -887,15 +887,15 @@ because the :ref:`call protocol <call>` takes care of recursion handling.
depth limit.
.. versionchanged:: 3.9
This function is now also available in the limited API.
This function is now also available in the :ref:`limited API <limited-c-api>`.
.. c:function:: void Py_LeaveRecursiveCall(void)
Ends a :c:func:`Py_EnterRecursiveCall`. Must be called once for each
*successful* invocation of :c:func:`Py_EnterRecursiveCall`.
.. versionchanged:: 3.9
This function is now also available in the limited API.
This function is now also available in the :ref:`limited API <limited-c-api>`.
Properly implementing :c:member:`~PyTypeObject.tp_repr` for container types requires
special recursion handling. In addition to protecting the stack,
Expand Down
55 changes: 34 additions & 21 deletions Doc/c-api/stable.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ but will need to be compiled separately for 3.9.x and 3.10.x.

There are two tiers of C API with different stability exepectations:

- *Unstable API*, may change in minor versions without a deprecation period.
It is marked by the ``PyUnstable`` prefix in names.
- *Limited API*, is compatible across several minor releases.
- :ref:`Unstable API <unstable-c-api>`, may change in minor versions without
a deprecation period. It is marked by the ``PyUnstable`` prefix in names.
- :ref:`Limited API <limited-c-api>`, is compatible across several minor releases.
When :c:macro:`Py_LIMITED_API` is defined, only this subset is exposed
from ``Python.h``.

Expand Down Expand Up @@ -55,19 +55,15 @@ CPython development and spend extra effort adjusting to changes.
Stable Application Binary Interface
===================================

.. _limited-c-api:

Limited C API
-------------

Python 3.2 introduced the *Limited API*, a subset of Python's C API.
Extensions that only use the Limited API can be
compiled once and work with multiple versions of Python.
Contents of the Limited API are :ref:`listed below <stable-abi-list>`.

To enable this, Python provides a *Stable ABI*: a set of symbols that will
remain compatible across Python 3.x versions. The Stable ABI contains symbols
exposed in the Limited API, but also other ones – for example, functions
necessary to support older versions of the Limited API.

(For simplicity, this document talks about *extensions*, but the Limited API
and Stable ABI work the same way for all uses of the API – for example,
embedding Python.)
Contents of the Limited API are :ref:`listed below <limited-api-list>`.

.. c:macro:: Py_LIMITED_API
Expand All @@ -87,6 +83,23 @@ embedding Python.)
You can also define ``Py_LIMITED_API`` to ``3``. This works the same as
``0x03020000`` (Python 3.2, the version that introduced Limited API).


.. _stable-abi:

Stable ABI
----------

To enable this, Python provides a *Stable ABI*: a set of symbols that will
remain compatible across Python 3.x versions.

The Stable ABI contains symbols exposed in the :ref:`Limited API
<limited-c-api>`, but also other ones – for example, functions necessary to
support older versions of the Limited API.

(For simplicity, this document talks about *extensions*, but the Limited API
and Stable ABI work the same way for all uses of the API – for example,
embedding Python.)

On Windows, extensions that use the Stable ABI should be linked against
``python3.dll`` rather than a version-specific library such as
``python39.dll``.
Expand Down Expand Up @@ -131,9 +144,9 @@ Limited API Caveats
-------------------

Note that compiling with ``Py_LIMITED_API`` is *not* a complete guarantee that
code conforms to the Limited API or the Stable ABI. ``Py_LIMITED_API`` only
covers definitions, but an API also includes other issues, such as expected
semantics.
code conforms to the :ref:`Limited API <limited-c-api>` or the :ref:`Stable ABI
<stable-abi>`. ``Py_LIMITED_API`` only covers definitions, but an API also
includes other issues, such as expected semantics.

One issue that ``Py_LIMITED_API`` does not guard against is calling a function
with arguments that are invalid in a lower Python version.
Expand Down Expand Up @@ -166,9 +179,9 @@ Platform Considerations
=======================

ABI stability depends not only on Python, but also on the compiler used,
lower-level libraries and compiler options. For the purposes of the Stable ABI,
these details define a “platform”. They usually depend on the OS
type and processor architecture
lower-level libraries and compiler options. For the purposes of
the :ref:`Stable ABI <stable-abi>`, these details define a “platform”. They
usually depend on the OS type and processor architecture

It is the responsibility of each particular distributor of Python
to ensure that all Python versions on a particular platform are built
Expand All @@ -177,12 +190,12 @@ This is the case with Windows and macOS releases from ``python.org`` and many
third-party distributors.


.. _stable-abi-list:
.. _limited-api-list:

Contents of Limited API
=======================


Currently, the Limited API includes the following items:
Currently, the :ref:`Limited API <limited-c-api>` includes the following items:

.. limited-api-list::
2 changes: 1 addition & 1 deletion Doc/c-api/structures.rst
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ There are these calling conventions:
.. versionchanged:: 3.10
``METH_FASTCALL`` is now part of the stable ABI.
``METH_FASTCALL`` is now part of the :ref:`stable ABI <stable-abi>`.
.. data:: METH_FASTCALL | METH_KEYWORDS
Expand Down
4 changes: 2 additions & 2 deletions Doc/c-api/type.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Type Objects
Return the :c:member:`~PyTypeObject.tp_flags` member of *type*. This function is primarily
meant for use with ``Py_LIMITED_API``; the individual flag bits are
guaranteed to be stable across Python releases, but access to
:c:member:`~PyTypeObject.tp_flags` itself is not part of the limited API.
:c:member:`~PyTypeObject.tp_flags` itself is not part of the :ref:`limited API <limited-c-api>`.
.. versionadded:: 3.2
Expand Down Expand Up @@ -472,7 +472,7 @@ The following functions and structs are used to create
.. versionchanged:: 3.11
:c:member:`~PyBufferProcs.bf_getbuffer` and
:c:member:`~PyBufferProcs.bf_releasebuffer` are now available
under the limited API.
under the :ref:`limited API <limited-c-api>`.
.. c:member:: void *pfunc
Expand Down
2 changes: 1 addition & 1 deletion Doc/c-api/typeobj.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2150,7 +2150,7 @@ This results in types that are limited relative to types defined in Python:
include any subinterpreter-specific state.

Also, since :c:type:`PyTypeObject` is only part of the :ref:`Limited API
<stable>` as an opaque struct, any extension modules using static types must be
<limited-c-api>` as an opaque struct, any extension modules using static types must be
compiled for a specific Python minor version.


Expand Down
2 changes: 1 addition & 1 deletion Doc/c-api/unicode.rst
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ These are the UTF-8 codec APIs:
The return type is now ``const char *`` rather of ``char *``.
.. versionchanged:: 3.10
This function is a part of the :ref:`limited API <stable>`.
This function is a part of the :ref:`limited API <limited-c-api>`.
.. c:function:: const char* PyUnicode_AsUTF8(PyObject *unicode)
Expand Down
2 changes: 1 addition & 1 deletion Doc/howto/isolating-extensions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -461,7 +461,7 @@ Module State Access from Slot Methods, Getters and Setters

.. After adding to limited API:
If you use the :ref:`limited API <stable>,
If you use the :ref:`limited API <limited-c-api>`,
you must update ``Py_LIMITED_API`` to ``0x030b0000``, losing ABI
compatibility with earlier versions.
Expand Down
2 changes: 1 addition & 1 deletion Doc/library/test.rst
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,7 @@ The :mod:`test.support` module defines the following functions:

.. decorator:: requires_limited_api

Decorator for only running the test if :ref:`Limited C API <stable>`
Decorator for only running the test if :ref:`Limited C API <limited-c-api>`
is available.


Expand Down
14 changes: 14 additions & 0 deletions Doc/library/traceback.rst
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,13 @@ capture data for later printing in a lightweight fashion.

For syntax errors - the line number where the error occurred.

.. attribute:: end_lineno

For syntax errors - the end line number where the error occurred.
Can be ``None`` if not present.

.. versionadded:: 3.10

.. attribute:: text

For syntax errors - the text where the error occurred.
Expand All @@ -287,6 +294,13 @@ capture data for later printing in a lightweight fashion.

For syntax errors - the offset into the text where the error occurred.

.. attribute:: end_offset

For syntax errors - the end offset into the text where the error occurred.
Can be ``None`` if not present.

.. versionadded:: 3.10

.. attribute:: msg

For syntax errors - the compiler error message.
Expand Down
2 changes: 1 addition & 1 deletion Doc/whatsnew/3.11.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2650,7 +2650,7 @@ Removed
* :c:func:`PyMarshal_WriteObjectToString`
* the ``Py_MARSHAL_VERSION`` macro

These are not part of the :ref:`limited API <stable-abi-list>`.
These are not part of the :ref:`limited API <limited-api-list>`.

(Contributed by Victor Stinner in :issue:`45474`.)

Expand Down
Loading

0 comments on commit 01a62e4

Please sign in to comment.