Компилятор Python

Revision ru1, by alextretyak, 2022-06-11 09:00:20

Как известно, производительности эталонной реализации Python (CPython) и даже JIT-компилятора PyPy порой недостаточно для решения задач (решение не укладывается в ограничение по времени).

Представляю вашему вниманию транспайлер, который переводит Python-код в C++ таким образом, что производительность сгенерированного кода практически не уступает "ручной" реализации решения задачи на C++.

Вот ссылка на страницу проекта: https://11l-lang.org/transpiler/ru

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

Недостатком проекта является существенное количество нюансов и особенностей, которые необходимо учитывать при написании программного кода на языке Python, чтобы он корректно скомпилировался данным транспайлером. Но я считаю, жить с этим можно. Не такая уж большая плата за возможность решать на Python те задачи, с которыми на данный момент справляются только C/C++ и другие компилируемые языки. (Большинство этих нюансов и особенностей перечислены в данном руководстве.)

Единственной альтернативой данному транспайлеру с сопоставимой скоростью является по сути только Cython, но там вообще приходится код практически переписывать, чтобы добиться сопоставимой производительности. А код решения задачи ‘Простое число’, приведенный на странице https://11l-lang.org/transpiler/ru, компилируется данным транспайлером как есть, в отличие от Cython.

Если наберётся достаточно большое количество участников Codeforces, поддерживающих данный проект, то не исключена возможность его добавления к поддерживаемым компиляторам в Codeforces [наряду с PyPy, который хоть и уступает данному транспайлеру в производительности, но обладает лучшей поддержкой Python].

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English alextretyak 2022-06-11 09:00:58 1803 Initial revision for English translation
ru1 Russian alextretyak 2022-06-11 09:00:20 1932 Первая редакция (опубликовано)