PyPy vs. Nuitka

В последние дни я играл с Nuitka, инструментом, который компилирует Python в исполняемые программы на C/C++.

Я не нашел никакого преимущества в скорости от Nuitka (по сравнению с PyPy). В чем смысл Нуитки, тогда? Я что-то пропустил?

2 ответа

Решение

У Nuitka и PyPy разные цели.

Nuitka выполняет сборку Ahead Of Time (AOT) вашего проекта на языке C с использованием Python C-API. Таким образом, это больше похоже на Cython. Это еще молодой проект, но он впечатляюще достиг полной совместимости с огромной спецификацией языка Python. Следующим шагом будет включение оптимизации в процессе компиляции, так же как gcc -O3, Обратите внимание, что Nuitka используется для преобразования вашего кода Python в исполняемый файл. Затем вы "отправляете" исполняемый файл с некоторой степенью запутанности исходного кода Python.

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

Я ожидаю, что оба проекта будут продолжать улучшать скорость выполнения, но они нацелены на совершенно разные потребности.

Nuitka:Nuitka написана на самом Python, она принимает модуль Python в качестве входных данных и предоставляет программу c в качестве выходных данных. Вывод выполняется для libpython и других статических файлов c и работает как модуль расширения или исполняемый файл.

Важно знать, что скомпилированный вывод Nuitka сильно оптимизирован и работает быстрее, чем необработанная программа на Python, но по-прежнему не соответствует производительности исполняемого файла, созданного из чистого кода C. Многие разработчики заявляют, что они увеличили скорость работы с программами, скомпилированными Nuitka, в 4 раза по сравнению с базовой интерпретацией кода Python.

Лучшая часть Nuitka заключается в том, что она совместима практически со всеми версиями Python, включая 3.3, 3.9, 2.6, 2.7 и другие.

На данный момент он также очень активно развивается, и разработчики стремятся превратить Nuitka в компилятор, который может обеспечить производительность на языке C из кода Python.

PyPy: как и Nuitka, PyPy также поддерживает спецификации Python 2 и Python 3. PyPy - самая популярная альтернатива CPython, который является компилятором Python по умолчанию.

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

Скорость выполнения - не единственное преимущество, которое вы получаете с PyPy, она также снижает использование памяти и предоставляет возможность писать бесстековые приложения, как это делает бесстековый python.

Также важно отметить, что PyPy не дает вам преимущества в производительности или использовании памяти для краткосрочных процессов. Однако прирост производительности значительно заметен, когда у вас есть длительные процессы.

Недостаток производительности при коротких выполняемых процессах в основном объясняется тем, что компиляторам JIT требуется время для разогрева и, следовательно, накладные расходы на инициализацию.

То же самое верно и для использования памяти: с небольшими программами дополнительная память, необходимая JIT, перевешивает любые преимущества, полученные от выполнения скомпилированного кода. Разработчики экспериментировали с PyPy, чтобы повысить производительность до 15 раз по сравнению с выполнением необработанного кода Python.

Более подробную информацию можно найти здесь, в Nuitka vs PyPy.

Другие вопросы по тегам