summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-06-06 13:11:28 (GMT)
committerGitHub <noreply@github.com>2023-06-06 13:11:28 (GMT)
commit82ab13c49a77b0d73e6cd5c7ecfe0de1b1036819 (patch)
tree399181df7bf91ba418faa7d419daf56accc5abc9 /Doc
parent67b288f8be4989176ffab04c72794e5faf5797a5 (diff)
downloadcpython-82ab13c49a77b0d73e6cd5c7ecfe0de1b1036819.zip
cpython-82ab13c49a77b0d73e6cd5c7ecfe0de1b1036819.tar.gz
cpython-82ab13c49a77b0d73e6cd5c7ecfe0de1b1036819.tar.bz2
[3.12] gh-102304: doc: Add links to Stable ABI and Limited C API (#105345) (#105371)
* gh-102304: doc: Add links to Stable ABI and Limited C API (#105345) * Add "limited-c-api" and "stable-api" references. * Rename "stable-abi-list" reference to "limited-api-list". * Makefile: Document files regenerated by "make regen-limited-abi" * Remove first empty line in generated files: - Lib/test/test_stable_abi_ctypes.py - PC/python3dll.c (cherry picked from commit bae415ad02c79cf3a2eec4aa6969221a12e6716f) * gh-102304: Fix up Simple ABI doc (GH-105351) (cherry picked from commit 0202aa002e06acef9aa55ace0d939103df19cadd)
Diffstat (limited to 'Doc')
-rw-r--r--Doc/c-api/exceptions.rst4
-rw-r--r--Doc/c-api/stable.rst55
-rw-r--r--Doc/c-api/structures.rst2
-rw-r--r--Doc/c-api/type.rst4
-rw-r--r--Doc/c-api/typeobj.rst2
-rw-r--r--Doc/c-api/unicode.rst2
-rw-r--r--Doc/howto/isolating-extensions.rst2
-rw-r--r--Doc/library/test.rst2
-rw-r--r--Doc/whatsnew/3.11.rst2
-rw-r--r--Doc/whatsnew/3.12.rst2
10 files changed, 45 insertions, 32 deletions
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
index 1694aa2..a24ecac 100644
--- a/Doc/c-api/exceptions.rst
+++ b/Doc/c-api/exceptions.rst
@@ -887,7 +887,7 @@ 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)
@@ -895,7 +895,7 @@ because the :ref:`call protocol <call>` takes care of recursion handling.
*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,
diff --git a/Doc/c-api/stable.rst b/Doc/c-api/stable.rst
index 3721fc0..149d4d6 100644
--- a/Doc/c-api/stable.rst
+++ b/Doc/c-api/stable.rst
@@ -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``.
@@ -55,19 +55,19 @@ CPython development and spend extra effort adjusting to changes.
Stable Application Binary Interface
===================================
+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.
+
+.. _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
@@ -87,6 +87,19 @@ 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.
+
On Windows, extensions that use the Stable ABI should be linked against
``python3.dll`` rather than a version-specific library such as
``python39.dll``.
@@ -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.
@@ -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
@@ -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::
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index 7ce3578..766f881 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -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
diff --git a/Doc/c-api/type.rst b/Doc/c-api/type.rst
index 89cd743..bf261b9 100644
--- a/Doc/c-api/type.rst
+++ b/Doc/c-api/type.rst
@@ -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
@@ -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
diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst
index 0584989..c6e783a 100644
--- a/Doc/c-api/typeobj.rst
+++ b/Doc/c-api/typeobj.rst
@@ -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.
diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst
index 6771f37..33437b6 100644
--- a/Doc/c-api/unicode.rst
+++ b/Doc/c-api/unicode.rst
@@ -992,7 +992,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)
diff --git a/Doc/howto/isolating-extensions.rst b/Doc/howto/isolating-extensions.rst
index 0262054..8adb85f 100644
--- a/Doc/howto/isolating-extensions.rst
+++ b/Doc/howto/isolating-extensions.rst
@@ -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.
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index 20f633b..1b045c7 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -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.
diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst
index 48606f3..c06ce78 100644
--- a/Doc/whatsnew/3.11.rst
+++ b/Doc/whatsnew/3.11.rst
@@ -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`.)
diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 18c4ae0..287549f 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -1580,7 +1580,7 @@ New Features
(Contributed by Petr Viktorin in :gh:`103509`.)
-* Added the new limited C API function :c:func:`PyType_FromMetaclass`,
+* Added the new :ref:`limited C API <limited-c-api>` function :c:func:`PyType_FromMetaclass`,
which generalizes the existing :c:func:`PyType_FromModuleAndSpec` using
an additional metaclass argument.
(Contributed by Wenzel Jakob in :gh:`93012`.)