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

Комментарии[править]

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