Как я могу получить адрес статического mut из wasm (rust) в js?

#javascript #rust #webassembly #wasm-bindgen

#javascript #Ржавчина #webassembly #wasm-привязка

Вопрос:

У меня есть проект rust-wasm, в котором мне нужно заполнить буфер в webassembly перед передачей его в мой js-скрипт, а затем отобразить его с помощью canvas.

(Вдохновлено этой статьей)

 static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];
  

Но статический mut в rust небезопасен, поэтому я не могу объявить его с помощью #[wasm_bindgen]

Как я могу получить адрес этого статического буфера в моем js-скрипте?

Редактировать :

Я видел это решение:

 const { instance } = await WebAssembly.instantiateStreaming(
          fetch("./demo.wasm")
        );

const buffer_address = instance.exports.BUFFER.value;
  

Я действительно не понимаю, что происходит в этом коде, и
Я не могу использовать это, потому что я использую wasm-pack buildtool: он создает для меня файл .js, соответствующий файлу wasm, и я все еще не могу получить адрес буфера.

Любая помощь будет оценена

Ответ №1:

В вашей связанной статье используется #[no_mangle] , что делает BUFFER экспортированный.

 #[no_mangle]
static mut BUFFER: [u32; WIDTH * HEIGHT] = [0; WIDTH * HEIGHT];
  

Затем экспортированный BUFFER файл можно найти в экземпляре через instance.exports.BUFFER.value; .