«PyPy - это повторная реализация Python в Python» - довольно вводящий в заблуждение способ описать PyPy, ИМХО, хотя это технически верно.
Есть две основные части PyPy.
- Структура перевода
- Интерпретатор
Структура перевода является компилятором.Он компилирует RPython код до C (или других целей), автоматически добавляя такие аспекты, как сборка мусора и JIT-компилятор. не может обрабатывать произвольный код Python, только RPython.
RPython является подмножеством нормального Python;весь код RPython - это код Python, но не наоборот.Формального определения RPython не существует, потому что RPython - это просто «подмножество Python, которое можно перевести с помощью среды перевода PyPy».Но для перевода код RPython должен быть статически типизирован (типы выводятся, вы не объявляете их, но это все равно строго один тип для каждой переменной), и вы не можете ничего делатькак и объявление / изменение функций / классов во время выполнения.
В этом случае интерпретатор является обычным интерпретатором Python, написанным на RPython.
Поскольку код RPython - это обычный код Python, его можно запустить на любом Pythonпереводчик.Но ни одно из заявлений PyPy о скорости не исходит из того, что он работает таким образом;это просто для быстрого цикла тестирования, потому что перевод интерпретатора занимает долго времени.
С этим пониманием должно быть сразу очевидно, что спекуляции о PyPyPy или PyPyPyPy на самом деле не вызываютлюбое чувство.У вас есть переводчик, написанный на RPython.Вы переводите его в код C, который быстро выполняет Python.Там процесс останавливается;нет больше RPython, чтобы ускорить его повторную обработку.
Так что "Как PyPy может быть быстрее, чем CPython", также становится довольно очевидным.PyPy имеет лучшую реализацию, включая JIT-компилятор (я думаю, что без JIT-компилятора, как правило, не так быстро, что означает, что PyPy быстрее только для программ, чувствительных к JIT-компиляции).CPython никогда не был спроектирован так, чтобы быть высокооптимизирующей реализацией языка Python (хотя они стараются сделать его очень оптимизированной реализацией, если вы понимаете разницу).
действительно инновационный аспект проекта PyPy заключается в том, что они не пишут сложные схемы GC или JIT-компиляторы вручную.Они пишут интерпретатор относительно просто в RPython, и для всех RPython является более низким уровнем, чем Python, он по-прежнему является объектно-ориентированным языком сборки мусора, гораздо более высоким уровнем, чем C. Затем инфраструктура перевода автоматически добавляет такие вещи, как GCи JIT.Таким образом, среда перевода - это огромное усилие, но она в равной степени применима и к интерпретатору Python Python, однако они меняют свою реализацию, предоставляя гораздо большую свободу в экспериментах для повышения производительности (не беспокоясь о появлении ошибок GC или обновлении).JIT-компилятор, чтобы справиться с изменениями).Это также означает, что когда они приступят к реализации интерпретатора Python3, он автоматически получит те же преимущества.И любые другие интерпретаторы, написанные с помощью платформы PyPy (которых на разных этапах полировки много).И все интерпретаторы, использующие инфраструктуру PyPy, автоматически поддерживают все платформы, поддерживаемые платформой.
Таким образом, истинное преимущество проекта PyPy состоит в том, чтобы отделить (насколько это возможно) все части реализации эффективной независимой от платформы платформы.переводчик для динамического языка.А затем придумайте одну хорошую реализацию их в одном месте, которую можно будет повторно использовать во многих переводчиках.Это не мгновенная победа, как «моя Python-программа работает быстрее сейчас», но это большая перспектива на будущее.
И она может запустить вашу Python-программу быстрее (возможно).