The OpenNET Project / Index page

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

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

Проект 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
Тип: К сведению
Ключевые слова: emscripten, javascript, llvm
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.2, Клыкастый, 13:34, 13/11/2012 [ответить] [смотреть все]
  • +/
    Во, теперь интересующимся парням проще будет портировать операционки в браузер! :)
     
  • 1.3, Аноним, 13:57, 13/11/2012 [ответить] [смотреть все]
  • +/
    А как он сам себя пересобирает Вот gcc из исходников собирает gcc, который може... весь текст скрыт [показать]
     
     
  • 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, 14:45, 13/11/2012 [ответить] [смотреть все]  
  • –1 +/
    Какой-то полный абсурд.
     
     
  • 2.7, Аноним, 15:10, 13/11/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Вы просто читаете перевод Что какбэ намекает http mozakai blogspot ru 2012 1... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.8, Vkni, 15:15, 13/11/2012 [^] [ответить] [смотреть все]  
  • +1 +/
    Да нет, сама идея перевода из байт-кода в Ява-Скрипт для выполнения на компьютер... весь текст скрыт [показать]
     
     
  • 4.11, Аноним, 16:43, 13/11/2012 [^] [ответить] [смотреть все]  
  • +/
    отлично иллюстрирует мысль про то что все ЯП эквивалентны Хоть это и дикое и... весь текст скрыт [показать]
     
     
  • 5.14, Vkni, 17:16, 13/11/2012 [^] [ответить] [смотреть все]  
  • +4 +/
    На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM А н... весь текст скрыт [показать]
     
     
  • 6.18, Xasd, 18:19, 13/11/2012 [^] [ответить] [смотреть все]  
  • +/
    точно так и напичать надо в W3C-документах а реализация -- на усмотрения разра... весь текст скрыт [показать]
     
  • 6.19, Аноним, 18:29, 13/11/2012 [^] [ответить] [смотреть все]  
  • +/
    На самом деле - спорный вопрос - С точки зрения перфоманса - да - С точки зре... весь текст скрыт [показать]
     
     
  • 7.20, Аноним, 18:49, 13/11/2012 [^] [ответить] [смотреть все]  
  • +/
    Жабаскрипт отлично обфусцируется, и в таком случае понять его не легче, чем байт... весь текст скрыт [показать]
     
     
  • 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, 06:43, 15/11/2012 [^] [ответить] [смотреть все]  
  • +/
    а ничего, что все современные js-движки всё равно компилируют в 171 родной 18... весь текст скрыт [показать]
     
  • 7.21, Vkni, 18:54, 13/11/2012 [^] [ответить] [смотреть все]  
  • +/
    > - С точки зрения вгрузки сайтом неизвестного троянского буллшита делающего фиг знает что - не факт, не факт.

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

     
     
  • 8.24, Аноним, 19:55, 13/11/2012 [^] [ответить] [смотреть все]  
  • +/
    Да, это так Зато можно понять обычный код И это в том числе роялит при приняти... весь текст скрыт [показать]
     
     
  • 9.27, Vkni, 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, 20:02, 13/11/2012 [ответить] [смотреть все]  
  • +/
    >можно отметить ядро NetBSD

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

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

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


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor