Комментарии 28
Непосредственно в ее оригинальном виде, без каких-либо аннотаций.
Я это сделал вот так:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize('lib.py'),
script_args = ['build_ext', '--inplace'],
)
Получил файл вида «lib.<python version and platform>.pyd», который является dll/so-файлом (по соседству с ним и .c), аналогично имеет приоритет при импорте.
Ускорение дает примерно такое же, на моей машине 2.320 сек против 5.337 сек.
Аннотации (вот они уже специфичны для Cython, cdef там всякие) не пробовал добавлять.
В Cython работают над поддержкой аннотаций типов. Не знаю, как там прогресс, но обещали, что можно будет писать на Python, без всяких cdef и подобного.
Такие идеи возникают уже лет 15 если не больше. Проблема в том, что в общем случае относительно типов python доказать что-либо практически невозможно. Слишком много динамических конструкций и магии. В рамках отдельного проекта ещё можно договориться об использовании какого-то подмножества языка (см. например rpython) и получить желанную возможность компилировать код статически, но в масштабе всей экосистемы это не реализуемо.
Что касается динамических конструкцию, то mypy уже вносит достаточно ограничений, осталось исключить monkey patching.
Может нужно было вручную сразу переписать (необходимый) код на С
Может сразу на ассемблер, чего уж?
Пришлось специально прочитать всю статью, чтобы убедиться — имеется ввиду "как скомпилировать программу на python".
А в компиляции самого питона ничего нового не появилось — согласно документации:
./configure
make
make install
Наверное всё-таки трансляция
И обращаю ваше внимание на статью Jukka Lehtosalo, там он говорит, что перевод на PyPy существенно ситуацию (скорость работы mypy) не улучшил, это и сподвигло его к созданию mypy.
Кстати расширения компилируемые mypyc могут работать и с PyPy, для этого генерируются отдельные варианты функций.
Данную проблему можно как-то решить или это из общих ограничений?
Или надо выбирать либо dataclass, либо обычный класс и компиляция.
Как скомпилировать Python