На самом деле в этом вопросе есть два аспекта:
- Что она представляет из себя сейчас?
- Чем она должна быть?
Сейчас
На данный момент Nuitka – хорошая замена интерпретатору Python, способная скомпилировать всё, что предлагает CPython 2.6 и 2.7. Она переводит Python в программу С++, которая потом использует “libpython” для выполнения так же, как и CPython, делая это совместимым образом.
Более того, иногда она оказывается быстрее чем CPython, хотя ещё и не всё до конца оптимизированно. 258% на pystone – неплохо для начала (версия 0.3.11).
Будущее
В будущем Nuitka сможет сама определять типы, анализируя программу целиком и используя результат этого анализа для ускорения вычислений. Причём это будет делаться по возможности не через libpython а непосредственно с родными типами данных для С++.
Кроме того, будет возможно интегрировать связи на основе ctypes (ctypes based bindings) без потери скорости (скомпилированная программа будет вызывать библиотеку С++ напрямую в С++)
И, наконец, Вы сможете использовать модуль hints для того, чтобы указать Nuitka те типы данных, о которых она не может догадаться сама.
Теперь и Потом или План
Вот наш путь с вехами:
1: Функциональный паритет с Python, понимание всех конструкций языка и полностью совместимое поведение.
2: Создание наиболее эффективного родного кода для этого. То есть быстро обрабатывать базовые объекты Python.
3: Постоянное усовершенствование – определение того, что может быть скомпилированно и создание более эффективного кода.
4: Автоматическое определение типов данных и работа с ними.
5: Добавить интерфейс для кода на C, так что Nuitka сможет работать с “ctypes” binding как и со связями, написанными на C.
6: Добавить модуль hints, который научит компилятор определять типы данных, используемые программистом.
Где мы сейчас?
Пункт 1 достигнут для Python 2.6 и 2.7, хотя, конечно, ещё остаётся 3.x. Для меня лично 3.x не стоит в числе приоритетов, но всё же надо сделать, чтобы Nuitka работала и на нём. Так что добровольцы приветсвуются!
Со вторым пунктом мы почти закончили, что делает Nuitka почти в два раза быстрее. Хотя вряд ли мы добёмся тут больших успехов, тем не менее наша задача сделать её настолько быстрой, насколько это возможно.
Пункт 3 – работа идёт, что-то улучшается, но мы ещё в начале пути. Так что тут можно многого ещё достичь при правильном определении типов.
Пункт 4 – были предприняты первые шаги. Результаты обнадёживают, но требуется ещё много работы.
Пункты 5 и 6 ещё только стоят в планах.
Самую последнюю версию можно найти тут
Комментариев нет:
Отправить комментарий