Второй выпуск Pyston, реализации языка Python с JIT-компилятором
Представлен второй тестовый выпуск проекта Pyston, в рамках которого развивается реализация языка Python 2.7, созданная с использованием наработок проекта LLVM, примечательная применением современных технологий JIT-компиляции и нацеленная на достижение высокой производительности, близкой к производительности традиционных системных языков, таких как C++. Код Pyston написан на языке C++ и распространяется под лицензией Apache. Проект развивается компанией Dropbox, в которой работает Гвидо ван Россум, создатель языка Python. Отмечается, что проект заметно продвинулся по сравнению с первым экспериментальным выпуском. Новый выпуск ознаменовал переход на стадию альфа-тестирования. Код всё ещё не рекомендован для использования в реальных проектах, но уже успешно проходит многие тесты, обеспечивает совместимость со стандартными библиотеками и позволяет выполнять простые программы. Ключевым новшеством выпуска является поддержка экспериментального многопоточного режима работы без глобальной блокировки интерпретатора (GIL, global interpreter lock), позволяющего обеспечить параллельное выполнение нескольких нитей кода на языке Python. Кроме того, значительно улучшена поддержка языка, в том числе обеспечена поддержка API для написания модулей на языке Си. При подготовке следующего выпуска основное внимание планируется уделить наращиванию производительности.
В отличие от проекта PyPy, также продвигающего идею применения JIT для ускорения выполнения Python-скриптов, в Pyston используется не трассирующий JIT, базирующийся на компиляции в машинный код часто выполняемых циклов, а применяемый в современных JavaScript-движках JIT на основе трансляции отдельных методов (method-at-a-time), который, по мнению инженеров Dropbox, является более перспективной технологией. Принцип работы Pyston сводится к разбору кода на языке Python и его трансляции в промежуточное представление LLVM (IR, Intermediate Representation). Далее IR-представление проходит обработку в оптимизаторе LLVM и передаётся для исполнения в JIT-движок LLVM, который преобразует IR-представление в машинный код. Для получения информации о типах переменных для программ на динамическом языке Python применяется техника вероятностного предсказания типов объектов с последующим уточнением правильности выбора типа в процессе выполнения. Таким образом Pyston постоянно варьирует выполнение между двумя ветками — быстрой, когда данные о предсказанных типах подтверждаются, и медленной, используемой в случае рассогласования данных о типе.
© OpenNet