5个不稳定版本
0.3.1 | 2023年5月17日 |
---|---|
0.3.0 | 2023年5月17日 |
0.2.1 | 2023年5月8日 |
0.2.0 | 2023年5月3日 |
0.1.0 | 2023年3月5日 |
#1357 在 过程宏 中
6KB
74 行
invoke-witc
将crate添加到依赖项中。
invoke-witc = "0.2"
此crate的用法是使用以下宏生成polyfill程序。例如:
invoke_witc::wit_instance!(import("./xxx.wit"));
invoke_witc::wit_runtime!(import("./xxx.wit"));
invoke_witc::wit_runtime!(export("./xxx.wit"));
假设有一个文件 xxx.wit
包含
num : func(a: u32) -> u32
并讨论一些特殊情况
导入:实例与运行时
在实例中,如果我们写
invoke_witc::wit_instance!(import("./xxx.wit"));
然后我们可以直接使用 num(10)
来获取一个 u32
。但在运行时,由于限制,我们不得不写
let u = num(&vm, 10);
其中 vm : Vm
。
运行时导出:带名称与不带名称
假设我们在运行时导出组件 xxx
,我们需要提供 num
的定义,如下所示。
invoke_witc::wit_runtime!(export("./xxx.wit"));
// An example implementation
fn num(a: u32) -> u32 { a + 1 }
然后我们必须将导入对象注册到 vm : Vm
,因此,我们将写
vm.register_import_module(xxx::wit_import_object()?)?
以确保稍后的wasm实例可以使用此实现。一个值得注意的是,你可以定义导出名称
invoke_witc::wit_runtime!(export(a = "./xxx.wit"));
invoke_witc::wit_runtime!(export(b = "./yyy.wit"));
使用导出名称,wit_import_object
将被包裹在不同的模块中,因此我们将有
vm.register_import_module(a::wit_import_object()?)?
.register_import_module(b::wit_import_object()?)?
依赖关系
~1.5MB
~35K SLoC