Подтвердить что ты не робот

PyPy: О чем все шумит?

Примечание: заголовок преднамеренно провокационный (чтобы вы нажимали на него и хотели закрыть вопрос), и я не хочу выглядеть озабоченным.

Я читал и слышал все больше о PyPy. Это похоже на линейный граф.

  • Почему PyPy так особенный? Насколько я знаю, реализация динамических языков, написанных на самих языках, не такая редкая вещь, или я ничего не получаю?

  • Некоторые люди даже называют PyPy "будущее" [python] или видят какой-то глубокий потенциал в этой реализации. В чем именно смысл этого?

4b9b3361

Ответ 1

Хорошо знать, когда речь идет о проекте PyPy, заключается в том, что он нацелен на фактическое предоставление двух результатов: во-первых, это генератор компилятора JIT. Да, генератор, что означает, что они реализуют структуру для написания реализаций высокодинамичных языков программирования, таких как Python. Второй - фактический тест этой структуры и является реализацией интерпретатора PyPy Python.

Теперь есть несколько ответов, почему PyPy является настолько особенным: разработка проекта выполняется с 2004 года, начатая как исследовательский проект, а не из компании, reimplements Python в Python, реализует JIT-компилятор в Python и может переводить RPython (Код Python с некоторыми ограничениями для того, чтобы инфраструктура могла перевести этот код на C) на скомпилированный двоичный файл.

Текущая версия PyPy 99% совместима с CPython версии 2.5 и может запускать Django, Twisted и многие другие программы Python. Раньше существовало ограничение на невозможность запуска существующих расширений CPython C, но это также рассматривается с помощью модуля cpyext в PyPy. Совместимость C API возможна и в некоторой степени уже реализована. JIT также очень реальна, см. Это сравнение pystone.

С CPython:

Python 2.5.5 (r255:77872, Apr 21 2010, 08:44:16) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from test import pystone
>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 12.28
This machine benchmarks at 81433.2 pystones/second

С PyPy:

Python 2.5.2 (75632, Jun 28 2010, 14:03:25)
[PyPy 1.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``A radioactive cat has 18
half-lives.''
>>>> from test import pystone
>>>> pystone.main(1000000)
Pystone(1.1) time for 1000000 passes = 1.50009
This machine benchmarks at 666625 pystones/second

Таким образом, вы можете получить почти 10-кратное ускорение, просто используя PyPy для некоторых вычислений!

Итак, поскольку проект PyPy медленно созревает и дает некоторые преимущества, он привлекает больше интереса со стороны людей, пытающихся решить проблемы скорости в своем коде. Альтернатива PyPy - это проглатывание (проект Google), целью которого является ускорение реализации CPython с использованием возможностей LLVM JIT, но прогресс в проглатывании неплатежей замедлился, потому что разработчику необходимо было иметь дело с ошибками в LLVM.

Итак, чтобы подвести итог, я полагаю, что PyPy считается будущим Python, поскольку он отделяет спецификацию языка от реализации VM. Особенности, введенные, например. Stackless Python, затем может быть реализован в PyPy с очень небольшими дополнительными усилиями, поскольку он просто изменяет спецификацию языка, и вы сохраняете общий код одинаковым. Меньше кода, меньше ошибок, меньше слияния, меньше усилий.

И, написав, например, новую реализацию оболочки bash в RPython, вы можете бесплатно получить компилятор JIT и ускорить многие сценарии оболочки Linux, не изучая при этом каких-либо тяжелых знаний JIT.

Ответ 2

Увидимся так... Предположим, вы хотите реализовать свой собственный динамический язык, и вы хотите быстро его выполнить. У вас есть два варианта: жесткий путь и pypy.

Трудный способ означает написание вашего интерпретатора в c, а затем реализацию jit вручную, также в c, с использованием сочетания очень сложных методов, таких как метод-jit, threaded-jit, tracing jit, полиморфные встроенные кеши, инвариант цикла движения и т.д., и т.д.... в течение нескольких лет настраивая его, и если вы упорно много, и вы не сдавайтесь, вы можете в конечном итоге с реализацией быстро динамического языка.

Или вы можете использовать pypy framework. Это означает, что написание вашего интерпретатора в python вместо c (на самом деле это будет rpython, более ограниченное подмножество python, которое может быть скомпилировано с помощью c). Как только вы написали свой интерпретатор, pypy автоматически создаст jit бесплатно. И в основном вы делаете.

Звучит неплохо, а?

Ответ 3

Прохладная вещь о PyPy (помимо быстрого и написанного в RPython (подмножество языка Python), который в основном загружается, заключается в том, что он может предоставить автоматически созданный JIT (только во время компилятора ) для любой программы, которую вы пишете в PyPy: это делает ее идеальной для реализации, быстро, вашего собственного языка и пусть она будет довольно быстрой.

Подробнее здесь

Ответ 4

Не говоря уже о том, что они совсем недавно превысили скорость CPython на некоторых тестах. По-моему, их блог. Я не могу этого достичь:

http://morepypy.blogspot.com/

Ответ 5

Поскольку большинство из нас согласны с тем, что проще писать Python, чем C, интерпретатор Python, написанный на Python (ну, технически RPython), должен быть способен значительно модифицироваться и с меньшими ошибками, чем CPython.