The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Компилятор Emscripten достиг возможности собственной пересбо..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от opennews (ok) on 13-Ноя-12, 13:15 
Проект Emscripten (http://emscripten.org/), в рамках которого развивается компилятор, способный преобразовать биткод LLVM (http://llvm.org/) в представление на языке JavaScript, подвергся (http://mozakai.blogspot.ru/2012/11/emscripten-compiler-upgra...) значительной архитектурной переработке, что позволило обеспечить возможность собственной пересборки и заметно подняло производительность как самого компилятора, так и генерируемого им JavaScript-кода. Возможность пересобрать самого себя является важной ступенью в развитии компиляторов, демонстрирующую его зрелость и функциональность.


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


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

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


URL: http://mozakai.blogspot.ru/2012/11/emscripten-compiler-upgra...
Новость: https://www.opennet.ru/opennews/art.shtml?num=35313

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


2. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Клыкастый (ok) on 13-Ноя-12, 13:34 
Во, теперь интересующимся парням проще будет портировать операционки в браузер! :)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 13:57 
А как он сам себя пересобирает? Вот gcc из исходников собирает gcc, который может из исходников собрать gcc. А эта штука из исходников собирается с помощью gcc, а потом из своих исходников генерит JavaScript, а этот JavaScript может из исходников компилятора собрать опять JavaScript в браузере?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

13. "Компилятор Emscripten достиг возможности собственной пересбо..."  –1 +/
Сообщение от Аноним (??) on 13-Ноя-12, 16:49 
> А как он сам себя пересобирает?

google://bootstrap :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

22. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Anonymous from da LOR on 13-Ноя-12, 19:20 
Compileception.
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

4. "Компилятор Emscripten достиг возможности собственной пересбо..."  +1 +/
Сообщение от baz (??) on 13-Ноя-12, 14:09 
вооооот оно! скоро машины пересоберут себя, поумнеют и захватят мир!
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Компилятор Emscripten достиг возможности собственной пересбо..."  +10 +/
Сообщение от Машина on 13-Ноя-12, 14:25 
Мы уже это сделали ;)
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

9. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 16:18 
А дату запуска ядерных ракет правильно предсказали? Кажется мне уже пора рыть бункер :)
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

15. "Компилятор Emscripten достиг возможности собственной пересбо..."  +2 +/
Сообщение от некто on 13-Ноя-12, 17:20 
кажется уже даже поздно
Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

32. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Vitold S on 21-Ноя-12, 01:01 
Скорей бы!!!
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Компилятор Emscripten достиг возможности собственной пересбо..."  –1 +/
Сообщение от Vkni (ok) on 13-Ноя-12, 14:45 
Какой-то полный абсурд.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 15:10 
Вы просто читаете перевод. Что какбэ намекает.
http://mozakai.blogspot.ru/2012/11/emscripten-compiler-upgra... , например
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Компилятор Emscripten достиг возможности собственной пересбо..."  +1 +/
Сообщение от Vkni (ok) on 13-Ноя-12, 15:15 
Да нет, сама идея перевода из байт-кода в Ява-Скрипт для выполнения на компьютере кажется абсурдной. Ну это как брать программу в маш. кодах, переводить её на C++ и интерпретировать в ROOT. ;-)

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

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 16:43 
> Да нет, сама идея перевода из байт-кода в Ява-Скрипт

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

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

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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

14. "Компилятор Emscripten достиг возможности собственной пересбо..."  +4 +/
Сообщение от Vkni (ok) on 13-Ноя-12, 17:16 
На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM. А не наоборот. :-)
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

18. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Xasd (ok) on 13-Ноя-12, 18:19 
> На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM. А не наоборот. :-)

точно!

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

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

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

19. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 18:29 
> На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM.

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

20. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 18:49 
> С точки зрения вгрузки сайтом неизвестного троянского буллшита делающего фиг знает что - не факт, не факт.

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

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

23. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 19:55 
> Жабаскрипт отлично обфусцируется,

Тем хуже для вас: я просто не буду его запускать априори посчитав его трояном. Ну как я априори считал в свое время заведомо подозрительными любой packed/crypted EXE и обнаружив что код засран просто стирал файл без дальнейших разбирательств (ибо тогда виртуалки для исследования сомнительной дряни были не особо развиты еще).

> и в таком случае понять его не легче, чем байткод.

Я и не собираюсь этого делать - за меня его поймет NoScript. Который просто гасит по дефолту любую интерактивность. А там уже я разбираюсь что и нафига. Если я понимаю зачем это надо - могу разрещить. Не понимаю -> идет в сад.

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

26. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 20:35 
Дык это... Emscripten вряд ли будет генерировать понятный код
Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

28. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 22:02 
> Дык это... Emscripten вряд ли будет генерировать понятный код

Дык это, я его и запускать буду в сильно эксклюзивных случаях. В общем случае такой сайт залетит в untrusted и больше никогда ничего не сможет выполнять из веба на моем компьютере.

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

31. "Компилятор Emscripten достиг возможности собственной..."  +/
Сообщение от arisu (ok) on 15-Ноя-12, 06:43 
> Тем хуже для вас: я просто не буду его запускать априори посчитав
> его трояном.

а ничего, что все современные js-движки всё равно компилируют в «родной» код? тебе реально не всё равно, будет этим заниматься v8, ягерманки или llvm? ну, кроме того, что ты вместо компрессировано-обфусцированого js (нечитабельного, неисправляемого) получишь компрессированно-обфусцированый байткод (нечитабельный, неисправляемый, но меньше и без стадии достаточно сложного синтаксического разбора)?

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

21. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Vkni (ok) on 13-Ноя-12, 18:54 
> - С точки зрения вгрузки сайтом неизвестного троянского буллшита делающего фиг знает что - не факт, не факт.

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

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

24. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 19:55 
> Я сильно сомневаюсь, что можно понять JS код, полученный в результате этой
> компиляции. :-)

Да, это так. Зато можно понять обычный код. И это в том числе роялит при принятии решения - разрешить вот это вот или в треш. А блобики все на вид одинаковые. Что хуже в этом плане.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

27. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Vkni (ok) on 13-Ноя-12, 21:57 
> Да, это так.

Дык, поэтому уж лучше гонять в LLVM машине, оно хоть быстрее будет.

Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

29. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 22:04 
> Дык, поэтому уж лучше гонять в LLVM машине, оно хоть быстрее будет.

Сложнее понять что делает -> проще вообще не гонять. Я запускаю только то в чем понимаю необходимость и уверен в легитимности.

Но вообще да, бинарное представление может быть шустрее, компактнее и не навязывать конкретный ЯП. Правда для вебпрограммеров нужда компилить скрипты вызовет выс@р кирпичей.

Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

10. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Anonimous on 13-Ноя-12, 16:27 
Вот сижу я в линуксе, который запущен в браузере, который запущен в линуксе, который....
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 16:45 
> Вот сижу я в линуксе, который запущен в браузере, который запущен в
> линуксе, который....

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

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

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

25. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от ZloySergant (ok) on 13-Ноя-12, 20:02 
>можно отметить ядро NetBSD

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

30. "Компилятор Emscripten достиг возможности собственной пересбо..."  +/
Сообщение от Аноним (??) on 13-Ноя-12, 22:52 
Помнится, чтобы поставить NetBSD на тостер, пришлось взять плату промышленного компа с линуксом, стереть оттуда линукс, записать NetBSD, и потом прикрутить саморезами к тостеру.
Возможно, с браузером та же фигня :)
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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