Релиз PyPy 1.5, реализации Python, написанной на языке Python
Вышел релиз проекта PyPy 1.5, в рамках которого разрабатывается реализации языка Python, написанная на языке Python. Благодаря задействованию JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, минуя фазу интерпретации байткода в виртуальной машине, PyPy при выполнении некоторых операций в несколько раз обгоняет по производительности классическую реализацию Python на языке Си - при выполнении 20 тестов производительности PyPy в среднем опережает CPython в 3.6 раз. Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.Из других особенностей PyPy можно отметить:
- Поддержка бесстекового (Stackless) режима работы, позволяющего добиться массового параллельного выполнения микропотоков (micro-threads).
- Реализация режима изолированного выполнения кода, к которому нет доверия. От sandbox в CPython данный режим отличается полной поддержкой всех возможностей языка без выделения unsafe-функций.
- Автоматическая генерация и полная прозрачность встроенного JIT-компилятора;
- PyPy успешно проходит стандартный тестовый пакет Python и поддерживает большинство из стандартных Python-модулей и фреймворков, таких как ctypes, django (с sqlite), twisted (без поддержки ssl), pylons, pyglet. PyPy может быть использован для бесшовной замены CPython 2.6 и CPython 2.7;
- Поддержка работы на архитектурах x86 (IA-32) и x86_64. Ведется работа по адаптации для архитектуры ARM, но она ещё не завершена;
- На базе технологий PyPy созданы бэкенды для генерации в PyPy байткода для LLVM и виртуальных машин .NET/CLI и Java.
- На базе PyPy ведется разработка реализаций на языке Python интерпретаторов Prolog, Smalltalk, JavaScript, Io и Scheme.
Из новшеств, добавленных в PyPy 1.5, можно выделить:
- Обеспечение совместимости с Python 2.7 (версией 2.7.1);
- Увеличение производительности. По сравнению с прошлым выпуском скорость прохождения стандартного тестового комплекта возросла на 25%. Результаты сравнения производительности с выпуском PyPy 1.4 можно посмотреть здесь, а с CPython 2.6.2 - здесь;
- В реализацию JIT-компилятора добавлена поддержка выноса инвариантов за пределы цикла, которая позволила увеличить производительность запутанных циклов, в которых выполняются математические вычисления;
- Улучшена совместимость с CPython API для написания модулей-расширений, что позволило увеличить число поддерживаемых в PyPy сторонних модулей;
- Обеспечена поддержка Tkinter, GUI библиотеки на базе TCL/TK, и построенной на её основе интегрированной среды IDLE;
- Система профилирования cProfile теперь работает с JIT, но пока непригодна для полноценного анализа изощренный проблем с производительностью;
- Отдельно ведется разработка реализации psycopg2-совместимой библиотеки (интерфейсный модуль для PostgreSQL) для PyPy.
© OpenNet