URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 87251
[ Назад ]

Исходное сообщение
"Компилятор Emscripten достиг возможности собственной пересбо..."

Отправлено opennews , 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...
Новость: http://www.opennet.me/opennews/art.shtml?num=35313


Содержание

Сообщения в этом обсуждении
"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Клыкастый , 13-Ноя-12 13:34 
Во, теперь интересующимся парням проще будет портировать операционки в браузер! :)

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 13:57 
А как он сам себя пересобирает? Вот gcc из исходников собирает gcc, который может из исходников собрать gcc. А эта штука из исходников собирается с помощью gcc, а потом из своих исходников генерит JavaScript, а этот JavaScript может из исходников компилятора собрать опять JavaScript в браузере?

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 16:49 
> А как он сам себя пересобирает?

google://bootstrap :)


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Anonymous from da LOR , 13-Ноя-12 19:20 
Compileception.

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено baz , 13-Ноя-12 14:09 
вооооот оно! скоро машины пересоберут себя, поумнеют и захватят мир!

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Машина , 13-Ноя-12 14:25 
Мы уже это сделали ;)

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 16:18 
А дату запуска ядерных ракет правильно предсказали? Кажется мне уже пора рыть бункер :)

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено некто , 13-Ноя-12 17:20 
кажется уже даже поздно

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Vitold S , 21-Ноя-12 01:01 
Скорей бы!!!

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Vkni , 13-Ноя-12 14:45 
Какой-то полный абсурд.

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 15:10 
Вы просто читаете перевод. Что какбэ намекает.
http://mozakai.blogspot.ru/2012/11/emscripten-compiler-upgra... , например

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

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


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

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

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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Vkni , 13-Ноя-12 17:16 
На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM. А не наоборот. :-)

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

точно!

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

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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 18:29 
> На самом деле из браузеров нужно JavaScript выпиливать, заменяя его на LLVM.

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


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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 19:55 
> Жабаскрипт отлично обфусцируется,

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

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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 20:35 
Дык это... Emscripten вряд ли будет генерировать понятный код

"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 22:02 
> Дык это... Emscripten вряд ли будет генерировать понятный код

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


"Компилятор Emscripten достиг возможности собственной..."
Отправлено arisu , 15-Ноя-12 06:43 
> Тем хуже для вас: я просто не буду его запускать априори посчитав
> его трояном.

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


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

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


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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Vkni , 13-Ноя-12 21:57 
> Да, это так.

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


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

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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Anonimous , 13-Ноя-12 16:27 
Вот сижу я в линуксе, который запущен в браузере, который запущен в линуксе, который....

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

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

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено ZloySergant , 13-Ноя-12 20:02 
>можно отметить ядро NetBSD

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


"Компилятор Emscripten достиг возможности собственной пересбо..."
Отправлено Аноним , 13-Ноя-12 22:52 
Помнится, чтобы поставить NetBSD на тостер, пришлось взять плату промышленного компа с линуксом, стереть оттуда линукс, записать NetBSD, и потом прикрутить саморезами к тостеру.
Возможно, с браузером та же фигня :)