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过程宏

Apache-2.0

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