С js более менее разобрался, всё работает, ещё раз спасибо Aetae.
Теперь настала очередь непосредственно webassembly, которого также корежит при вызове асинхронных функций.
int main(){
int x = foo();
bar(x);
}
Если foo() - асинхронная функция импортированная из JS, то bar будет вызван до того как вернётся foo...
И вот с этим уже официально предлагается бороться через
https://web.dev/articles/asyncify, во всяком случае так emscripten вроде бы делает.
Что выглядит уже даже более коряво чем идея заклинить выполнение основного потока каким-нибудь воркером и дожидаясь в его выполнения в каком-нибудь Atomics.wait() "синхронно". По ходу ещё оказалось что sharedarraybuffer позапрещали из-за Spectre.
ткните меня, пожалуйста, в какую-нибудь простую, но рабочую в браузере реализацию чего-то такого:
Цитата:
|
наверное можно заернуть какую-то ересь с использованием service-worker: а именно сделать псевдофайл /wait.js, при запросе которого воркер становится остановку и ждёт сообщения о том что wasm загружен, после чего отмирает, и вставить оный сразу после скрипта который должен ждать...
|