← К публикациям
python
Адриан Макриденко 1 мин

PyPy 8

Относительно недавно вышел PyPy 8, и это очень интересный релиз, так как я активно работаю на PyPy, а в интернетах активно все хоронят PyPy.

Самое очевидное: появилась поддержка Python 3.12. Пока в статусе beta, но при этом PyPy 3.11 получает последний релиз (за исключением security fixes), так что именно 3.12 теперь становится основной актуальной веткой.

Но гораздо интереснее другое. Одна из главных проблем PyPy всегда была не в самом PyPy, а в совместимости с экосистемой CPython. Особенно когда дело доходило до C extensions. Можно сколько угодно рассказывать про JIT и производительность, но всё становится сильно менее интересно, когда очередная зависимость ожидает CPython ABI. В PyPy 8 сделали большой шаг к тому, чтобы это перестало быть такой проблемой.

Разработчики изменили представление PyObject так, чтобы с точки зрения C extension оно соответствовало CPython. Цель - возможность использовать обычные cp312-abi3 wheels, собранные для CPython, непосредственно в PyPy. Пока это ещё не работает полностью: нужны изменения в import machinery, а pip и uv должны научиться считать такие wheels совместимыми с PyPy. Но направление, как мне кажется, гораздо интереснее предыдущих попыток решить эту проблему.

Особенно на фоне того, что PyPy фактически отказался от ставки на HPy. HPy должен был стать отдельным универсальным API для расширений, не привязанным к внутренностям CPython. Идея красивая, но экосистема за ней не пошла. В PyPy 8 внутренний HPy backend уже отключён по умолчанию, а вместо попытки заставить всех использовать новый API разработчики идут в сторону совместимости с существующим CPython Limited API и abi3.

И мне этот подход нравится гораздо больше.

Не "давайте перепишем Python-экосистему под правильный API", а "давайте сделаем так, чтобы существующая Python-экосистема работала и здесь". Если эту работу доведут до конца, одна из самых неприятных особенностей PyPy может постепенно исчезнуть. Теоретически сценарий:

uv sync

и работающий проект на PyPy без отдельного зоопарка wheels становится гораздо более реалистичным.

Поэтому PyPy 8 для меня интересен не столько как очередной релиз с новой версией Python или улучшениями JIT. Это скорее релиз про то, каким PyPy хочет быть дальше: не отдельной экосистемой рядом с CPython, а ещё одной реализацией Python, которая может пользоваться той же самой экосистемой бинарных пакетов.

Так что хоронить PyPy я бы пока не спешил

Подсказка: попробуйте «asyncio», «Django» или имя автора