stable.md
1> **Источник:** https://python-all.ru/3.6/c-api/stable.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Стабильный интерфейс прикладного двоичного кода89Традиционно C API Python изменяется с каждым выпуском. Большинство изменений совместимы на уровне исходного кода – обычно просто добавляются новые элементы API, а существующие не меняются и не удаляются (хотя некоторые интерфейсы удаляются после объявления устаревшими).1011К сожалению, совместимость API не распространяется на двоичную совместимость (ABI). Основная причина – эволюция определений структур: добавление нового поля или изменение типа поля может не нарушить API, но может нарушить ABI. Как следствие, модули расширения необходимо перекомпилировать для каждого выпуска Python (хотя в Unix возможно исключение, если ни один из затронутых интерфейсов не используется). Кроме того, в Windows модули расширения связываются с конкретной библиотекой pythonXY.dll и требуют перекомпиляции для связывания с новой версией.1213Начиная с Python 3.2, часть API объявлена гарантирующей стабильный ABI. Модули расширения, желающие использовать этот API (называемый «ограниченный API»), должны определить `Py_LIMITED_API`. Ряд деталей интерпретатора становятся скрытыми от модуля расширения; взамен создаётся модуль, который работает в любой версии 3.x (x\>=2) без перекомпиляции.1415В некоторых случаях стабильный ABI необходимо расширять новыми функциями. Модули расширения, желающие использовать эти новые API, должны установить `Py_LIMITED_API` в значение `PY_VERSION_HEX` (см. [Версионирование API и ABI](https://python-all.ru/3.6/c-api/apiabiversion.html#apiabiversion)) минимальной версии Python, которую они хотят поддерживать (например, `0x03030000` для Python 3.3). Такие модули будут работать во всех последующих выпусках Python, но не смогут загрузиться (из-за отсутствующих символов) в более старых выпусках.1617Начиная с Python 3.2, набор функций, доступных в ограниченном API, документирован в [**PEP 384**](https://python-all.ru/3.6/c-api/stable.html). В документации C API элементы API, не входящие в ограниченный API, помечены как «Not part of the limited API».18