【发布时间】:2023-02-10 10:51:34
【问题描述】:
是否可以像下面这样编写一个独立的 Rust 应用程序,将其编译成两部分,一个 wasm 和一个 native ,并将 wasm 运行时(如wasmtime)嵌入到最终的二进制文件中,整个部分就像一个应用程序一样工作?
WasmEdge 有一个标记 wasm 函数的宏 #[wasmedge_bindgen],但没有任何东西可以使主机函数在 wasm 运行时中可访问。
#[make_a_wasm_func]
fn f1(i: i32)->i32{
i+1
}
#[make_a_host_func_that_can_be_called_from_wasm]
fn f2(i: i32)->i32{
f1(i)+2
}
#[make_a_wasm_func]
fn f3(i:i32)-> i32{
f2(i)+3
}
fn main(){
let r=f3(1);
println!("{}",r);
}
The expected output is 7.
【问题讨论】:
-
我正在看一些非常相似的东西,我的理解是“主机”功能需要作为“导入对象”导入到“wasm”部分。我知道这可能不是您正在寻找的答案,但我认为我可能会添加更多背景信息。
-
WasmEdge在this repo 中发布了一系列示例。最近发布的示例涵盖了一些基本用例,例如如何从主机调用 wasm 库。对于您的用例,Example 2、Example 2-1 和Example 4 可以帮助您。
标签: rust webassembly