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 ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)