mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
merge with 3.3
This commit is contained in:
commit
7c11e52f7e
5 changed files with 152 additions and 30 deletions
|
@ -13,6 +13,7 @@ document the API functions in detail.
|
|||
:maxdepth: 2
|
||||
|
||||
intro.rst
|
||||
stable.rst
|
||||
veryhigh.rst
|
||||
refcounting.rst
|
||||
exceptions.rst
|
||||
|
@ -22,5 +23,4 @@ document the API functions in detail.
|
|||
init.rst
|
||||
memory.rst
|
||||
objimpl.rst
|
||||
stable.rst
|
||||
apiabiversion.rst
|
||||
|
|
|
@ -6,36 +6,33 @@
|
|||
Stable Application Binary Interface
|
||||
***********************************
|
||||
|
||||
Traditionally, the C API of Python will change with every release.
|
||||
Most changes will be source-compatible, typically by only adding API,
|
||||
rather than changing existing API or removing API (although some
|
||||
interfaces do get removed after being deprecated first).
|
||||
Traditionally, the C API of Python will change with every release. Most changes
|
||||
will be source-compatible, typically by only adding API, rather than changing
|
||||
existing API or removing API (although some interfaces do get removed after
|
||||
being deprecated first).
|
||||
|
||||
Unfortunately, the API compatibility does not extend to binary
|
||||
compatibility (the ABI). The reason is primarily the evolution of
|
||||
struct definitions, where addition of a new field, or changing
|
||||
the type of a field, might not break the API, but can break the ABI.
|
||||
As a consequence, extension modules need to be recompiled for
|
||||
every Python release (although an exception is possible on Unix
|
||||
when none of the affected interfaces are used). In addition, on
|
||||
Windows, extension modules link with a specific pythonXY.dll and
|
||||
need to be recompiled to link with a newer one.
|
||||
Unfortunately, the API compatibility does not extend to binary compatibility
|
||||
(the ABI). The reason is primarily the evolution of struct definitions, where
|
||||
addition of a new field, or changing the type of a field, might not break the
|
||||
API, but can break the ABI. As a consequence, extension modules need to be
|
||||
recompiled for every Python release (although an exception is possible on Unix
|
||||
when none of the affected interfaces are used). In addition, on Windows,
|
||||
extension modules link with a specific pythonXY.dll and need to be recompiled to
|
||||
link with a newer one.
|
||||
|
||||
Since Python 3.2, a subset of the API has been declared to guarantee
|
||||
a stable ABI. Extension modules wishing to use this API need to define
|
||||
``Py_LIMITED_API``. A number of interpreter details then become hidden
|
||||
from the extension module; in return, a module is built that works
|
||||
on any 3.x version (x>=2) without recompilation.
|
||||
Since Python 3.2, a subset of the API has been declared to guarantee a stable
|
||||
ABI. Extension modules wishing to use this API (called "limited API") need to
|
||||
define ``Py_LIMITED_API``. A number of interpreter details then become hidden
|
||||
from the extension module; in return, a module is built that works on any 3.x
|
||||
version (x>=2) without recompilation.
|
||||
|
||||
In some cases, the stable ABI needs to be extended with new functions.
|
||||
Extension modules wishing to use these new APIs need to set
|
||||
``Py_LIMITED_API`` to the ``PY_VERSION_HEX`` value (see
|
||||
:ref:`apiabiversion`) of the minimum Python version they want to
|
||||
support (e.g. ``0x03030000`` for Python 3.3). Such modules will work
|
||||
on all subsequent Python releases, but fail to load (because of
|
||||
Extension modules wishing to use these new APIs need to set ``Py_LIMITED_API``
|
||||
to the ``PY_VERSION_HEX`` value (see :ref:`apiabiversion`) of the minimum Python
|
||||
version they want to support (e.g. ``0x03030000`` for Python 3.3). Such modules
|
||||
will work on all subsequent Python releases, but fail to load (because of
|
||||
missing symbols) on the older releases.
|
||||
|
||||
As of Python 3.2, the set of functions available to the limited API
|
||||
is documented in PEP 384.
|
||||
|
||||
.. XXX copy exact list here? Into each functions definition?
|
||||
As of Python 3.2, the set of functions available to the limited API is
|
||||
documented in PEP 384. In the C API documentation, API elements that are not
|
||||
part of the limited API are marked as "Not part of the limited API."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue