Показать сообщение отдельно
  #17 (permalink)  
Старый 17.06.2024, 16:22
pvv pvv вне форума
Новичок на форуме
Отправить личное сообщение для pvv Посмотреть профиль Найти все сообщения от pvv
 
Регистрация: 08.05.2024
Сообщений: 7

Сообщение от Aetae Посмотреть сообщение
Асинхронщина - суть js, на том вся его архитектура стоит.
Только вот wasm про это к сожалению не знает.

Сообщение от Aetae Посмотреть сообщение
Wasm не замена js, а средство для оптимизации узких мест
Это ещё возможность взять готовый кусок кода, собрать в wasm, засунуть в браузер и запустить на любом устройстве не переписывая всё на js, без относительно того, насколько быстро и оптимально это будет работать в результате. Кроссплатфомернность которую мы заслужили...

Сообщение от Aetae Посмотреть сообщение
В целом если нет желания писать на js - можно писать на языках, компилирующихся в wasm, наверняка есть множество библиотек с прозрачными биндингами браузерного api, например wasm-bindgen для rust.
Ну вот там внутри будут ровно те же костыли только ещё и с дополнительной кучей всякого не особо нужного обвеса.
Небольшой кусок кода на С собранный без emscripten и его стандартной библиотеки со всякими почти пустыми затычками для всяких stdio, голым clang получается на 100-150кБ меньше, т.е. раза в два. Засада приключилась с dlopen, и загрузкой функций из других wasm модулей, так как к wasm.instantiate гвоздями зачем-то приколотили async. При том что есть и синхронный вызов, но с ограничениями по размеру. Кто это интересно, #$%^!, решил что 4кБ будет достаточно для всех, а если там вдруг 10кБ то пользователь прям помрёт от лишней 1мс синхронного ожидания пока wasm это загрузит.

Сообщение от voraa Посмотреть сообщение
Мало, что понимаю в wasm, но вот попалась информация, что там будет ( в Хроме 126) API реализующее Promise
https://v8.dev/blog/jspi-newapi
да, когда-нибудь будет, а потом возможно даже и не только в хроме, "жаль только жить в эту пору прекрасную..."


https://github.com/dsyer/async-wasm
я могу также руками добавить callback в wasm, в который потом верну результат асинхронной функции.
я не до конца понимаю следующее:
вызов идёт из wasm, и как мне его затормозить и подождать выполнения асинхронной функции в JS, пусть даже и в тупом цикле while(1), но чтобы при этом периодически "отдавать управление" обратно JS для выполнения его стэка вызовов с асинхронными функциями.

p.s. Для костылей "деасинхронизации" с воркерами, SharedArrayBuffer необходимый для Atomics.wait, забанили из-за spectre и включается обратно этот CORS в заголовках http от сервера.
Если я html файл открываю браузером с диска, без сервера, включить в нём sharedarraybuffer во встроенных <script> возможности я так понимаю нет? (без всяких --enable-features=SharedArrayBuffer при запуске браузера)
Ответить с цитированием