#host #arguments #results #complex #structure #data

wasi-binio-host

允许在宿主和wasm之间传递复杂的数据结构作为函数参数和结果

1 个不稳定版本

0.1.0 2020年4月2日

#80#results

MIT 许可证

8KB

wasi_binio_host 和 wasi_binio_wasm

wasi_binio_host 是 wasm_binio 的宿主crate。另一个crate是 wasi_binio_wasm,它用于wasm模块中。它创建了一个call_stub,以便宿主可以调用带有复杂数据结构参数和结果的WebAssembly函数。

截至今天,wasm函数只能接受i32 i64 f32 f64类型。如果你在wasm中有一个像这样的函数:在wasm中: do_compute(point1: &Point, point2: &Point)->Rect {...}没有直接从宿主调用它的方法。借助wasm_binio的帮助,我们也可以调用call_stub函数,并像这样发送参数和结果

宿主中的代码

let result: Rect = call_stub(&instance, &(point1, point2), "do_compute")

wasm中的代码

#[no_mangle]
fn do_compute(ptr:i32, buffer_size: i32)->i64{
   let point_tuple : (Point, Point) = wasi_binio_wasm::wasm_deserialize(ptr, buffer_size).unwrap();
   let rect: Rect = some_how_make_a_rect_from_two_points()... /* Your own logic here */
   wasi_binio_wasm::wasm_serialize(&rect).unwrap()
}
Since wasm and wasi are under active development. Wasi will soon provide complex arguments support.
At the time you find this crate, this feature probably have already been supported natively.

依赖

~30MB
~558K SLoC