Документация Python неофициальный перевод

Стабильный интерфейс прикладного двоичного кодаStable Application Binary Interface

Традиционно C API Python изменяется с каждым выпуском. Большинство изменений совместимы на уровне исходного кода – обычно просто добавляются новые элементы 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».