Dropbox опубликовал Pyston, базирующуюся на JIT-реализацию языка Python
Проект находится на стадии экспериментальной разработки. Несмотря на то, что он уже вполне работоспособен, для конечных пользователей он пока не подходит, так как поддержка возможностей языка Python сильно ограничена. Из платформ пока поддерживается только x86_64. На текущей стадии развития производительность Pyston отстаёт от проекта PyPy, JIT-реализации Python, написанной на языке Python, но уже опережает интерпретатор CPython.
Работа над проектом началась под впечатлением от достижений движка V8 в плане вывода производительности JavaScript на новый уровень. Потерпев неудачу в экспериментах со статической компиляцией, разработчики из Dropbox попытались воспользоваться технологиями, похожими на те, что используются в современных JavaScript-движках, для повышения производительности Python.
Создание нового проекта (вместо использования наработок PyPy) обусловлено тем, что в PyPy используется трассирующий JIT, базирующийся на компиляции в машинный код часто выполняемых циклов, в то время как современные JavaScript-движки используют JIT на основе трансляции отдельных методов (method-at-a-time). По мнению инженеров Dropbox, method-at-a-time JIT является более перспективной технологией, но она фундаментально отличается от трассирующего JIT и несовместима с ним. Второй причиной было желание использовать консервативный сборщик мусора для обеспечения эффективной поддержки модулей-расширений.
Принцип работы Pyston сводится к разбору кода на языке Python и его трансляции в промежуточное представление LLVM (IR, Intermediate Representation). Далее IR-представление проходит обработку в оптимизаторе LLVM и передаётся для исполнения в JIT-движок LLVM, который преобразует IR-представление в машинный код. Дополнительные фазы оптимизации LLVM пока не используются, их включение в дальнейшем позволит заметно увеличить производительность.
Основная проблема заключается в недоступности для оптимизаторов LLVM низкоуровневых данных о Python-коде, так как эти данные скрыты за системой диспетчеризации динамических типов данных. Так как невозможно точно определить типы переменных в динамическом языке, в Pyston применяется техника вероятностного предсказания типов для объектов. В дальнейшем, после того как определён возможный тип объекта, во время выполнения кода производится проверка правильности принятого решения. Таким образом Pyston постоянно варьирует выполнение между двумя ветками - быстрой, когда данные о предсказанных типах подтверждаются, и медленной, используемой в случае рассогласования данных о типе.
Источник: http://www.opennet.ru/opennews/art.shtml?num=39494
|
0 | Tweet | Нравится |
|