Я нашел эту статью от Кевина Хоффмана, пытающегося это сделать с помощью ржавчины.
Все сводится к использованию WebAssembly.instantiate(bufferSource, importObject)
, необязательно importObject
.Вы можете прочитать больше об этом на MDN .
Вот пример для статьи
Веб-клиент
<html>
<head>
<script>
function logit() {
console.log('this was invoked by Rust, written in JS');
}
let imports = {logit};
fetch('wasm_project.gc.wasm')
.then(r => r.arrayBuffer() )
.then(r => WebAssembly.instantiate(r, { env: imports }))
.then(wasm_module => {
alert(`2 + 1 = ${wasm_module.instance.exports.add_one(2)}`);
});
</script>
</head>
<body></body>
</html>
Прототип Rust
extern "C" {
fn logit();
}
Ржавчина
#[no_mangle]
pub extern fn add_one(a: u32) -> u32 {
logit();
a + 1
}
Кредит
Все кредиты принадлежат Кевину Хоффману Артикул