Выпуск PyPy 5.7, реализации Python, написанной на языке Python
Представлен новый выпуск проекта PyPy 5.7, в рамках которого развивается реализации языка Python, написанной на языке Python (используется статически типизированное подмножество RPython, Restricted Python). Выпуск подготовлен одновременно для веток PyPy2.7 и PyPy3.5, обеспечивающих поддержку синтаксиса Python 2.7 и Python 3.5, и поставляемых с stdlib 2.7.13 и 3.5.3. Выпуск PyPy2.7 5.7 доступен для Linux (x86, x86_64, PPC64, s390x, ARMv6 или ARMv7 с VFPv3), macOS и Windows, а выпуск PyPy3.5 5.7 только для Linux x86_64.
Особенностью PyPy является использование JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, что позволяет обеспечить высокий уровень производительности — при выполнении некоторых операций PyPy в несколько раз обгоняет классическую реализацию Python на языке Си (CPython). Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти — общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.
Основные улучшения:
- Продолжена работа по усовершенствованию прослойки cpyext для обеспечения совместимости с C-API. В PyPy2 обеспечена возможность импорта и запуска многих пактов с расширениями на языке Си, включая Numpy, Cython и Pandas. Для часто вызываемых небольших Си-функций производительность может быть ниже CPython, но разработчики работают над устранением проблемы;
- Ветка PyPy3.5 достигла статуса бета-выпуска, она пока проходит не все тесты, но уже поддерживает asyncio и показывает неплохой рост производительности. Из ветки Python 3.6 бэкпортирована поддержка форматируемых строковых литералов (f»).
- До версии 1.10 обновлён модуль CFFI (C Foreign Function Interface) с реализацией интерфейса для вызова функций, написанных на языке Си, который может выступать в качестве более простой альтернативы модулю ctypes.
- В качестве gcrootfinder (поиск корневых указателей при сборке мусора) по умолчанию задействован shadowstack, производительность которого заметно увеличена в новом выпуске. Ранее используемый asmgcc в будущих выпусках будет переведён в разряд устаревших. Shadowstack примерно на 3% медленнее asmgcc, но значительно проще в сопровождении и отладке.
Основные особенности PyPy:
- Поддержка бесстекового (Stackless) режима работы, позволяющего использовать модель actor (erlang-подобное программирование с массой микропотоков и отсыланием сигналов друг другу);
- Реализация режима изолированного выполнения кода, к которому нет доверия. От sandbox в CPython данный режим отличается полной поддержкой всех возможностей языка без выделения unsafe-функций.
- Автоматическая генерация и полная прозрачность встроенного JIT-компилятора;
- PyPy успешно проходит стандартный тестовый пакет Python и поддерживает большинство из стандартных Python-модулей и фреймворков, таких как ctypes, django (с sqlite), twisted (без поддержки ssl), pylons, pyglet. PyPy может быть использован для бесшовной замены CPython;
- Поддержка работы на архитектурах x86 (IA-32) , x86_64, ARM и PowerPC (PPC64);
- На базе технологий PyPy созданы бэкенды для генерации в PyPy байткода для LLVM и виртуальных машин .NET/CLI и Java.
- На базе PyPy ведется разработка реализаций на языке Python интерпретаторов Prolog, Smalltalk, Ruby, JavaScript, Io и Scheme.
- Вариант PyPy с поддержкой распараллеливания на многоядерных системах развивается в рамках проекта PyPy-STM (PyPy Software Transactional Memory).
© OpenNet