The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лицензии Apache 2.0 и LLVM, opennews (?), 17-Мрт-23, (0) [смотреть все]

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


24. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +1 +/
Сообщение от Шарп (ok), 17-Мрт-23, 09:32 
Emscripten это не только компилятор в wasm, но и эмуляция окружения (сокеты через websocket, printf в консоль браузера) и набор портированных библиотек (pthread, sdl2, openal и т.д.).

Как дела с этим у Cheerp? Выполнение абстрактного кода в вакууме не интересует.

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

31. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +2 +/
Сообщение от Аноним (13), 17-Мрт-23, 10:47 
> сокеты через websocket, printf в консоль браузера

Представляю, какой там оверхед при пересечении границы между WASM и DOM. Запомните, дети: если нужно общаться с внешним миром, манипулировать элементами на странице, посылать туда-сюда запросы, ну и вообще -- если хочется интерактив, то яваскрипт в разы (в разЫ, Ы в конце) быстрее, чем WASM. Единственный сценарий, где WASM быстрее JS -- это числодробилка, которая ровно один раз получила число на вход, погоняла над ним алгоритм в течение часа и ровно один раз отдала результат обратно яваскрипту.

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

35. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +3 +/
Сообщение от Anon62513512124 (?), 17-Мрт-23, 11:46 
Ну, вообще есть радикальная альтернатива этому подходу - не использовать DOM дерево, а вместо него - QML
Ответить | Правка | Наверх | Cообщить модератору

76. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Nope (?), 17-Мрт-23, 20:26 
реинкарнация апплетов
Ответить | Правка | Наверх | Cообщить модератору

40. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  –1 +/
Сообщение от Рустик (?), 17-Мрт-23, 12:55 
> Представляю, какой там оверхед при пересечении границы между WASM и DOM.

200нс из доки emscripten, т.е. можно забить. Жиснявая вебня куда дольше ворочаться будет.

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

47. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (47), 17-Мрт-23, 14:17 
> яваскрипт в разы (в разЫ, Ы в конце) быстрее, чем WASM

Ради интереса запускал какой-то свой helloworld на Qt в emscripten. Там была табличка QTableView с раскраской (пара сотен строк и пара десятков столбцов). Таких шустрых сайтов на JS я никогда не видел! Т.е. wasm, рисующий на канве через прослойку emscripten, работает быстрее "классического" HTML + JS.

Да, там были небольшие глюки с перерисовкой (мерцающий чёрный фон при ресайзе виджета), но в целом очень шустренко работало в firefox.

Тут возможно фишка в том, что нужно обеспечить вывод уже отрисованной картинки (которая полностью сформирована внутри wasm без всяких сборщиков мусора, но правда с эмуляцией чего-то похожего на MMU внутри браузера) и всё что требуется от emscripten - энцать раз в секунду обновить картинку на канве.

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

49. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (32), 17-Мрт-23, 14:21 
Не подсказывай ему, пиши свой стартап.  
Ответить | Правка | Наверх | Cообщить модератору

54. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (13), 17-Мрт-23, 15:04 
Канва работает быстрее DOM? No shit, Sherlock! Правда решение "WASM + канва" нужно сравнивать с аналогичным "JS + канва", но ты настолько глубоко копать не стал. Давай я тебе немного напомню про то, что даже чтобы отправить строку из WASM в JS, нужно эту строку: 1) упаковать в UTF на стороне WASM, 2) посигналить яваскрипту, что ему нужно бы забрать строку вот отсюда, 3) распаковать из UTF на стороне JS при помощи TextDecoder. Отправка из JS в WASM делается аналогично. Это дорогостоящая операция в сравнении с JS-only-решением, где никакой boundary crossing не требуется. Примерно по этой же причине биндинги сишной libxml к node.js работают гораздо медленнее, чем xml-парсеры, написанные целиком на JS.

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

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

57. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Рустик (?), 17-Мрт-23, 15:39 
> нужно сравнивать с аналогичным "JS + канва"

Предъяви, сравним.

> чтобы отправить строку из WASM в JS, нужно эту строку:

Нет не нужно, на стороне c++ принимаешь строку как std::wstring и дальше с ним и работаешь.

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

61. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (13), 17-Мрт-23, 16:18 
> wasm, рисующий на канве через прослойку emscripten, работает быстрее "классического" HTML + JS.
> Предъяви, сравним.

Так ты и предъявляй. Так-то я тебе тоже могу показать, как JS-гриды на канве работают существенно быстрее JS-гридов на DOM. И никакой васм для этого не понадобился.

> Нет не нужно, на стороне c++ принимаешь строку как std::wstring

А откуда этот твой std::wstring возьмется без копирования данных из JS-строки в память WASM?

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

64. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (64), 17-Мрт-23, 16:25 
> Так ты и предъявляй

Изи. Я сравнивал ffmpeg.wasm и ffmpeg.js и разрыв в скорости перекодирования одного и того же файла просто чудовищный, wasm в разы быстрее.

> откуда этот твой std::wstring возьмется без копирования

Куча у wasm общая с js, копировать не обязательно. Typed arrays те точно не копируется, с чего бы стрингам вести себя иначе, ведь в js это то же самое, что массив.

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

69. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (13), 17-Мрт-23, 16:39 
> разрыв в скорости перекодирования одного и того же файла просто чудовищный, wasm в разы быстрее

Правильно, ибо это и есть тот самый единственный сценарий, где васм быстрее. Потому что не приходится перегонять данные отсюда-туда сотни и тысячи раз, как это было бы в интерактивном приложении.

> Typed arrays те точно не копируется

Ну так проведи эксперимент: 1) сформируй в васме мутабельную строку, 2) прими ее на стороне JS и сохрани в переменную, 3) в васме измени первый символ уже отправленной строки, 4) убедись, что на стороне JS строка не изменилась, ergo память была скопирована. Те, кто в курсе, что строки в JS - это примитивы, всегда передающиеся по значению, знают это и без экспериментов. DOM ничего кроме строк не принимает, нету там никакого element.setAttributeFromSomeShittySharedArrayBuffer(ptrAttrName, ptrValue).

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

77. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Рустик (?), 17-Мрт-23, 20:35 
Пока так, возможно потом оптимизируют и дадут прямой доступ к dom, на второе планы точно есть. Браузеры очень медленно развиваются к сожалению, взять хотя бы поддержку современных форматов изображений - браузероделы годами их внедряли и то недовнедрили.
Ответить | Правка | Наверх | Cообщить модератору

87. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (87), 18-Мрт-23, 03:16 
> Потому что не приходится перегонять данные отсюда-туда сотни и тысячи раз, как это было бы в интерактивном приложении.

Это в каких таких _интерактивных_ приложениях тысячи раз в секунду что-то гоняется? Человеки (интерактивное же!) не будут успевать кнопки жмакать и вообще осознавать что на экране творится, что там мельтешит. Нас за такое ругали. Очень грубый пример стародревних костылей, наверное уже неактуальных и не модных: когда бежишь в гриде (да-да, плохой, неправильный, дизайн) по строчкам мастер-списка, ты на каждый переход со строки на строку НЕ тянешь данные с сервера для кучки детэйл-гридов пока не остановишься на какой-то конкретной строке (по маленькому таймауту начинается подгрузка). А то бухгалтер для прокрутки задумчиво утопил стрелку вниз в гриде, а сервер усирается от лавины запросов на каждый переход от строки к строке, за каждым из которых на самом низу кучка селектов к базе. Или другой пример - когда в визуальный контрол подгружается относительно увесистая пачка данных, то, чтобы не перегружать его отрисовкой по мере загрузки этих данных (там ведь куча событий стреляет) контрол дизейблится или отключается от перерисовки (уж и не вспомню точно как там лет 15 назад было) на время загрузки и перерисовывается в финале за один прием.

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

62. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (62), 17-Мрт-23, 16:20 
>распаковать из UTF на стороне JS при помощи TextDecoder

Чего, JS не может напрямую работать с UTF-8?

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

71. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (13), 17-Мрт-23, 16:47 
V8 хранит строки в формате WTF-16. Если хочется принять буфер, в которой лежит UTF-8, то нужно перекодировать (TextDecoder). Напрямую с буфером будешь работать именно как с массивом байт, но если тебе эту строку нужно показать пользователю, то придется перегнать в WTF-16.
Ответить | Правка | Наверх | Cообщить модератору

92. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (92), 18-Мрт-23, 07:32 
В JavaScript единственная кодировка utf-16
Ответить | Правка | К родителю #62 | Наверх | Cообщить модератору

85. "Cheerp 3.0, компилятор C/C++ в JavaScript, переведён на лице..."  +/
Сообщение от Аноним (-), 18-Мрт-23, 01:25 
> Представляю, какой там оверхед при пересечении границы между WASM и DOM.

Поэтому рисовать куданить в канвас и IO через вебсокеты всякие. Чтобы с вебтормозилками минимально пересекаться.

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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