LINUX.ORG.RU
ФорумTalks

WebAssembly - соединение двух миров. Пишем на сишечке, кимпиляем clang, исполняем в вебчике.

 


0

3

Советую осилить эту технологию тем, что считает что веб для даунов, а настоящие суровые челябинские мужики пишут только на си. Можно кидаться мегабайтами байтиков из JS в сишечку, делать сложные вычисления и пихать результат обратно. Можно невозбранно таскать огромные массивы данных туда-сюда много раз в секунду, например полностью перерисовывать канвас быстрее чем за движение мыши. Фотошопные сложные кисти так реализуются без проблем, прям со смешиваним в сишечке буферов и прозрачностями. В особо упоротых случаях можно реализовывать чуть более чем всю логику веб-приложенечки в сях или крестах, а из JS только окончательные инструкции «чо делать» забирать. 5 мегабайтный джипег и айпхона, породивший ~51 мб сырых пикселей в памяти JS, улетел в webasm и преобразовался там в чёрно-белую фотку где-то за 35.9 мсек. При этом сам jpeg в сырые пиксели в js вызовом window.createImageBitmap() конвертился 125 мс.

В современных JS есть ещё API для воспроизведения сырых семплов звука. Я знал мужика, который в 2005 году умел в JS из памяти .wav файлы порождать, а щас-то вообще жесть содомия начнётся!

Безопасность: плоская модель памяти. Нет malloc()/free(), просто плоский шмат памяти от нулевого смещения и живи там. Нельзя увеличить память изнутри wasm-машины. Все указатели - смещения от этого нуля. Нет никой кучи, точнее этот шмат и есть куча и ты вечно в ней живёшь. Размер этого шмата можно увеличить извне wasm-машины, из того JS-кода, который машину запускает и использует. Можно даже реализовать в wasm функцию, которую вызывать из JS и которая будет говорить хочет ли wasm увеличить себе память или нет, а js будет подкручивать рубильник. Все аллокаторы - сам реализуй или линкуйся с каким-то malloc(), но он будет по-сути резать эту кучу на куски и тогда тебе в бинарник просто накладут всякого кала типа стандартных библиотек и будет не цимес. А цимес-то делать бинарники на пару килобайт, реализуя только нужную обработку байтиков. Аллокатор обычно не нужен - назаписывал что-то там в памяти и выкинул всё в конце.

Сравнения wasm с flash некорректны, все кто так делает - тупой. flash специализировался на анимациях векторной графики, а wasm не специализируется ни на чём, исполнение произвольного кода, молотящего байтики. На wasm можно реализовать аудиокодеки с шифрованием и использовать как движой аудиозвонков или можно действительно построить на wasm новый flash, не важно.



Последнее исправление: lesopilorama (всего исправлений: 6)

всё это и есть куча и ты в ней сидишь уже.

Благодарю, но в куче сидеть как-то не хочется.

Jullyfish
()

Безопасность: плоская модель памяти. Нет malloc()/free(), просто плоский шмат памяти от нулевого смещения и живи там. Нельзя увеличить изнутри wasm-машины. Все указатели - смещения от этого нуля. Нет никой кучи. Точнее всё это и есть куча и ты в ней сидишь уже.

Вот именно что это не для «сишки вместо js» это для любой-фреймворк-нейм вместо flash. Для встраиваемых приложений в вебе, а не для веба на разных языках.

uin ★★★
()

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

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

а кто по-твоему это сгенерированное говно исполняет?

По-моему не интересно, интересно как на самом деле, а это в гугл

lesopilorama
() автор топика
Ответ на: комментарий от uin

При чем тут flash - флеш векторную графику анимировал, а webasm - произвольное байто*бство, без специфики какой-либо (графика, звук, данные).

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)
Ответ на: комментарий от lesopilorama

Ну да, сегодня в v8 исполняется, когда-то было не так, но v8 большой, в него много напихано, так что утверждение «исполняется v8» - то ж5 самое, что сказать «исполняетчя где-то в браузере». Ну исполняется и исполняется, чё бухтеть-то. Бугага.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

wasm никому в мире js не нужен - суровая правда.

Да стеганые же полукеды. Ну опять писать очевидное придется.

wasm «нужен» прежде всего для того, чтобы кодовую базу на C, плюсах или что там еще поддерживается, можно было кидать в браузер. Например, у меня есть либа на C с научной математикой, я хочу ее дергать из браузерного скрипта, а не писать с нуля на js 3 года, вот можно использовать эту ересь. Или распаковщик архивов, или аудио энкодер, или что-то такое.

А если надо писать с нуля, то я предполагаю (я не разбираюсь в вашем js, может неверно предполагаю), что непосредственно на js можно получить все то же самое, если знать как.

Тут есть какое-то недопонимание у ТС, мне кажется, что сишечка на wasm это как нативная сишечка по производительности. А на самом деле там тот же jit что и js код компилирует. Или технически отдельный, но похожий по свойствам.

James_Holden ★★★★★
()
Последнее исправление: James_Holden (всего исправлений: 2)
Ответ на: комментарий от James_Holden

А на самом деле там тот же jit

Старается высрать максимально производительный бинарь под данную архитектуру. wasm - то же самое, что я буду поставлять софтину в LLVM ir коде.

lesopilorama
() автор топика
Ответ на: комментарий от lesopilorama

А, ну то есть wasm это ahead of time а не jit, как я понимаю. И это должно давать серьезный рост производительности в этих задачах.

James_Holden ★★★★★
()
Ответ на: комментарий от James_Holden

Не понял фразу «ahead of time» в этом контексте.

wasm - это как ir в мире LLVM. Этот ir жрётся wasm-куском V8 и высирается бинарничек под нужный интел или там armv7

lesopilorama
() автор топика
Ответ на: комментарий от James_Holden

какую ты кодовую базу переведешь? разве что какие конвертеры, да и то выйдет +/- примерно тож самое как и при использовании просто типизированных массивов (то же при их использовании будет jit-компиляция).

rtxtxtrx ★★★
()
Ответ на: комментарий от lesopilorama

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

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

Ты уныл. Твоя квалификация низка настолько, что ты даже не в курсе что в обрыганской яве уже 500 лет назад был только чистый jit. Мы не верим тебе поэтому и все твои высеры подвергнуты лёгкому сомнению, бугага.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)
Ответ на: комментарий от James_Holden

А, ну то есть wasm это ahead of time а не jit, как я понимаю.

https://en.wikipedia.org/wiki/WebAssembly#Compilers

WebAssembly implementations generally use either ahead-of-time (AOT) or just-in-time (JIT) compilation, though some may also use an interpreter. While the first implementations appeared in web browsers, there are now many non-browser implementations for general-purpose use.

Implementations and Runtimes Non-browser WebAssembly runtimes include Wasmer, Wasmtime,WAMR, WAVM, wasm3, and others. These systems execute precompiled Wasm modules and often provide additional APIs for embedding WebAssembly in different environments.

Ну и дальше расписано.

dataman ★★★★★
()
Ответ на: комментарий от lesopilorama

При том что swf это байткод для флэш-vm, браузер когда натыкался на object контейнер в котором указывались путь к файлу и параметры, он все это парсил и передавал в флэшплагин.
webasm такой же байткод, только уже от родной джаваскриптовой машины и поэтому встраивание его в страницу/контекст так же безопасно как обычный жс, ну и медленно так как webasm это не машинный код, он работает через все тот же интерпритатор с проверками и отловом исключений. Плюс еще в загоне-песочнице какое тут тебе байто$бство?

uin ★★★
()

Из какой криокамеры ты вылез? Этот васм лет 5 как в проде крутится. Хоть бы написал завезли там чего нового?

foror ★★★★★
()
Ответ на: комментарий от foror

Из какой криокамеры ты вылез?

Где я написал, что «появился wasm»? Бугага.

lesopilorama
() автор топика
Ответ на: комментарий от uin

webasm такой же байткод, только уже от родной джаваскриптовой машины

Что такое «от родной джаваскриптовой машины»? Нет никакой связи.

lesopilorama
() автор топика
Ответ на: комментарий от lesopilorama

V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows, macOS, and Linux systems that use x64, IA-32, or ARM processors. V8 can be embedded into any C++ application.
https://v8.dev/

Что-то еще пояснить надо отдельно?

uin ★★★
()
Ответ на: комментарий от uin

Что-то еще пояснить надо отдельно?

Я не очень понял с кем ты разговариваешь и о чём.

lesopilorama
() автор топика

как разработчик на Си с большим опытом и как сторонник опенсорца и безопасности в сети я очень сильно не рекомендую это поделие.

грубо говоря, это малварь. а что малварь можно писать на сишечке - это нифига не новость. и это совсем не радостно. и не показатель какого-то особого «ума» или прочих достоинств.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

как разработчик на Си с большим опытом

Ахаха. Попытка заменить аргументы авторитетом. Я так тоже умею - «как самый умный на этом ссаном форуме, очевидно имею самое объективное мнение». Бугага.

lesopilorama
() автор топика
Ответ на: комментарий от lesopilorama

ты же в жабаскрипт «байтики перекидываешь». вот.

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

никакие скомпилированные куски чего-либо не должны качаться из сети и выполняться на машине,

А, столлманофажество, грызение ногтей в МГУ, идеи за свободу равенство братство - не, это не наше, мы за реальность.

Даёшь формат ц на машине пользователя вместе с биосом с выжиганием контроллера монитора.

lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от lesopilorama

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

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

то, что ты не понял, это как раз показательно.

Да всё понятно. Патлатый идеализм за свободу. Мир устроен не так.

lesopilorama
() автор топика
Ответ на: комментарий от lesopilorama

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

а проплаченные казачки тоже бывают. как и добросовестно заблуждающиеся дурачки.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

ну, собственно говоря, вот и весь ваш уровень интеллекта.

Я тупой получается? Это бывает с каждым.

lesopilorama
() автор топика
Ответ на: комментарий от uin

V8 is Google’s open source high-performance JavaScript and WebAssembly engine,

Ну выше же обсуждалось - в V8 напихали сразу всё, но это не значит что всё туда напиханное как-то очень жостко связано. Не грех переиспользовать «куски JIT» всюду, где этот JIT нужен. Какая связь при этом между JS и WASM - примерно никакой.

lesopilorama
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)