The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск PyPy 2.0, реализации Python, написанной на языке Python

10.05.2013 20:44

После 11 месяцев разработки увидел свет выпуск PyPy 2.0. В рамках проекта разрабатывается реализации языка Python, написанная на языке Python (используется статически типизированное подмножество RPython, Restricted Python).

Благодаря задействованию JIT-компилятора, на лету транслирующего некоторые элементы в машинный код, PyPy при выполнении некоторых операций в несколько раз обгоняет по производительности классическую реализацию Python 2.7 на языке Си (CPython). В среднем PyPy 2.0 на 4% быстрее PyPy 1.9 и в 5.7 раз быстрее классического CPython 2.7.3. Ценой высокой производительности и использования JIT-компиляции является более высокое потребление памяти - общее потребление памяти в сложных и длительно работающих процессах (например, при трансляции PyPy силами самого PyPy) превышает потребление CPython в полтора-два раза.

Стабильный выпуск поддерживает x86-системы, включая Linux (32/64 бит), Mac OS X (64 бит) и Windows (32 бит). Одновременно проходит альфа-тестирование вариант PyPy 2.0 для платформы ARM. Выпуск для ARM позиционируется как ознакомительный, так как версия для данной платформы ещё не совсем стабильна и не поддерживает некоторые возможности. В частности, ещё не реализована поддержка бесстекового режима и JIT не всегда корректно генерирует ассемблерный код. Тем не менее, несмотря на ещё до конца не отлаженный и оптимизированный JIT, версия для ARM показывает достаточно неплохие результаты производительности лишь немного уступая варианту для платформы x86 по соотношению производительности с CPython. PyPy для ARM доступен для ARMv6 (Raspberry Pi) и ARMv7 (Beagleboard, Chromebook, Cubieboard) и может работать в режимах hard-float и soft-float.

Новшества, добавленные в PyPy 2.0:

  • Бесстековый режим доведён до работоспособного состояния. В том числе обеспечена поддержка элементов системы многопоточного программирования "greenlet", а также возможность использования eventlet и gevent;
  • В состав PyPy включён новый встроенный модуль cffi с реализацией интерфейса для вызова функций, написанных на языке Си. Данный интерфейс позиционируется как рекомендуемый метод обращения к функциям на языке Си;
  • Для обратных вызовов Python-функций из Си-кода теперь применяется JIT-компиляция, что, например, позволило значительно ускорить выполнение модуля парсинга XML;
  • Проведён рефакторинг JIT-компилятора для генерации машинного кода, оперирующего областями в куче, вместо стека. Подобное изменение позволило обеспечить работу бесстекового режима и открыло новые пути дальнейшей оптимизации;
  • Переработана большая часть классов для работы с массивами из состава библиотеки numpypy, что позволило избавиться от лишних вычислений. Подготовлена более полная реализация dtype и обеспечена поддержка дополнительных атрибутов массивов;
  • Внесено множество оптимизаций производительности.

Основные особенности PyPy:

  • Поддержка бесстекового (Stackless) режима работы, позволяющего использовать модель actor (erlang-подобное программирование с массой микропотоков и отсыланием сигналов друг другу, но при этом (в отличии от erlang) всё происходит в одном физическом потоке ОС);
  • Реализация режима изолированного выполнения кода, к которому нет доверия. От sandbox в CPython данный режим отличается полной поддержкой всех возможностей языка без выделения unsafe-функций.
  • Автоматическая генерация и полная прозрачность встроенного JIT-компилятора;
  • PyPy успешно проходит стандартный тестовый пакет Python и поддерживает большинство из стандартных 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, JavaScript, Io и Scheme.


  1. Главная ссылка к новости (http://morepypy.blogspot.co.uk...)
  2. OpenNews: Релиз PyPy 1.9, реализации Python, написанной на языке Python
  3. OpenNews: Представлен pypy-stm, интерпретатор Python с поддержкой распараллеливания на многоядерных системах
  4. OpenNews: Релиз PyPy 1.8, реализации Python, написанной на языке Python
  5. OpenNews: Проект PyPy представил визуализатор процесса JIT-компиляции и обрисовал ситуацию, когда PyPy быстрее языка Си
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/36904-pypy
Ключевые слова: pypy, python
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (30) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (-), 23:25, 10/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Отлично, ctypes замену прикрутили, а значит библиотеки можно будет прикручивать. Numpy помнится они почти собрали запрашиваемую сумму под проект. В общем, торт.
     
  • 1.5, Аноним (-), 23:31, 10/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ему всё так же требуется 4 гига для компиляции? Раздельную трансляцию модулей когда приладят?
     
     
  • 2.7, all_glory_to_the_hypnotoad (ok), 00:31, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    вот это очень пичально на счёт 4х гб. Требудются они  в самом конце при линковки, косяк на ровном месте
     

  • 1.8, sKotenok (?), 01:19, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь тестил Django на PyPy? Как оно по соотношению память/процессор в сравнении с cPython?
     
  • 1.9, Хрен с горы (?), 01:23, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Зачем если есть ЖаваСкрипт?
     
     
  • 2.17, sanchous (?), 11:56, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • –6 +/
    плюсую
    чем изобретать интерпретаторов для питонобэйсиков, сделали б годный серверный js
    тогда необходимость во многих php/python/ruby отпадет сама сабой
     
     
  • 3.19, лох (?), 14:10, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • +6 +/
    минусую.
    чем изобретать интерпретаторов для жабобейсиков, сделали б годный клиентский питон.
    А для тех кто в танке - серверных жс и так уже сделано: хотя бы ноде.жс и рино. И чо? Язык, в котором нет даже printf, пусть идёт тёмным лесом.
     
     
  • 4.25, Хрен с горы (?), 20:36, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • –9 +/
    Ну ты и лох.
     
  • 3.33, Аноним (-), 09:47, 15/05/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    node.js - годный, серверный, необходимость в php/python/ruby отпала сама собой. Поздравляю, ваше желание исполнилось!))
     
     
  • 4.34, arisu (ok), 16:18, 15/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > node.js — годный, серверный

    …унылый и кривой. ничем не отличается от массы других костылей, где нет first class continuations.

     

  • 1.10, Аноним (-), 01:26, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    велосипед JRE
     
  • 1.11, Аноним (-), 02:47, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    LuaJIT как-то получше выглядит, да и побыстрей.
     
     
  • 2.12, Аноним (-), 05:57, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    прув давай, мли  gtfo
     
     
  • 3.21, arisu (ok), 19:31, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а зачем пруфы, сравнивающие *полную* реализацию языка (LuaJIT) и непонятного кастрата (PyPy)? кастрат проиграл уже только потому, что он кастрат. будь он даже быстрее всего на свете.
     
     
  • 4.22, Z (??), 20:14, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ага - ЩАС! Твой Lua - кастрат от рождения, его даже полная версия с самой кастрированной ритошкой и рядом не лежала.
    Впрочем - кастратам кастратво :)
     
     
  • 5.24, arisu (ok), 20:18, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    как и полагается Иксперту, сравнениями и доказательствами он не утруждается. потому что Иксперт Всегда Изрекает Истину.
     
  • 2.26, eoranged (?), 00:16, 12/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    У LuaJIT не хватает "батареек", красивой многопоточности и зеленых потоков, так что сравнивать тут трудновато.
    Если сравнивать непосредственно JIT-компилятор, то LuaJIT на данный момент является самым быстрым, эффективным и полнофункциональным из всего, что я видел. Если рассматривать всю экосистему целиком, то PyPy сейчас выглядит очень и очень здорово.
     
     
  • 3.27, Аноним (-), 01:26, 12/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    О каких именно батарейках речь? Интерфейсы вроде ко всему основному есть, модный веб-фреймворк вот недавно запилили тоже (Lapis). LPEG для парсеров, и прочие "тяжелые" вещи тоже вроде присутствуют. Ну а "вниз" вообще всё хорошо, см. тот же ljsyscall.
     

  • 1.13, Ян Злобин (ok), 09:02, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Питон на питоне?  Оригинально! :-)
     
     
  • 2.23, Z (??), 20:15, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    > Питон на питоне?  Оригинально! :-)

    Дурак на OpenNet-e? Обыденно. Увы :(

     
     
  • 3.28, Ян Злобин (ok), 07:14, 12/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    >> Питон на питоне?  Оригинально! :-)
    > Дурак на OpenNet-e? Обыденно. Увы :(

    Ну ооочень умное замечание.  Прямо таки ослепляющий интеллект анонима.

     

  • 1.14, Восторженый школьник (?), 09:15, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А насколько быстрее будет pypy если загрузить его используя pypy?
     
  • 1.15, Аноним (-), 10:11, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Даешь PyPyPy 1.0!
     
  • 1.16, ragus (ok), 10:15, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/

    > Новшества, добавленные в PyPy 2.0:
    > -  Бесстековый режим доведён до работоспособного состояния. В том числе обеспечена
    > поддержка элементов системы многопоточного программирования "greenlet (http://greenlet.readthedocs.org/)",
    > а также возможность использования eventlet и gevent;

    eventlet работает, но там засада с версией zeromq, работающим с pypy.
    gevent на данный момент не работает(к большому сожалению).

    самое приятное, что можно наконец-то запустить несколько потоков и все они задействуют несколько cpu.

     
  • 1.18, am2 (?), 12:24, 11/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а для перла есть такая штука?
     
     
  • 2.20, Аноним (-), 16:16, 11/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Ждем ПеПе, РуРу и ПхПх?
     
  • 2.29, ragus (ok), 18:48, 12/05/2013 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > а для перла есть такая штука?

    мертвый же язык.

     
     
  • 3.31, am2 (?), 15:24, 13/05/2013 [^] [^^] [^^^] [ответить]  
  • +/
    perl медленно живет, питон медленно умирает не родившись
     

  • 1.30, Главные Редакторы (?), 09:11, 13/05/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как может интерпритатор питона на питоне работать быстрее самого питона?
     
     
  • 2.32, Аноним (-), 18:49, 13/05/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ИнтерпрЕтатор питона на питоне работает медленнее самого питона, быстрее питона работает код, сгенерированный интерпретатором питона на питоне, оснащенного JIT-компилятором питона на питоне
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру