Dropbox опубликовал Pyston, реализацию языка Python, базирующуюся на JIT

4 апреля 2014 года

Компания Dropbox, в которой уже более года работает Гвидо ван Россум, анонсировала первый выпуск проекта Pyston, в рамках которого подготовлена собственная реализация языка Python 2.7, созданная с использованием наработок проекта LLVM, примечательная применением современных технологий JIT-компиляции и нацеленная на достижение высокой производительности, близкой к производительности традиционных системных языков, таких как C++. Код Pyston написан на языке C++ и распространяется под лицензией Apache.

Проект находится на стадии экспериментальной разработки. Несмотря на то, что он уже вполне работоспособен, для конечных пользователей он пока не подходит, так как поддержка возможностей языка 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 постоянно варьирует выполнение между двумя ветками - быстрой, когда данные о предсказанных типах подтверждаются, и медленной, используемой в случае рассогласования данных о типе.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Dropbox опубликовал Pyston, реализацию языка Python, базирующуюся на JIT», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.