The OpenNET Project / Index page

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

Увидел свет Emscripten 1.4, компилятор байткода LLVM в JavaScript-представление

11.07.2011 22:56

Доступен релиз проекта 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, движок симуляции физических процессов Bullet 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-браузера обычные бинарные программы, ограниченные в специальном изолированном окружении.


  1. Главная ссылка к новости (http://syntensity.blogspot.com...)
  2. OpenNews: Разработчики Mozilla создали вариант игры Doom на языке JavaScript
  3. OpenNews: Релиз набора компиляторов LLVM 2.9
  4. OpenNews: Возможность разрабатывать скрипты для web-браузера на языках Си и Python
  5. OpenNews: Реализация языка Python на JavaScript и транслятор кода Python в JavaScript
  6. OpenNews: Реализация Flash-проигрывателя целиком на языке JavaScript
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/31155-Emscripten
Ключевые слова: Emscripten, llvm, javascript, compile
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (36) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 00:24, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну зачем, зачем это нужно? Я не понимаю что за агония у всех перенести приложения в барузер. Браузер - это не фреймворк, это программа для просмотра гипертекстовых сообщений.
     
     
  • 2.3, bircoph (ok), 00:36, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    К сожалению, теперь это фреймворк, а скоро будет ОС.
     
     
  • 3.4, all_glory_to_the_hypnotoad (ok), 00:39, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    поиграются и бросят
     
     
  • 4.19, term (?), 11:03, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Мощности современных дескторов вполне достаточно, чтоб не бросили.
     
  • 2.5, Vernat (ok), 00:50, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Гугл, Майкрософт, прочие гиганты хотят что бы народ торчал в их облаках, соответственно им нужно чтобы весь возможный софт мог запускаться под браузером
     
  • 2.12, Аноним (-), 07:58, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Начать паниковать можно будет когда внутри браузера будут запускать программы уровня eclipse, а пока это всё игрушки.
     
     
  • 3.18, Анонимоуз (?), 10:48, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Тогда будет уже поздно паниковать.
     
  • 3.30, Аноним (-), 12:42, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Начать паниковать можно будет когда внутри браузера будут запускать программы уровня eclipse,
    > а пока это всё игрушки.

    http://cloud9ide.com/
    Причем в отлмчии от Эклипса не тормозит.

     
  • 3.47, Aleks Revo (?), 20:03, 04/01/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Начать паниковать можно будет когда внутри браузера будут запускать программы уровня eclipse,
    > а пока это всё игрушки.

    RCP вполне себе в браузере работает - RAP в помощь. Eclipse же там пока ещё никому не понадобился, вот и нет его там ))

     
  • 2.20, Аноним (-), 11:05, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ну зачем, зачем это нужно?

    Чтобы убить флеш окончательно, например, там где он еще жив и даже более :)

    > для просмотра гипертекстовых сообщений.

    С тех пор как в них сделали JS, они несколько более чем просто программа для просмотра. JS - полный по Тьюрингу язык. А тут вы видите результаты ;)

    Из практических применений: например, можно грузить картинку/документ в формате не понимаемом браузером/ОС юзера изначально, не доустанавливая сомнительные бинарные плагины, на которые юзеры очень нервно реагируют из-за возможности что это будет вирус. А JS довольно сильно обкушен в взаимодействии с внешним миром - его не так сцыкотно запускать.

    Например: не все браузеры понимают jpeg2k, а ставить плагин... хм... ну понятно, да? А что если вам хочется показать юзеру картинку в этом формате?

     
     
  • 3.26, all_glory_to_the_hypnotoad (ok), 12:30, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > С тех пор как в них сделали JS, они несколько более чем просто программа для просмотра. JS - полный по Тьюрингу язык. А тут вы видите результаты ;)

    мы видим результаты что всё работает через задницу. т.е. скомпилить/переписать/написать с нуля что-то вышло, в общем видимость деятельности наблюдаетсая. Но в мелочах везде мрак. И это не потому, что разработчики таких поделий где-то сильно накосячили, просто у браузера нет достаточного API для реализации нужного функционала. Тут говорят о платформонезависимости, но и это фикция. Зависимость таких приложений от браузера ещё большая чем просто приложения от разных платформ. И самое поганое, что браузеродеятелям никакие стандарты не писаны. И именно по этим причинам никогда ничего нормального из таких изделий не получится.

     
     
  • 4.32, Аноним (-), 12:46, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > мы видим результаты что всё работает через задницу. т.е. скомпилить/переписать/написать
    > с нуля что-то вышло, в общем видимость деятельности наблюдаетсая. Но в
    > мелочах везде мрак. И это не потому, что разработчики таких поделий
    > где-то сильно накосячили, просто у браузера нет достаточного API для реализации
    > нужного функционала. Тут говорят о платформонезависимости, но и это фикция. Зависимость
    > таких приложений от браузера ещё большая чем просто приложения от разных
    > платформ. И самое поганое, что браузеродеятелям никакие стандарты не писаны. И
    > именно по этим причинам никогда ничего нормального из таких изделий не
    > получится.

    Gmail-ом пользуется больше людей чем десктопным линуксом. Так что из этого поделие?

     
     
  • 5.33, Crazy Alex (??), 13:47, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это результат:
    1) больших ресурсов, вбитых в разработку GMail (удобно реализованные теги, поиск, хорошая фильтрация спама)
    2) доступности приложения из любой точки.

    Всё это реализуется на базе стандартной пары IMAP-сервер/локальный клиент со свистом (по второму пункту - совершенно не проблема скачать подписанный Гулом бинарь и  запустить локально). Гугл пошел другим путём, но это вопрос коммерции. Технически нативный клиент удобнее, шустрее и эргономичнее. Кстати, на плохом канале с GMail хочется повеситься - особенно потому что толком кэшировать уже скачанные сообщения он не желает почему-то.

     

  • 1.2, all_glory_to_the_hypnotoad (ok), 00:36, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    поваренная соль (NaCl, нейтив клиент от гугла) это всем не похожий проект, а действительно тру вей решения задач из топика.
     
     
  • 2.11, filosofem (ok), 07:12, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не портабилен и не нужен. Даже теоретически.
     
     
  • 3.14, all_glory_to_the_hypnotoad (ok), 09:04, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что не нужен, я согласен. И не потому что не портабелен. в этом проблемы нет, а не нужен просто как класс таких технологий.
     
  • 3.16, Аноним (-), 09:07, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Уже почти портабелен. Запланирован переход на LLVM-байткод, поэтому одно и тоже приложение для Native Client будет и на ARM и на x86 работать. Единственный минус, для браузеров кроме Chrome требует установки плагина.
     
     
  • 4.21, Аноним (-), 11:09, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Единственный минус, для браузеров кроме Chrome требует установки плагина.

    Это не минус, это gravest fatal bug. Яваскрипту - не требуется, поэтому так явно перспективнее. Рассказывать 85% юзеров "поставьте пожалуйста наш плагин" - редкостный вид садомазо.

     
     
  • 5.28, Crazy Alex (??), 12:38, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Если это будет рассказывать Гугл, да предложив хоть какую-нибудь плюшку - поставит масса народу. Или если рассказывать не будет, а просто окажется, что в NaCl (т.е. в Хроме) лучше работает какой-нибудь видеочат, но при желании это лечится установкой NaCl где угодно. А там уже по цепочке - подтянутся другие, кто захочет пользоваться (вначале - просто как оптимизирующей опцией), и понеслось. А Яваскрипт имеет ровно одно преимущество - как раз встроенность. Язык сам по себе ужасен - нюансов в нём чуть ли не как в плюсах, писать крайне неудобно и чревато ошибками.
     
  • 4.24, filosofem (ok), 11:26, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это уже не натив, а очередное Джава. Вам нужна еще одна Джава в браузере?
     
     
  • 5.27, Crazy Alex (??), 12:31, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это именно натив код - не jit и не интепретатор. То есть в него с гарантией компилируется (и с нормальным быстродействием работает) любой интерпретатор, к примеру (только слегка модифицированный в плане обращения к системным функциям, которые naCl не предоставляет - но это скорее модификации системных библиотек). Компилируются (и с нормальной скоростью работают) нативные библиотеки - к примеру, шифрование или парсер эффективных бинарных форматов сериализации - что для игр, к примеру, часто важно. И самое главное - его возможности явно ограничены его viewport, он не может как JS лезть куда попало на странице, а выборочный доступ можно дать.
     
     
  • 6.38, filosofem (ok), 14:16, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Написано было про PNaCl. Голый NaCl непортабилен.
     
     
  • 7.46, Crazy Alex (??), 16:16, 14/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Да плевать, там сборка аж под три архитектуры (x86, amd64 и arm). От операционки оно не зависит. Так что можно и три бинарника генерить, благо тулчайн это всё из коробки умеет.
     

  • 1.6, progserega (ok), 02:21, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Моё мнение - это попытка реализации распределённой, единой среды выполнения кода вне зависимости от ОС и оборудования, т.е. в браузере. Довеском через это протаскивают идею мэйнфреймов за деньги.

    По факту - это тройная надстройка - Оборудование->ОС->Браузер->JavaScript. Тройная надстройка в попытке привести разрозненную среду к единообразию, путём переписывания огромного количества кода, который со временем будет отброшен, как ненужный и бессмысленный (тормозящий DOOM на P4, для которого достаточно и i386).

    Это эволюционное движение, о котором говорил Линус, если я не ошибаюсь. Эволюционное движение к распределённой и единообразной ОС, как среде выполнения программ вне зависимости от географического положения.

    Совершенствование на этом - есть уменьшение сущностей и стремление к непротиворечивости и законченности минималистичной и достаточной картине реализации данной задачи.

    В определённой степени примером, к чему идёт эта эволюция может быть Plan9 и Inferno.

     
  • 1.7, progserega (ok), 02:23, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    s/Совершенствование на этом/Совершенствование на этом ПУТИ/
     
  • 1.8, SkyRanger (ok), 02:55, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Кто-нить пробовал это?
    Интересно как будет выглядеть Hello world! из C++ :)
     
     
  • 2.22, Аноним (-), 11:12, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Интересно как будет выглядеть Hello world! из C++ :)

    Совершенно обычно - менять сишный сорец не требуется. Куда интереснее, можно ли из SDLной проги задетектить что мы работаем в браузере и скажем дернуть кастомную JS-функцию, например? Т.е. 2-сторонний I/O "то что было C/C++ <-> JS"  :)

     
     
  • 3.25, Аноним (-), 12:24, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    чушь. требуется пересборка всех библиотек задействованных в неллоу ворде. Если что-то не соберётся (а такого вообще много), то работать не будет.
     
     
  • 4.35, anonymous (??), 13:54, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > чушь. требуется пересборка всех библиотек задействованных в неллоу ворде. Если что-то не
    > соберётся (а такого вообще много), то работать не будет.

    но сам-то исходник приветмира менять не надо. %-)

     
     
  • 5.42, all_glory_to_the_hypnotoad (ok), 15:22, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    это смотря куда твой исходник будет выводить привет. там же написано, что привеи мир на чистых плюсах через потоки работать небудет.
     
     
  • 6.43, Аноним (-), 15:58, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    куда куда.. на стандартный ввод!
     
     
  • 7.44, Аноним (-), 16:00, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    вывод т.е. :))
     
  • 7.45, all_glory_to_the_hypnotoad (ok), 20:19, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    чтобы написать в стандартый вывод,  нужно заюзать библиотечную ф-ю.
     

  • 1.15, ProfX (ok), 09:04, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чето чувствуется какой-то бум по отношению к JS -  в последнее время его куда ненадо суют, я считаю что скоро этот бум пройдет...
    А вот насчет NaCl - это уже действительно реальная вещь.
     
  • 1.34, anonymous (??), 13:50, 12/07/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а я давно говорю, что JS — новый бэкэнд для компиляторов.
     
     
  • 2.39, filosofem (ok), 14:19, 12/07/2011 [^] [^^] [^^^] [ответить]  
  • +/
    JS ― новый ассемблер =).
     

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



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

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