Вопрос

Из Блог с открытым исходным кодом Google:

Pypy - это повторное возмещение Python в Python, используя усовершенствованные методы, чтобы попытаться достичь лучшей производительности, чем Cpython. Много лет тяжелой работы наконец-то окупились. Наши результаты скорости часто бьют Cpython, начиная от незначительного медленного, чтобы ускорить до 2x на реальном применении, чтобы ускорить до 10x на небольших тестах.

Как это возможно? Какая реализация Python была использована для реализации Pypy? Cpython.? А каковы шансы на выпипию или пейпипипию, избиение их оценки?

(Обратите внимание ... Почему кто-нибудь попробует что-то вроде этого?)

Это было полезно?

Решение

Q1. Как это возможно?

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

Ограничения в реализации интерпретатора CPYPHON, исключаем определенные оптимизации, которые могут сделать Pypy (например, мелкозернистые замки).

Как упомянул Марсело, джит. Возможность на лету подтвердить, что тип объекта может сэкономить вам необходимость выполнять несколько разряженных графиков указателей, чтобы наконец прибыть на метод, который вы хотите позвонить.

Q2. Какая реализация Python была использована для реализации Pypy?

PYPY-интерпретатор реализован в RYPHON, который представляет собой статически набранное подмножество Python (язык, а не интерпретатор Cpython). - Ссылаться https://pypy.readtheDocs.org/en/latest/architecture.html. для деталей.

Q3. А каковы шансы на выпипию или пейпипипию, избиение их оценки?

Это будет зависеть от реализации этих гипотетических переводчиков. Если один из них, например, взял источник, сделал какой-то анализ на него и преобразовал его непосредственно в жесткий целевой конкретный код монтажа после некоторого времени, я представляю, это будет совсем быстрее, чем CPY.

Обновлять: Недавно на тщательно обработанный пример, Pypy превосходит аналогичную программу C, составленную с gcc -O3. Отказ Это надуманный случай, но демонстрирует некоторые идеи.

Q4. Почему кто-нибудь попробует что-то вроде этого?

С официального сайта. https://pypy.readtheDocs.org/en/latest/architecture.html#mission-statement.

Мы стремимся предоставить:

  • Обычный перевод и поддержка основа для производства
    Реализации динамических языков, подчеркивая чистоту
    Разделение между языковым спецификацией и реализацией
    аспекты. Мы называем это RPython toolchain_.

  • Совместная, гибкая и быстрая реализация языка Python_, который использует вышеупомянутые набора инструментов для включения новых расширенных функций высокого уровня без необходимости кодировать детали низкого уровня.

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

Компилятор C GCC реализован в C, Caskell Compiler GHC написан в Haskell. У вас есть какие-либо причина для переводчика / компилятора Python, чтобы не написать в Python?

Другие советы

«Pypy - это повторное возмещение Python в Python» - это довольно вводящий в заблуждение способ описания Pypy, ИМХО, хотя это технически верно.

Есть две основные части Pypy.

  1. Переводческая структура
  2. Переводчик

Переводческая структура является компилятором. Это компилируется Rpython. Код вниз до C (или других целей), автоматически добавляя в аспекты, такие как сборщик мусора и компилятор JIT. Это не можем обрабатывать произвольный Python код, только RYPHON.

RYPHON - это подмножество нормального питона; Весь код RYPHON - код Python, но не наоборот. Нет формального определения RYPHON, потому что RPYPHON в основном просто «подмножеством Python, который может быть переведен на Fypy Framework». Но для того, чтобы быть переведенным, код RPYPHON должен быть статически набран (Типы выводятся, вы не объявляете их, но это все еще строго один тип за переменную), и вы не можете делать такие, как объявление / модификация функций / классов во время выполнения.

Затем переводчик является обычным интерпретатором Python, написанным в RYPHON.

Поскольку код RPYPHON - это нормальный код Python, вы можете запустить его на любом интерпретатере Python. Но ни один из претензий скорости Pypy не приходит с того, что он так и не работает; Это только для быстрого тестового цикла, потому что перевод переводчика принимает длинная время.

С этим понял, должно быть сразу очевидно, что предположения о выпипии или пейпиппипии на самом деле не имеют смысла. У вас есть переводчик, написанный в RYPHON. Вы переводите его в C-код, который быстро выполняет Python. Там процесс останавливается; Нет больше RyPhon, чтобы ускорить, обрабатывая его снова.

Итак, «Как можно быстрее быть быстрее, чем Cpython», также становится довольно очевидно. Pypy имеет лучшую реализацию, включая JIT Compiler (в целом не так быстро без компилятора джита, я полагаю, что означает, что Pypy только быстрее для программ, восприимчивых к JIT-компиляции). CPYthon никогда не был равен, чтобы быть высоко оптимизированным внедрением языка Python (хотя они пытаются сделать это высоко оптимизирован Реализация, если вы следите за разницей).


Действительно инновационный бит Pypy Project заключается в том, что они не пишут сложные схемы GC или JIT Compilers вручную. Они пишут переводчика относительно простым для того, что RPYPHON, и для всех RYPHON более низкий уровень, чем Python, это все еще, ориентированный на объектно-ориентированный мусор, собранный язык, гораздо более высокий уровень, чем C. Затем перевод автоматически Добавляет вещи, как GC и JIT. Поэтому переводческая структура является огромный Усилие, но одинаково относится одинаково хорошо для переводчика Pypy Python, однако они изменяют свою реализацию, что позволяет намного больше свободы в экспериментах по улучшению производительности (не беспокоясь о введении ошибок GC или обновления Compiler JIT, чтобы справиться с изменениями). Это также означает, что когда они получают, чтобы реализовать интерпретатор Python3, он автоматически получит те же преимущества. И любые другие переводчики, написанные с помощью Pypy Framework (из которых есть число на различных этапах польских). И все переводчики, использующие Pypy Framework, автоматически поддерживают все платформы, поддерживаемые рамками.

Таким образом, истинное преимущество Pypy Project состоит в том, чтобы отделить (как можно больше) все части реализации эффективного независимого от платформы переводчика для динамического языка. И затем придумайте одну хорошую реализацию из них в одном месте, что можно повторно использовать во многих переводчиках. Это не немедленная победа, как «Моя программа Python работает быстрее сейчас», но это отличная перспектива на будущее.

И это может запустить вашу программу Python быстрее (возможно).

Pypy реализуется в Python, но он реализует компилятор JIT для генерации нативного кода на лету.

Причина внедрения Pypy на вершине Python, вероятно, является то, что это просто очень продуктивный язык, особенно поскольку Compiler JIT делает производительность языка хозяина несколько неактуальной.

Pypy написан в ограниченном питоне. Он не бежит на вершине переводчика CPYPHON, насколько я знаю. Ограниченный Python - это подмножество языка Python. AFAIK, Pypy переводчик скомпилирован к машиностроительному коду, поэтому при установке его не использует интерпретатор Python во время выполнения.

Ваш вопрос, по-видимому, ожидает, что Pypy переводчик работает сверху Cpython при выполнении кода.Редактировать: Да, чтобы использовать Pypy, вы сначала переведите Pypy Python Code, либо в C и построить с GCC, к байтому коду JVM, либо к .NET CLI. Видеть Начиная

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top