Представлен (http://morepypy.blogspot.ru/2015/02/pypy-250-released.html) релиз PyPy 2.5 (http://pypy.org/), реализации языка Python, написанной на языке Python (используется статически типизированное подмножество RPython (http://doc.pypy.org/en/latest/coding-guide.html#id1), Restricted Python). Новый выпуск примечателен значительным увеличением производительности, он в среднем на 10% быстрее (http://speed.pypy.org/) прошлой версии PyPy и в 6.93 раза быстрее классического CPython 2.7. Выпуск доступен для x86-систем Linux 32/64, OpenBSD, OS X 64 и Windows 32, а также для систем на базе архитектуры ARM (ARMv6 или ARMv7 с VFPv3).
Благодаря задействованию JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, PyPy при выполнении некоторых операций в несколько раз обгоняет по производительности классическую реализацию Python на языке Си (CPython). Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.
Новшества (http://doc.pypy.org/en/latest/release-2.5.0.html), добавленные в PyPy 2.5:
- Сокращено время "разогрева" JIT-компилятора и увеличена производительность генерируемого им кода. По сравнению с прошлым выпуском производительность возросла более чем на 10%. Отключено по умолчанию обнуление выделяемой в сборщике мусора памяти;
- Улучшена передача объектов между кодом на языке Си и PyPy. В Си теперь можно передавать прямые указатели (без копирования), что позволило поднять пропускную способность ввода/вывода. Тесты показали увеличение производительности выполнения интенсивных сетевых операций приблизительно на 50%. Операции с файлами ещё требуют дополнительной оптимизации и пока демонстрируют рост производительности на 20%;
- Расширены возможности интегрированной математической библиотеки numpy, в которой появилась поддержка API GenericUfunc и добавлен модуль линейной алгебры linalg (http://docs.scipy.org/doc/scipy/reference/linalg.html), основанный на пакете LAPACK (http://www.netlib.org/lapack/).
- Осуществлён переход (http://morepypy.blogspot.ru/2015/01/faster-more-memory-effic...) на использование по умолчанию упорядоченных словарных типов, более эффективных с точки зрения потребления памяти и позволяющих добиться более высокой производительности класса collections.OrderedDict;
- Выполнена более аккуратная обработка кодов ошибок (errno, GetLastError, WSAGetLastError) с приближением реализации обработчиков к внешним вызовам функций;
- В документации полностью разделены возможности PyPy, связанные с поддержкой интерпретатора Python и подмножества данного языка со статической типизацией - RPython (http://rpython.readthedocs.org/en/latest/) (Restricted Python), нацеленного на написание быстрых интерпретаторов динамических языков программирования.
Основные особенности PyPy:
- Поддержка бесстекового (Stackless) режима работы, позволяющего использовать модель actor (erlang-подобное программирование с массой микропотоков и отсыланием сигналов друг другу;
- Реализация режима изолированного выполнения кода, к которому нет доверия. От sandbox в CPython данный режим отличается полной поддержкой всех возможностей языка без выделения unsafe-функций.
- Автоматическая генерация и полная прозрачность встроенного JIT-компилятора;
- PyPy успешно проходит стандартный тестовый пакет Python и поддерживает (http://pypy.org/compat.html) большинство из стандартных Python-модулей и фреймворков, таких как ctypes, django (с sqlite), twisted (без поддержки ssl), pylons, pyglet. PyPy может быть использован для бесшовной замены CPython 2.7;
- Поддержка работы на архитектурах x86 (IA-32) , x86_64 и ARM. Ведется работа по адаптации для архитектуры PowerPC (PPC64), но она ещё не завершена;
- На базе технологий PyPy созданы бэкенды для генерации в PyPy байткода для LLVM и виртуальных машин .NET/CLI и Java.
- На базе PyPy ведется разработка реализаций на языке Python интерпретаторов Prolog, Smalltalk, Ruby, JavaScript, Io и Scheme.
- Версия PyPy с поддержкой Python 3 развивается в рамках проекта Py3k (http://www.opennet.ru/opennews/art.shtml?num=40050);
- Вариант PyPy с поддержкой распараллеливания на многоядерных системах развивается в рамках проекта PyPy-STM (http://www.opennet.ru/opennews/art.shtml?num=40150) (PyPy Software Transactional Memory).
URL: http://morepypy.blogspot.ru/2015/02/pypy-250-released.html
Новость: http://www.opennet.ru/opennews/art.shtml?num=41604