Что PyPy может предложить по сравнению с CPython, Jython и IronPython?
-
03-07-2019 - |
Вопрос
Судя по тому, что я видел и читал в блогах, PyPy - очень амбициозный проект.Каковы некоторые преимущества, которые он принесет в таблицу по сравнению со своими братьями и сестрами (CPython, Jython и IronPython)?Это скорость, кросс-платформенная совместимость (включая мобильные платформы), возможность использовать c-расширения без GIL, или это скорее техническое упражнение на то, что можно сделать?
Решение
PyPy - это действительно два проекта:
- Набор инструментов компилятора интерпретатора, позволяющий вам писать интерпретаторы на RPython (статическое подмножество Python) и иметь кроссплатформенные интерпретаторы, скомпилированные автономно, для JVM, для .NET (etc)
- Реализация Python в RPython
Эти два проекта позволяют многие вещи.
- Поддерживать Python на Python намного проще, чем на C
- Из одной кодовой базы вы можете генерировать интерпретаторы Python, которые работают на JVM, .NET и standalone, вместо того, чтобы иметь несколько слегка несовместимых реализаций
- Часть набора инструментов компилятора включает экспериментальный JIT-генератор (сейчас в его пятом воплощении и он начинает работать действительно хорошо) - цель предназначен для запуска JITed PyPy многое быстрее, чем CPython
- Гораздо проще экспериментировать с фундаментальными функциями языка - такими как удаление GIL, улучшенная сборка мусора, интеграция без стекирования и так далее
Так что на самом деле есть много причин для того, чтобы PyPy был захватывающим, и он, наконец, начинает оправдывать все свои обещания.
Другие советы
Самой важной особенностью, конечно же, является JIT-компилятор. В CPython файлы компилируются в байт-код ( .pyc
) или оптимизируются в байт-код ( .pyo
) и затем интерпретируются. С PyPy они будут скомпилированы в нативный код. PyPy также включает в себя Stackless Python патчи, в том числе впечатляющие features (сериализация тасклетов, легкие потоки и т. д.)
В случае, если Python получит настоящий JIT , я думаю, что Быть так же быстро, как и любая другая реализация.
Преимущество заключается в том, что гораздо проще внедрять новые функции. Это можно увидеть сегодня, наблюдая за библиотекой. Часто модули пишутся сначала на Python, а затем переводятся на C.
кросс-платформенная совместимость
ДА