Spec-Zone.ru › Python 3.8

Стабильный интерфейс двоичного приложения

Традиционно, C API Python будет меняться с каждым выпуском. Большинство изменений будут совместимы на уровне исходного кода, обычно путем добавления API, а не изменения существующего API или удаления API (хотя некоторые интерфейсы удаляются после предварительной депрекации).

К сожалению, совместимость API не распространяется на двоичную совместимость (ABI). Причина в основном в эволюции определений структур, где добавление нового поля или изменение типа поля может не нарушить API, но может нарушить ABI. В результате расширяемые модули необходимо перекомпилировать для каждого выпуска Python (хотя исключение возможно на Unix, когда не используются ни один из затронутых интерфейсов). Кроме того, в Windows расширяемые модули связываются с определенным pythonXY.dll и должны перекомпилироваться для связывания с более новым.

Начиная с Python 3.2, подмножество API было объявлено для обеспечения стабильной ABI. Расширяемые модули, желающие использовать этот API (называемый «ограниченным API»), должны определить Py_LIMITED_API. Затем ряд деталей интерпретатора становятся скрытыми от расширяемого модуля; в ответ создается модуль, который работает на любой версии 3.x (x>=2) без перекомпиляции.

В некоторых случаях стабильную ABI необходимо расширить новыми функциями. Расширяемые модули, желающие использовать эти новые API, должны установить Py_LIMITED_API на значение PY_VERSION_HEX (см. Версионирование API и ABI) минимальной версии Python, которую они хотят поддерживать (например, 0x03030000 для Python 3.3). Такие модули будут работать во всех последующих версиях Python, но не загружатся (из-за отсутствия символов) в более старых версиях.

Начиная с Python 3.2, набор функций, доступных для ограниченного API, документирован в PEP 384. В документации C API элементы API, которые не входят в состав ограниченного API, помечены как «Не входят в состав ограниченного API».

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/stable.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API