Возврат нескольких значений из функции wasm

У меня есть TCP-сервер Golang, работающий локально и подключенный к модулю wasm. В настоящее время я могу вернуть одно значение из функции wasm. В этом блоге я заметил, что должно быть возможно возвращать несколько значений, а не одно. Однако на моем TCP-сервере Go я не получаю ответа от функции wasm.

Вот как я сделал это для возврата одного значения, и он отлично работает:

      // Rust code for wasm modules
#[no_mangle]
pub extern "C" fn echo(ptr: *mut u8, length: usize) -> *mut u8 {
    ...
    let newptr = get_ptr(); 
    newptr
}

На сервере Go:

      // Go code to connect to wasm modules and get access to the returned value
engine := wasmtime.NewEngine()
store := wasmtime.NewStore(engine)
linker := wasmtime.NewLinker(store)
...
newPtr, err := server.funcs["echo"].Call(server.ptr, int32(len(recivedBytes)))
check(err)
ptr := newPtr.(int32)

Вот как я пытаюсь вернуть несколько значений из функции wasm:

      // Rust code for wasm modules
#[no_mangle]
pub extern "C" fn echo(ptr: *mut u8, length: usize) -> (*mut u8, i32) {
    ...
    let newptr = get_ptr(); 
    let newlength = get_length();
    (newptr, newlength)
}

На сервере Go я добавил следующую строку кода:

          wasmtime.NewConfig().SetWasmMultiValue(true)

А в остальном все как раньше:

      /* Go code to connect to wasm modules and get access to the returned value */
engine := wasmtime.NewEngine()
store := wasmtime.NewStore(engine)
linker := wasmtime.NewLinker(store)
...
result, err := server.funcs["echo"].Call(server.ptr, int32(len(recivedBytes)))
check(err)
res := result.([]wasmtime.Val)

Я компилирую модули wasm, используя cargo wasi buildкоманда, и она компилируется нормально. Но при отправке запроса на сервер Go, который обращается к модулям wasm, я получаю сообщение об ошибке got 2 expected 3 arguments. Я не понимаю, каким должен быть третий аргумент.

0 ответов

Другие вопросы по тегам