Релиз PyPy 1.6, реализации Python, написанной на языке Python

Вышел релиз проекта PyPy 1.6, в рамках которого разрабатывается реализации языка Python, написанная на языке Python (используется статически типизированное подмножество RPython, Restricted Python). Благодаря задействованию JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, минуя фазу интерпретации байткода в виртуальной машине, PyPy при выполнении некоторых операций в несколько раз обгоняет по производительности классическую реализацию Python на языке Си - при выполнении 20 тестов производительности PyPy в среднем опережает CPython в 4.3 раза. Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.

Из новшеств, добавленных в PyPy 1.6, можно выделить:

  • Обеспечение совместимости с CPython 2.7.1, PyPy может выступать в роли замены данной версии Python. Кроме того добавлена экспериментальная поддержка загрузки CPython-расширений, написанных на языке Си;
  • Продолжена работа по увеличение производительности. По сравнению с прошлым выпуском отмечается увеличение скорости работы на 20-30%. Например, если при прохождение тестового набора в среднем PyPy 1.5 был быстрее CPython 2.7 в 3.6 раз, но версия PyPy 1.6 быстрее уже в 4.3 раза. Увеличение скорости достигнуто благодаря оптимизации различных подсистем PyPy, таких как сборщик мусора, JIT-компилятор, код накопления статистики для JIT. Кроме того, проведена работа по увеличению качества генерируемого JIT машинного кода и работы Python-интерпретатора;
  • В комплект включен JitViewer, инструментарий для визуализации процесса преобразования кода встроенным JIT-компилятором, что дает возможность наглядно разобраться, какой именно Python-код и как компилируется в ассемблерное представление;
  • Расширена поддержка CPython API для написания модулей-расширений, что позволило увеличить число поддерживаемых в PyPy сторонних модулей;
  • Поддержка многобайтных кодировок. Данная область оставалась последним звеном на пути к полному обеспечению совместимости с Python. Ранее поддерживались только однобайтные кодировки.
  • Начальная поддержка библиотеки для организации научных расчетов NumPy. Пока поддерживается только ограниченная часть API, поэтому реальные программы на базе NumPy в PyPy запустить в настоящее время не удастся. По словам разработчиков адаптация PyPy для поддержки NumPy продвигается быстро и уже скоро можно будет говорить о полной поддержке данной библиотеки;
  • Исправлено 53 ошибки.

Некоторые особенности 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.

© OpenNet