Доступен релиз проекта Emscripten 1.4, в рамках которого развивается компилятор, способный преобразовать байткод LLVM в представление на языке JavaScript. Байткод LLVM может быть сгенерирован из исходных текстов на Cи/Си++ при помощи компиляторов lvm-gcc и clang, а также из кода на любом другом языке программирования для которого имеется LLVM-фронтэнд. После компиляции на выходе получается скрипт на языке JavaScript, который может быть выполнен внутри web-браузера, используя только штатный JavaScript-движок, без необходимости задействования дополнительных плагинов.
Компилятор написан на языке JavaScript, а тестовый фреймворк и управляющая утилита - на языке Python. Код открыт под лицензией MIT. Основной целью разработки является создание инструмента, который бы позволил выполнять код в Web независимо от языка программирования, на котором данный код написан. Из JavaScript-движков поддерживаются Mozilla SpiderMonkey и Google V8, в остальных движках работа не гарантируется.
Emscripten поддерживает трансляцию вывода библиотеки SDL через canvas. В разработке находится реализация поддержки OpenGL через WebGL. Скорость выполнения программ, преобразованных в Javascript, примерно в десять раз ниже, но ситуация меняется по мере реализации в JavaScript-движках новых методов оптимизации. Кроме того, некоторые дополнительные техники оптимизации планируется реализовать непосредственно в Emscripten.
Интересной демонстрацией возможностей Emscripten стала компиляция в JavaScript-представление интерпретаторов CPython и Lua, которые удалось использовать для выполнения скриптов на языках Python и Lua внутри web-браузера. Из других примеров успешно преобразованных в JavaScript-представление проектов можно упомянуть, игру Doom, движок симуляции физических процессов Pullet physics (с визуализацией через WebGL), PDF-просмотрщик Poppler, систему трассировки лучей (рендеринг организован через canvas), JPEG-декодер OpenJPEG и систему рендеринга TrueType-шрифтов FreeType.
Главным новшеством выпуска Emscripten 1.4 является обеспечение поддержки компиляции динамических библиотек и их загрузки в виде JavaScript-модулей. При этом библиотеки могут использоваться не только неразрывно с каким-то компилируемым приложением, но и сами по себе, т.е. можно преобразовать в JavaScript какую-то полезную библиотеку и использовать её из обычных web-приложений.
Из других похожих проектов можно отметить:
- Google Web Toolkit (GWT) - набор средств для разработки динамических web-приложений, которые изначально могут быть написаны на языке Java, а затем при помощи специального транслятора преобразованы в представление на базе JavaScript и HTML;
- Pyjamas - транслятор для преобразования кода на языке Python в представление на языке JavaScript;
- FlashCCompiler - средство для преобразования LLVM-байткода в вид, пригодный для выполнения в виртуальной машине Adobe Flash;
- Native Client - плагин, позволяющий выполнять в окне web-браузера обычные бинарные программы, ограниченные в специальном изолированном окружении.