Возможно ли скомпилировать Python для машинного кода? - PullRequest
116 голосов
/ 26 сентября 2008

Насколько возможно было бы скомпилировать Python (возможно, через промежуточное представление C) в машинный код?

Предположительно, для этого потребуется ссылка на библиотеку времени выполнения Python, и любые части стандартной библиотеки Python, которые сами были Python, также должны были бы быть скомпилированы (и связаны).

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

Обеспечит ли это какие-либо преимущества в скорости и / или использовании памяти? Предположительно время запуска интерпретатора Python будет устранено (хотя разделяемые библиотеки все равно будут загружаться при запуске).

Ответы [ 13 ]

2 голосов
/ 26 сентября 2008

Ответ: «Да, это возможно». Вы можете взять код Python и попытаться скомпилировать его в эквивалентный код C, используя API CPython. На самом деле, когда-то был проект Python2C, который делал именно это, но я не слышал об этом много лет (в Python 1,5 дня назад я видел его в последний раз).

Вы можете попытаться как можно больше перевести код Python на нативный C и использовать CPython API, когда вам нужны реальные возможности Python. Я сам играл с этой идеей последние месяц или два. Однако это огромная работа, и огромное количество возможностей Python очень трудно перевести на C: вложенные функции, генераторы, все, кроме простых классов с простыми методами, все, что связано с изменением глобальных переменных модуля извне модуля и т. Д. и т. д.

2 голосов
/ 26 сентября 2008

Psyco - это своего рода JIT-компилятор: динамический компилятор для Python, выполняет код в 2-100 раз быстрее, но требует много памяти.

Вкратце: он запускает существующее программное обеспечение Python намного быстрее, без изменений в исходном коде, но не компилируется в объектный код так же, как компилятор C.

1 голос
/ 11 декабря 2018
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...