Компилятор Emscripten достиг возможности собственной пересборки

13 ноября 2012 года

Проект Emscripten, в рамках которого развивается компилятор, способный преобразовать биткод LLVM в представление на языке JavaScript, подвергся значительной архитектурной переработке, что позволило обеспечить возможность собственной пересборки и заметно подняло производительность как самого компилятора, так и генерируемого им JavaScript-кода. Возможность пересобрать себя является важной ступенью в развитии компиляторов, демонстрирующей его зрелость и функциональность.

Не меньше впечатляет работа по повышению производительности. В частности, удалось реализовать распараллеливание выполнения оптимизатора, что позволило добиться практически линейного роста производительности при увеличении числа процессорных ядер. Дополнительно проведена работа по добавлению паралеллизации работы компилятора - в коде преобразования LLVM IR в JavaScript обеспечена возможность распараллеливания выполнения фазы обработки функций, которая занимает 95% времени работы компилятора.

Кроме того, в Emscripten удалось интегрировать систему устранения избыточных переменных (например, комбинация "var x = f(a); var y = x + g(b);" будет сведена к "var y = f(a) + g(b);"), что позволило заметно сократить размер получаемого кода и увеличить его производительность за счёт сокращения числа операций. Также была добавлена новая реализация алгоритма оптимизации Relooper, работающего на стадии генерации кода и позволяющего формировать оптимальные для движков JavaScript циклы и условные переходы. Переработка Relooper позволила добиться ускорения работы примерно на 20%. Новый код Relooper написан на языке C++. Перед использованием в Emscripten код Relooper компилируется из С++ в JavaScript.

Основной целью развития проекта Emscripten является создание инструмента, который позволил бы выполнять в Web код независимо от языка программирования, на котором данный код написан. Emscripten позволяет осуществить компиляцию биткода LLVM в скрипт на языке JavaScript, который может быть выполнен внутри web-браузера, используя только штатный JavaScript-движок, без необходимости задействования дополнительных плагинов. Биткод LLVM может быть сгенерирован из исходных текстов на C/C++ при помощи компиляторов lvm-gcc и clang, а также из кода на любом другом языке программирования, для которого имеется LLVM-фронтэнд. Emscripten поддерживает трансляцию вывода библиотеки SDL через canvas, а также предоставляет поддержку OpenGL через WebGL. Среди проектов, которые удалось успешно пересобрать для работы в браузере, можно отметить ядро NetBSD, интерпретаторы CPython, Ruby и Lua, PDF-просмотрщик Poppler, систему рендеринга TrueType-шрифтов FreeType, декодировщик видео H.264, игру Doom, 3D игру BananaBread основанную на движке Sauerbraten (используется WebGL).

Источники

править


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

Комментарии

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