Emscripten: LLVM to JavaScript compiler (C++ to JS)
От: Evgeny.Panasyuk Россия  
Дата: 22.03.13 15:44
Оценка: 42 (8)
Emscripten

Emscripten is an LLVM to JavaScript compiler. It takes LLVM bitcode (which can be generated from C/C++ using Clang, or any other language that can be converted into LLVM bitcode) and compiles that into JavaScript, which can be run on the web (or anywhere else JavaScript can run).

Using Emscripten, you can

  • Compile C and C++ code into JavaScript and run that on the web
  • Run code in languages like Python as well, by compiling CPython from C to JavaScript and interpreting code in that on the web

  • Например:
  • JS Python interpreter
  • QT Demo: chip
  • Отредактировано 23.06.2015 10:24 Evgeny.Panasyuk . Предыдущая версия .
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: kr510  
    Дата: 20.06.15 18:23
    Оценка: +2
    Круто! Только зачем?
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: kr510  
    Дата: 21.06.15 04:15
    Оценка: +1 :)
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    EP>Здравствуйте, kr510, Вы писали:


    K>>Круто! Только зачем?


    EP>* портирование готовых библиотек и приложений

    EP>* создание веб-приложений в которых и для клиентского и для серверного кода используется C++

    Техническая сторона понятна, но по прежнему не понятно в чем "business case". На JS масса билиотек и фрейморков для написания UI, зачем еще надо вставлять в него C++.

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

    EP>* создание быстрого JS кода — там выходной JS получается со многими C++ оптимизациями

    В это не верится совсем. Есть код на C++ скомпилированный в машинный код, теперь его конвертируешь в JS и интерпретируешь браузером. Странно очень звучит, что JS-посредником исполнение будет быстрее. Вероятно, это ошибка измерения.

    EP>* кросс-платформенные приложения работающие на десктопах, мобильных устройствах и веб


    Это громкое заявление. На мобильных устройствах использование HTML5+JS чтобы запускать конвертируемый C++ не сработает. Просто HTML5+JS — это тормоза и тупо проигрывает нейтив коду (ObjectiveC, Java). Не шансов что производительность HTML5+JS смогут подтянуть и это еще не считая интерпретатора C++ сверху всего.
    Re[2]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: kr510  
    Дата: 26.06.15 08:59
    Оценка: :))
    Здравствуйте, Dair, Вы писали:

    D>Считаю, что JavaScript должен быть засунут в ту дыру, из которой он вылез — формочки обрабатывать.


    А как же node.js? афигенная штука, IMHO.
    Re[2]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Voivoid Россия  
    Дата: 19.06.15 13:58
    Оценка: 8 (1)
    Здравствуйте, Evgeny.Panasyuk, Вы писали:
    EP>То есть stackful coroutines в веб-браузере.

    Вот только эти корутины по большому счету работают только в простейших случаях. Например emscripten падал при включенных исключениях ( -enable-emscripten-cxx-exceptions ) и коде чуть более сложном чем hello world. Не уверен, но вроде как до сих пор эту проблему не поправили. ( был какой-то pullrequest призванный решить эту багу, но его так и не замержили https://github.com/kripken/emscripten/pull/2772 )
    Re[6]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: D. Mon Великобритания http://thedeemon.livejournal.com
    Дата: 26.06.15 11:06
    Оценка: 8 (1)
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    DM>>В моем случае сгенерированный из Haxe, но там практически один в один с оригиналом, т.е. все равно что ручной.


    EP>А что там в ручном коде, какого он типа, какого уровня? ФВП/Замыкания есть?


    Довольно невысокого уровня, без ФВП и замыканий, но с объектами.

    EP>Как я понял — там распаковка растрового изображения. Например как там представлено изображение — безликий массив скаляров или матрица пикселей? Какие массивы используются — "статически типизированные" или нет?


    Все на типизированных массивах. Картинка — массив байт.

    Исходники теста тут:
    http://data.infognition.com/spbench/haxe_asmjs_src.zip
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 19.06.15 14:03
    Оценка: 6 (1)
    I>>пример с Qt не понял вообще, как они его перегнали, выкинули половину QtCore?
    EP>Видимо скомпилировали QT в JavaScript Наверное да, ненужное выкинули. Вот тут ещё QT примеры.

    Вот тут описание как собирать:
    http://vps2.etotheipiplusone.com:30176/redmine/projects/emscripten-qt/wiki
    Re[4]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 25.06.15 15:30
    Оценка: 4 (1)
    Здравствуйте, Nikе, Вы писали:

    N>Какой-нибудь Pango тащить мне кажется дороговато при таком подходе


    Там можно вызывать обычный JS из C++ — то есть необязательно всё "вручную" растеризовать.

    Кстати, где-то видел пример рендеринга PDF внутри JS с помощью сабж.
    Re[2]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: D. Mon Великобритания http://thedeemon.livejournal.com
    Дата: 25.06.15 06:43
    Оценка: 3 (1)
    Здравствуйте, Nikе, Вы писали:

    N>Попробую наш графический проектик запустить А кто-нибудь его практически пробовал?


    Я немного пробовал. Получается большой объем, медленная загрузка, скорость чуть лучше простого JS в Firefox'e и слегка или даже сильно хуже в других браузерах.

    N>А тексты там чем можно растеризовать?


    Там у тебя есть фактически просто кусок памяти, дальше делаешь в нем что хошь. Надо рисовать или растеризовать — тяни библиотеки, умеющие это в памяти делать.
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Went  
    Дата: 20.06.15 09:53
    Оценка: +1
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    EP>Using Emscripten, you can...


    Впечатляет. Я знал, я верил что С++ всех победит
    Отредактировано 20.06.2015 9:54 Went . Предыдущая версия .
    Re[2]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 20.06.15 20:57
    Оценка: +1
    Здравствуйте, kr510, Вы писали:

    K>Круто! Только зачем?


    * портирование готовых библиотек и приложений
    * создание быстрого JS кода — там выходной JS получается со многими C++ оптимизациями, которые вручную выпиливать трудно и долго. Например недавно делал тест(1
    Автор: Evgeny.Panasyuk
    Дата: 07.06.15
    , 2
    Автор: Evgeny.Panasyuk
    Дата: 20.06.15
    ): C++ -> JS оказался практически в два раза быстрее чем аналог на C#
    * создание веб-приложений в которых и для клиентского и для серверного кода используется C++
    * кросс-платформенные приложения работающие на десктопах, мобильных устройствах и веб
    Re[5]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: kr510  
    Дата: 21.06.15 10:37
    Оценка: :)
    EP>Чтобы получить доступ к ещё большему колличеству библиотек. Например.

    JS — свой, законченный, мир. Здесь нужно реально доказать, что еще одна библиотека будет нужна. Что касается unity3d, ну в JS есть WebGL.

    EP>Я не сказал что C++ -> JS работает быстрее native C++.

    EP>Я говорю что JS -> C++ получается очень быстрым, быстрее чем ручной JS, и даже быстрее чем C#.

    Это возможно, но как я понимаю, речь идет о C++ -> JS, а не наоборот.


    ЗЫ, как полигон для упражнений в программировании это направление класс! Нужно только придумать реальное использование.
    Re[7]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Klikujiskaaan КНДР  
    Дата: 21.06.15 11:33
    Оценка: :)
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    EP>Здравствуйте, Klikujiskaaan, Вы писали:


    EP>>>Я имел в виду использование C++ как ядра приложения. То есть будет отдельно web-приложение, отдельно приложение для мобильных устройств (не-web), отдельно для десктопа. И везде ядро на C++.

    K>>Даже небо, даже Аллах!
    K>>Но зачем такое убожество нужно? Проще и понятнее сделать веб-сервис и все кому надо будут подсасывать данные с него...

    EP>Facebook и Dropbox делают ядро кроссплатформенных мобильных приложений на C++: 1, 2


    2 примера из миллиона.
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 30.04.13 16:38
    Оценка:
    Слайды: <b>C++ on the Web: Run Your Big 3D Game in the Browser!</b>
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 01.11.13 12:32
    Оценка:
    <b>Duetto</b>: a C++ compiler for the Web going beyond emscripten and node.js:

    Today Lean­ing Tech­nolo­gies Ltd. releases duetto, a com­piler designed to develop inte­grated (back­end and fron­tend) web appli­ca­tions in C++. duetto is now avail­able to the pub­lic as FOSS here, and will be offered in a com­mer­cial pack­age with closed-source-friendly licens­ing soon.
    [...]
    We present duetto, our C++ com­piler for the Web, which is now avail­able to the pub­lic. Our solu­tion inte­grates and sur­passes fea­tures of exist­ing tools, and allows to pro­gram both the fron­tend and the back­end of a Web appli­ca­tion in an inte­grated C++ code­base, com­pil­ing them respec­tively to JavaScript and native code.
    Duetto com­bines the advan­tages of emscripten and node.js by allow­ing the pro­gram­mer to:

  • write web appli­ca­tions in C++, reusing exist­ing code and mak­ing port­ing of whole appli­ca­tions and games to the browser plausible.
  • code both the fron­tend and the back­end of a web appli­ca­tion in the same lan­guage and codebase.
    [...]

  • Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 06.02.14 11:36
    Оценка:
    Сравнение Emscripten, Mandreel, and now Duetto.
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 19.06.15 13:33
    Оценка:
    https://kripken.github.io/emscripten-site/docs/introducing_emscripten/release_notes.html

    v1.22.2: 8/19/2014
    — Added new functions emscripten_yield, emscripten_coroutine_create and emscripten_coroutine_next which implement coroutines when building with the -s ASYNCIFY=1 option.

    То есть stackful coroutines в веб-браузере.
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Igore Россия  
    Дата: 19.06.15 13:44
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    EP>Например:

    EP>JS Python interpreter
    EP>QT Demo: chip
    Интересно как они пример Qt сделали, выкинули половину QtCore?
    Отредактировано 19.06.2015 13:53 Igore . Предыдущая версия . Еще …
    Отредактировано 19.06.2015 13:52 Igore . Предыдущая версия .
    Re[2]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 19.06.15 13:55
    Оценка:
    Здравствуйте, Igore, Вы писали:

    I>Не могу найти про ограничения, файлы, и т.д.,


    API Limitations

    I>пример с Qt не понял вообще, как они его перегнали, выкинули половину QtCore?


    Видимо скомпилировали QT в JavaScript Наверное да, ненужное выкинули. Вот тут ещё QT примеры.

    А вот пример портирования Unreal Engine в JavaScript с помощью Emscripten — пишут что за четыре дня управились
    http://www.youtube.com/watch?v=BV32Cs_CMqo
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 19.06.15 14:08
    Оценка:
    Здравствуйте, Voivoid, Вы писали:

    V>Здравствуйте, Evgeny.Panasyuk, Вы писали:

    EP>>То есть stackful coroutines в веб-браузере.
    V>Вот только эти корутины по большому счету работают только в простейших случаях.

    Технически вполне реализуемо — там же у них свой стэк в ArrayBuffer.

    V>Например emscripten падал при включенных исключениях ( -enable-emscripten-cxx-exceptions ) и коде чуть более сложном чем hello world. Не уверен, но вроде как до сих пор эту проблему не поправили.


    А где именно была проблема? При вылете исключения наружу? Или при исключении внутри? Или проблемы были даже без throw?
    Re[4]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Voivoid Россия  
    Дата: 19.06.15 14:18
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:
    EP>А где именно была проблема? При вылете исключения наружу? Или при исключении внутри? Или проблемы были даже без throw?
    При сборке. На простых примерчиках все работало, но когда я попробовал добавить корутины в достаточно большую кодовую базу, то оказалось, что emcc просто падает в процессе сборки. Вот нашел сейчас похожий issue — https://github.com/kripken/emscripten/issues/2663 . Правда человек там в конце пишет, что в какой-то версии у него все вроде заработало, но мне переход на эту версию в свое время не помог.
    Re[4]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 21.06.15 09:47
    Оценка:
    Здравствуйте, kr510, Вы писали:

    K>>>Круто! Только зачем?

    EP>>* портирование готовых библиотек и приложений
    EP>>* создание веб-приложений в которых и для клиентского и для серверного кода используется C++
    K>Техническая сторона понятна, но по прежнему не понятно в чем "business case". На JS масса билиотек и фрейморков для написания UI, зачем еще надо вставлять в него C++.

    Чтобы получить доступ к ещё большему колличеству библиотек. Например.

    K>Люди пишут на С++, чтобы оптимизировать приложение для платформы.


    Не только. Иногда это просто кросс-платформенность.

    K>Как раз для того, чтобы сократить время загрузки runtime, убрать микро лаг при обработки событий и уменьшить потребляемую память. Всё это вернётся при конвертации.


    Ты думаешь JS->C++ (UPD: опечатка, должно быть "C++ -> JS") будет хуже чем ручной JS?

    EP>>* создание быстрого JS кода — там выходной JS получается со многими C++ оптимизациями

    K>В это не верится совсем. Есть код на C++ скомпилированный в машинный код, теперь его конвертируешь в JS и интерпретируешь браузером. Странно очень звучит, что JS-посредником исполнение будет быстрее. Вероятно, это ошибка измерения.

    Я не сказал что C++ -> JS работает быстрее native C++.
    Я говорю что JS -> C++ (UPD: опечатка, должно быть "C++ -> JS") получается очень быстрым, быстрее чем ручной JS, и даже быстрее чем C#.

    EP>>* кросс-платформенные приложения работающие на десктопах, мобильных устройствах и веб

    K>Это громкое заявление. На мобильных устройствах использование HTML5+JS чтобы запускать конвертируемый C++ не сработает. Просто HTML5+JS — это тормоза и тупо проигрывает нейтив коду (ObjectiveC, Java). Не шансов что производительность HTML5+JS смогут подтянуть и это еще не считая интерпретатора C++ сверху всего.

    Я имел в виду использование C++ как ядра приложения. То есть будет отдельно web-приложение, отдельно приложение для мобильных устройств (не-web), отдельно для десктопа. И везде ядро на C++.
    Отредактировано 26.06.2015 19:58 Evgeny.Panasyuk . Предыдущая версия . Еще …
    Отредактировано 21.06.2015 11:20 Evgeny.Panasyuk . Предыдущая версия .
    Re[5]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Klikujiskaaan КНДР  
    Дата: 21.06.15 10:24
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    K>>Это громкое заявление. На мобильных устройствах использование HTML5+JS чтобы запускать конвертируемый C++ не сработает. Просто HTML5+JS — это тормоза и тупо проигрывает нейтив коду (ObjectiveC, Java). Не шансов что производительность HTML5+JS смогут подтянуть и это еще не считая интерпретатора C++ сверху всего.


    EP>Я имел в виду использование C++ как ядра приложения. То есть будет отдельно web-приложение, отдельно приложение для мобильных устройств (не-web), отдельно для десктопа. И везде ядро на C++.


    Даже небо, даже Аллах!
    Но зачем такое убожество нужно? Проще и понятнее сделать веб-сервис и все кому надо будут подсасывать данные с него...
    Отредактировано 21.06.2015 10:25 НепредставимыйПхы . Предыдущая версия . Еще …
    Отредактировано 21.06.2015 10:24 НепредставимыйПхы . Предыдущая версия .
    Re[6]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 21.06.15 10:28
    Оценка:
    Здравствуйте, Klikujiskaaan, Вы писали:

    EP>>Я имел в виду использование C++ как ядра приложения. То есть будет отдельно web-приложение, отдельно приложение для мобильных устройств (не-web), отдельно для десктопа. И везде ядро на C++.

    K>Даже небо, даже Аллах!
    K>Но зачем такое убожество нужно? Проще и понятнее сделать веб-сервис и все кому надо будут подсасывать данные с него...

    Facebook и Dropbox делают ядро кроссплатформенных мобильных приложений на C++: 1, 2
    Re[7]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: kr510  
    Дата: 21.06.15 10:32
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:


    EP>Facebook и Dropbox делают ядро кроссплатформенных мобильных приложений на C++: 1, 2



    Да, но они хотят получить выигрыш в производительности от прямого взаимодействия с железом через с++. Зачем им еще надо JS если можно (а с их ресурсами точно можно) прямо на с++ писать? Они наоборот хотят уйти от всех языков посредников.
    Re[6]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 21.06.15 11:15
    Оценка:
    Здравствуйте, kr510, Вы писали:

    EP>>Чтобы получить доступ к ещё большему колличеству библиотек. Например.

    K>JS — свой, законченный, мир. Здесь нужно реально доказать, что еще одна библиотека будет нужна.

    Вот например делаю я какое-то JS приложение, и нужной JS библиотеки нет, зато есть библиотека С++ — кому тут что нужно доказывать?

    K>Что касается unity3d, ну в JS есть WebGL.


    1. Уровень WebGL намного ниже чем уровень игрового движка.
    2. Emscripten как раз и переводит OpenGL вызовы в WebGL.

    EP>>Я не сказал что C++ -> JS работает быстрее native C++.

    EP>>Я говорю что JS -> C++ получается очень быстрым, быстрее чем ручной JS, и даже быстрее чем C#.
    K>Это возможно, но как я понимаю, речь идет о C++ -> JS, а не наоборот.

    Опечатка. В обоих случаях должно быть "C++ -> JS".

    K>ЗЫ, как полигон для упражнений в программировании это направление класс! Нужно только придумать реальное использование.


    Конкретный пример — Autodesk® FormIt 360:

    Autodesk® FormIt 360 is a web and mobile app that helps you capture building design concepts digitally anytime, anywhere ideas strike.

    Re[8]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 21.06.15 11:20
    Оценка:
    Здравствуйте, kr510, Вы писали:

    EP>>Facebook и Dropbox делают ядро кроссплатформенных мобильных приложений на C++: 1, 2

    K>Да, но они хотят получить выигрыш в производительности от прямого взаимодействия с железом через с++.

    1. С каким железом? С памятью и процессором?
    2. Среди их целей в том числе и кроссплатформенность — одно ядро для разных платформ. Что ты предлагаешь взамен?

    K>Зачем им еще надо JS если можно (а с их ресурсами точно можно) прямо на с++ писать? Они наоборот хотят уйти от всех языков посредников.


    В web-приложении от JS не уйти.
    Отредактировано 21.06.2015 11:21 Evgeny.Panasyuk . Предыдущая версия .
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: zaufi Земля  
    Дата: 23.06.15 16:00
    Оценка:
    интересно насколько хороши эти оптимизаторы в LLVM... может имеет смысл пилить JS → JS %)
    типа был руками написаный JS код, хотим посмотреть как сделать его более оптимальным %)
    Re[2]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 23.06.15 16:11
    Оценка:
    Здравствуйте, zaufi, Вы писали:

    Z>интересно насколько хороши эти оптимизаторы в LLVM... может имеет смысл пилить JS → JS %)

    Z>типа был руками написаный JS код, хотим посмотреть как сделать его более оптимальным %)

    В Facebook использовали компилятор PHP -> C++. Возможно и тут можно сделать JS -> C++ -> JS.
    Но, это всё же будет медленнее чем более-менее нормальный код на C++ транслированный в JS. Так как в C++ из коробки есть статический полиморфизм, структуры и т.п., а для JS (в случае JS -> C++) это всё должен выводить компилятор, при этом сохраняя старую семантику.
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Nikе Россия  
    Дата: 24.06.15 04:35
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    Попробую наш графический проектик запустить А кто-нибудь его практически пробовал?
    А тексты там чем можно растеризовать?
    Нужно разобрать угил.
    Отредактировано 24.06.2015 4:39 Nikе . Предыдущая версия .
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Nikе Россия  
    Дата: 25.06.15 08:50
    Оценка:
    Здравствуйте, D. Mon, Вы писали:

    DM>Там у тебя есть фактически просто кусок памяти, дальше делаешь в нем что хошь. Надо рисовать или растеризовать — тяни библиотеки, умеющие это в памяти делать.


    Какой-нибудь Pango тащить мне кажется дороговато при таком подходе
    Нужно разобрать угил.
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 25.06.15 15:21
    Оценка:
    Здравствуйте, D. Mon, Вы писали:

    N>>Попробую наш графический проектик запустить А кто-нибудь его практически пробовал?

    DM>Я немного пробовал. Получается большой объем

    Насколько я понял, там большой объём либо из-за стандартной библиотеки, либо рантайма — то есть это своего рода стартовый размер, то чего достаточно в одном экземпляре на всё приложение. Пользовательский код там получается относительно небольшой
    Автор: Evgeny.Panasyuk
    Дата: 06.06.15
    .

    DM>скорость чуть лучше простого JS в Firefox'e


    "простой JS" — это ручной? Или сгенерированный?
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: alex_public  
    Дата: 25.06.15 18:07
    Оценка:
    Здравствуйте, D. Mon, Вы писали:

    DM>Там у тебя есть фактически просто кусок памяти, дальше делаешь в нем что хошь. Надо рисовать или растеризовать — тяни библиотеки, умеющие это в памяти делать.


    В поставке emscripten идёт уже несколько готовых C/C++ библиотек, а не только библиотека языка. Например там с ходу (даже как-то подключать не надо) работает SDL, а это считай уже огромное количество кода для рисования заработает сразу.

    Кроме этого видел там в каталоге opengl/openal, glfw, glut и т.п. Плюс ещё взгляд зацепился за библиотеки с названиями типа browser, html5 и т.п. — я таких не знаю, но подозреваю, что они обеспечивают визуализацию средствами DOM.
    Re[4]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: D. Mon Великобритания http://thedeemon.livejournal.com
    Дата: 26.06.15 04:01
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    DM>>скорость чуть лучше простого JS в Firefox'e


    EP>"простой JS" — это ручной? Или сгенерированный?


    В моем случае сгенерированный из Haxe, но там практически один в один с оригиналом, т.е. все равно что ручной.
    Re[5]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 26.06.15 08:06
    Оценка:
    Здравствуйте, D. Mon, Вы писали:

    DM>>>скорость чуть лучше простого JS в Firefox'e

    EP>>"простой JS" — это ручной? Или сгенерированный?
    DM>В моем случае сгенерированный из Haxe, но там практически один в один с оригиналом, т.е. все равно что ручной.

    А что там в ручном коде, какого он типа, какого уровня? ФВП/Замыкания есть?
    Как я понял — там распаковка растрового изображения. Например как там представлено изображение — безликий массив скаляров или матрица пикселей? Какие массивы используются — "статически типизированные" или нет?
    Re: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Dair Россия  
    Дата: 26.06.15 08:55
    Оценка:
    Здравствуйте, Evgeny.Panasyuk, Вы писали:

    EP>Emscripten


    (эмоциональное)

    Вот за 15 лет, что я работаю программистом, из Web не пришло ничего хорошего. В web ушло много хороших технологий, и там и остались, тут да.
    А вот обратно... Именно в web, по причине, видимо, рыночной потребности, самозародились люди, считающие PHP и JS языками программирования (формально они ими являются, но программировать на PHP/JS?.. ORLY? "Налабать сайт" != "программиировать").

    Современный Web представляет собой колосса из велосипедов на костылях, и имя этим костылям — JS в первую очередь (особенно после появления уродств типа JQuery), и PHP — во вторую. Потом однобитные "программисты", освоившие JS, решили его и на сервер перетащить.


    Считаю, что JavaScript должен быть засунут в ту дыру, из которой он вылез — формочки обрабатывать.
    Re[3]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: alex_public  
    Дата: 26.06.15 09:35
    Оценка:
    Здравствуйте, kr510, Вы писали:

    K>А как же node.js? афигенная штука, IMHO.


    И что в нём хорошего? )
    Re[6]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Erop Россия  
    Дата: 26.06.15 11:37
    Оценка:
    Здравствуйте, Klikujiskaaan, Вы писали:

    K>Но зачем такое убожество нужно? Проще и понятнее сделать веб-сервис и все кому надо будут подсасывать данные с него...

    Это божет работать offline...
    Например словарь, приезжаешь в другую страну, а там дорогущий роуминг.. Упс?
    Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
    Re[7]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Klikujiskaaan КНДР  
    Дата: 26.06.15 15:28
    Оценка:
    Здравствуйте, Erop, Вы писали:

    E>Здравствуйте, Klikujiskaaan, Вы писали:


    K>>Но зачем такое убожество нужно? Проще и понятнее сделать веб-сервис и все кому надо будут подсасывать данные с него...

    E>Это божет работать offline...
    E>Например словарь, приезжаешь в другую страну, а там дорогущий роуминг.. Упс?

    Веб сайт работающий оффлайн? Ну ок.
    Re[8]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Erop Россия  
    Дата: 26.06.15 15:33
    Оценка:
    Здравствуйте, Klikujiskaaan, Вы писали:


    K>Веб сайт работающий оффлайн? Ну ок.


    почему сайт, а не локальный клиент?
    Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
    Re[9]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Klikujiskaaan КНДР  
    Дата: 26.06.15 16:13
    Оценка:
    Здравствуйте, Erop, Вы писали:

    E>почему сайт, а не локальный клиент?



    EP>Я имел в виду использование C++ как ядра приложения. То есть будет отдельно web-приложение, отдельно приложение для мобильных устройств (не-web), отдельно для десктопа. И везде ядро на C++.


    К тому же пример со словарем — хреновый, там узким местом будет не язык, а база данных, имхо.
    Re[7]: Emscripten: LLVM to JavaScript compiler (C++ to JS)
    От: Evgeny.Panasyuk Россия  
    Дата: 26.06.15 22:41
    Оценка:
    Здравствуйте, D. Mon, Вы писали:

    EP>>Как я понял — там распаковка растрового изображения. Например как там представлено изображение — безликий массив скаляров или матрица пикселей? Какие массивы используются — "статически типизированные" или нет?

    DM>Все на типизированных массивах. Картинка — массив байт.
    DM>Исходники теста тут:
    DM>http://data.infognition.com/spbench/haxe_asmjs_src.zip

    1. Там ведь разный код — например в C++ версии пиксель это не очень удобные 3 байта, в версии Haxe — пиксель это Int32.
    В C++ версии переход на следующий пиксель это (могло быть замыканием, кстати):
    #define GO_NEXT_PIXEL     lasti = i; \
        x++; i += 3; \
        if (x>=X) { \
            x = 0; y++; \
            i = y*stride; \
        }
    А в Haxe это просто di++ плюс иногда lasti = di — 1.

    2. Код действительно очень низкого уровня — там фактически ручная нарезка на структуры, ручной инлайнинг и т.п. То есть это не "простой JS", а полностью вручную оптимизированный.
    При этом в C++ версии можно подняться на более высокий уровень, ничего при этом не потеряв в скорости. Если же поднимать уровень в JS — то будут неизбежные тормоза.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.