The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

13.11.2012 12:58

Проект 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).

  1. Главная ссылка к новости (http://mozakai.blogspot.ru/201...)
  2. OpenNews: Ядро и драйверы NetBSD скомпилированы в JavaScript для запуска в web-браузере
  3. OpenNews: Новая версия набора компиляторов LLVM 3.1
  4. OpenNews: repl.it - сервис, позволяющий выполнять в браузере код на 15 языках программирования
  5. OpenNews: Увидел свет Emscripten 1.4, компилятор байткода LLVM в JavaScript-представление
  6. OpenNews: Проекты по компиляции кода на языках Clojure и Pascal в JavaScript-представление
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/35313-emscripten
Ключевые слова: emscripten, javascript, llvm
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (29) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Клыкастый (ok), 13:34, 13/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Во, теперь интересующимся парням проще будет портировать операционки в браузер! :)
     
  • 1.3, Аноним (-), 13:57, 13/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как он сам себя пересобирает? Вот gcc из исходников собирает gcc, который может из исходников собрать gcc. А эта штука из исходников собирается с помощью gcc, а потом из своих исходников генерит JavaScript, а этот JavaScript может из исходников компилятора собрать опять JavaScript в браузере?
     
     
  • 2.13, Аноним (-), 16:49, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А как он сам себя пересобирает?

    google://bootstrap :)

     
  • 2.22, Anonymous from da LOR (?), 19:20, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Compileception.
     

  • 1.4, baz (??), 14:09, 13/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    вооооот оно! скоро машины пересоберут себя, поумнеют и захватят мир!
     
     
  • 2.5, Машина (?), 14:25, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Мы уже это сделали ;)
     
     
  • 3.9, Аноним (-), 16:18, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    А дату запуска ядерных ракет правильно предсказали? Кажется мне уже пора рыть бункер :)
     
     
  • 4.15, некто (?), 17:20, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    кажется уже даже поздно
     
  • 2.32, Vitold S (?), 01:01, 21/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Скорей бы!!!
     

  • 1.6, Vkni (ok), 14:45, 13/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Какой-то полный абсурд.
     
     
  • 2.7, Аноним (-), 15:10, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Вы просто читаете перевод. Что какбэ намекает.
    http://mozakai.blogspot.ru/2012/11/emscripten-compiler-upgrades.html , например
     
     
  • 3.8, Vkni (ok), 15:15, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да нет, сама идея перевода из байт-кода в Ява-Скрипт для выполнения на компьютере кажется абсурдной. Ну это как брать программу в маш. кодах, переводить её на C++ и интерпретировать в ROOT. ;-)

    Я понимаю, зачем нужны дизассемблеры и т.д. - для чтения и модификации программы человеком. Но не компьютером же!

     
     
  • 4.11, Аноним (-), 16:43, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Да нет, сама идея перевода из байт-кода в Ява-Скрипт

    ...отлично иллюстрирует мысль про то что все ЯП эквивалентны. Хоть это и дикое извращение, конечно.

    С другой стороны, граждане без плагинов и костылей запустили таким макаром достаточно серьезный 3D двигун (через webGL). Даже в принципе работает вполне себе - https://developer.mozilla.org/ru/demos/detail/bananabread

    Побегал, попалил. FPS конечно раза в три ниже нативного кода, но для вебни - довольно убедительно.

     
     
  • 5.14, Vkni (ok), 17:16, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +4 +/
    На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM. А не наоборот. :-)
     
     
  • 6.18, Xasd (ok), 18:19, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM. А не наоборот. :-)

    точно!

    так и напичать надо в W3C-документах!

    а реализация -- на усмотрения разработчиков браузеров...

    ..вот например в Mozilla -- могут всунуть реализацию на Javascript :)

     
  • 6.19, Аноним (-), 18:29, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM.

    На самом деле - спорный вопрос.
    - С точки зрения перфоманса - да.
    - С точки зрения вгрузки сайтом неизвестного троянского буллшита делающего фиг знает что - не факт, не факт.

     
     
  • 7.20, Аноним (-), 18:49, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > С точки зрения вгрузки сайтом неизвестного троянского буллшита делающего фиг знает что - не факт, не факт.

    Жабаскрипт отлично обфусцируется, и в таком случае понять его не легче, чем байткод. До сих пор с жабаскриптом как-то жили же - остается заменить его на LLVM, по возможности не меняя все остальное

     
     
  • 8.23, Аноним (-), 19:55, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Тем хуже для вас я просто не буду его запускать априори посчитав его трояном Н... текст свёрнут, показать
     
     
  • 9.26, Аноним (-), 20:35, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Дык это Emscripten вряд ли будет генерировать понятный код... текст свёрнут, показать
     
     
  • 10.28, Аноним (-), 22:02, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Дык это, я его и запускать буду в сильно эксклюзивных случаях В общем случае та... текст свёрнут, показать
     
  • 9.31, arisu (ok), 06:43, 15/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    а ничего, что все современные js-движки всё равно компилируют в 171 родной 18... текст свёрнут, показать
     
  • 7.21, Vkni (ok), 18:54, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > - С точки зрения вгрузки сайтом неизвестного троянского буллшита делающего фиг знает что - не факт, не факт.

    Я сильно сомневаюсь, что можно понять JS код, полученный в результате этой компиляции. :-)

     
     
  • 8.24, Аноним (-), 19:55, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Да, это так Зато можно понять обычный код И это в том числе роялит при приняти... текст свёрнут, показать
     
     
  • 9.27, Vkni (ok), 21:57, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Дык, поэтому уж лучше гонять в LLVM машине, оно хоть быстрее будет ... текст свёрнут, показать
     
     
  • 10.29, Аноним (-), 22:04, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Сложнее понять что делает - проще вообще не гонять Я запускаю только то в чем ... текст свёрнут, показать
     

  • 1.10, Anonimous (?), 16:27, 13/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот сижу я в линуксе, который запущен в браузере, который запущен в линуксе, который....
     
     
  • 2.12, Аноним (-), 16:45, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот сижу я в линуксе, который запущен в браузере, который запущен в
    > линуксе, который....

    Ага. А давайте в браузере запустим линукс в котором запустим виртуализатор, в котором запустим линукс, в котором запустим браузер.

    Как это выглядит? Достаточно направить камеру подключенную к компьютеру на его монитор :)

     

  • 1.25, ZloySergant (ok), 20:02, 13/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >можно отметить ядро NetBSD

    Тостеры, браузеры. Развивается проект, однако :)

     
     
  • 2.30, Аноним (-), 22:52, 13/11/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Помнится, чтобы поставить NetBSD на тостер, пришлось взять плату промышленного компа с линуксом, стереть оттуда линукс, записать NetBSD, и потом прикрутить саморезами к тостеру.
    Возможно, с браузером та же фигня :)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру