Релиз PyPy 5.9, реализации Python, написанной на языке Python
Состоялся новый выпуск проекта PyPy 5.9, в рамках которого развивается реализации языка 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.9 доступен для Linux (x86, x86_64, PPC64, s390x, ARMv6 или ARMv7 с VFPv3), macOS и Windows, а выпуск PyPy3.5 5.9, который пока не вышел из стадии бета-версии, только для Linux x86_64.
Особенностью PyPy является использование JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, что позволяет обеспечить высокий уровень производительности - при выполнении некоторых операций PyPy в несколько раз обгоняет классическую реализацию Python на языке Си (CPython). Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.
- В PyPy2.7 обеспечена полноценная поддержка приложений, написанных с использованием пакета с функциями для научных вычислений NumPy и библиотеки для анализа данных Pandas. Также теперь работоспособны и многие другие Python-модули, использующие вставки на C-API;
- Поддержка интеграции с компилятором Cython 0.27.1, совместное использование которого с PyPy позволяет существенно расширить поддержки Python-проектов, использующих C-API;
- Проведена оптимизация парсера JSON для увеличения скорости работы с повторяющимися строковыми ключами и сокращения потребления памяти. Для крупных JSON-файлов c повторяющимися ключами отмечается до 50% сокращение потребления памяти и до 15% ускорение разбора.
- До версии 1.11.1 обновлен модуль CFFI (C Foreign Function Interface) с реализацией интерфейса для вызова функций, написанных на языке Си, который может выступать в качестве более простой альтернативы модулю ctypes. В новой версии добавлена поддержка сложных аргументов в режиме API, а также типов char16_t и char32_t, улучшенна поддержка callback-вызовов.
- Решены многие проблемы с обвязке для C-API, приводящие к излишнему потреблению памяти и невосместимостям.