Представлен (http://morepypy.blogspot.ru/2013/11/pypy-22-incrementalism.html) релиз PyPy 2.2 (http://pypy.org/), реализации языка Python, написанной на языке Python (используется статически типизированное подмножество RPython (http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html#re...), Restricted Python). Версия PyPy 2.2 примечательна интеграцией инкрементального сборщика мусора, разработка которого была профинансирована организацией Raspberry Pi Foundation. Кроме того, в код внесены очередные оптимизации - новый выпуск в среднем на 1% быстрее (http://speed.pypy.org/) прошлой версии PyPy и в 6.2 раза быстрее классического CPython 2.7.3. Выпуск доступен для x86-систем Linux 32/64, Mac OS X 64 и Windows 32, а также для систем на базе архитектуры ARM (ARMv6 или ARMv7 с VFPv3).
<center><img src="http://www.opennet.me/opennews/pics_base/0_1384718582.png" style="border-style: solid; border-color: #e9ead6; border-width: 15px;" title="" border=0></center>
Благодаря задействованию JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, PyPy при выполнении некоторых операций в несколько раз обгоняет по производительности классическую реализацию Python на языке Си (CPython). Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.
Новшества, добавленные в PyPy 2.2:
- Новый инкрементальный сборщик мусора, позволяющий избежать подвисаний в процессе чистки значительной коллекции объектов. Ранее, в редких случаях, сборщик мусора мог приостановить выполнение программы во время перебора всех активных объектов. Чем больше объекты занимали памяти, тем дольше могли длиться такие приостановки. В новом сборщике мусора работа разбивается на несколько шагов, позволяющих минимизировать время блокировок. Блокировки по прежнему возникают при работе отдельных шагов сборки мусора и в процессе деятельности JIT, но теперь их время не должно превышать 5 миллисекунд;
- Обеспечено периодическое уменьшение счётчиков JIT-перекомпиляции, что позволяет сократить потребление памяти из-за накопления результатов JIT-компиляции редко выполняемого кода в длительно работающих процессах;
- Библиотека для выполнения научных расчётов NumPyPy разбита на две части: в кодовой базе PyPy оставлен только базовй модуль _numpypy, остальные компоненты выделены в отдельный репозиторий PyPy NumPy (https://bitbucket.org/pypy/numpy). В NumPy добавлена поддержка рудиментарного C API, используемого совместно с cpyext;
- Задействован JIT при выполнении кода, использующего sys.set_trace;
- Увеличена скорость декодирования JSON;
- Ускорены операции копирования содержимого буферов и сокращены накладные расходы при выполнении не-inline вызовов;
- Написаны ранее отсутствующие функции os.*(), в том числе os.startfile() для платформы Windows и некоторые редкоиспользуемые вызовы для POSIX.
Параллельно развиваются два экспериментальных проекта, наработки которых в скором времени войдут в состав основного дерева исходных текстов PyPy: Py3k - версия с поддержкой Python 3; STM (PyPy Software Transactional Memory) - вариант (http://www.opennet.me/opennews/art.shtml?num=33817) PyPt с поддержкой распараллеливания на многоядерных системах.
Основные особенности PyPy:
- Поддержка бесстекового (Stackless) режима работы, позволяющего использовать модель actor (erlang-подобное программирование с массой микропотоков и отсыланием сигналов друг другу, но при этом (в отличии от 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.
URL: http://permalink.gmane.org/gmane.comp.python.announce/11263
Новость: http://www.opennet.me/opennews/art.shtml?num=38448