Примечание: Заголовок является сознательно провокационным (чтобы заставить Вас нажать на него, и хотят к голосованию завершения вопрос), и я не хочу выглядеть озабоченным.
Я читал и слышал все больше о PyPy. Это похоже на линейный график.
Почему PyPy является настолько особенным? Насколько я знаю, что реализации динамических языков, записанных на языках самостоятельно, не являются такой редкой вещью, или разве я не получаю что-то?
Некоторые люди даже называют PyPy "будущим" [Python] или видят своего рода глубокий потенциал в этой реализации. Каково точно значение этого?
Поскольку большинство из нас согласны с тем, что писать Python проще, чем C, интерпретатор Python, написанный на Python (ну, технически RPython), должен быть изменен намного проще и с меньшим количеством ошибок, чем CPython.
Не говоря уже о том, что совсем недавно они превзошли скорость CPython в некоторых бенчмарках. См. их блог, я думаю. Я не могу добраться до него отсюда:
Самое интересное в PyPy (помимо того, что он быстрый и написан на RPython (подмножество языка Python), поэтому в основном загружается), это то, что он может предоставлять автоматически созданный JIT (своевременный компилятор) для любой программы, которую вы пишете на PyPy: это делает его идеальным для быстрой реализации вашего собственного языка и при этом он будет довольно быстрым.
Подробнее здесь
Хорошая вещь, которую следует знать, говоря о проекте PyPy, это то, что он нацелен на предоставление двух результатов: первый - это генератор JIT-компиляторов. Да, генератор, что означает, что они создают основу для написания реализаций высокодинамичных языков программирования, таких как Python. Второй - это собственно тест этого фреймворка, и это реализация интерпретатора Python PyPy.
Сейчас есть несколько ответов, почему PyPy такой особенный: разработка проекта ведется с 2004 года, начата как исследовательский проект, а не как компания, переизобретает 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 является unladden swallow (проект Google), цель которого - ускорить реализацию CPython, используя возможности LLVM по JIT, но прогресс в работе над unladden swallow был замедлен, потому что разработчику нужно было разобраться с ошибками в LLVM.
Итак, подводя итог, я полагаю, что PyPy считается будущим Python, потому что он отделяет спецификацию языка от реализации VM. Функции, введенные в, например, stackless Python, могут быть реализованы в PyPy с очень небольшими дополнительными усилиями, потому что это просто изменение спецификации языка, а общий код остается прежним. Меньше кода, меньше ошибок, меньше слияний, меньше усилий.
А написав, например, новую реализацию оболочки bash в RPython, вы можете бесплатно получить JIT-компилятор и ускорить многие скрипты оболочки linux, не изучая никаких тяжелых знаний о JIT.