7个版本 (破坏性更新)
0.13.0 | 2024年1月23日 |
---|---|
0.12.0 | 2023年7月5日 |
0.11.0 | 2022年8月31日 |
0.10.0 | 2022年4月4日 |
0.6.0 | 2021年7月6日 |
#1944 in 游戏开发
每月 33 次下载
在 4 个工具箱(直接使用 2 个) 中使用
100KB
2K SLoC
一套宏集合,旨在帮助创建和实现WebAssembly API和绑定,旨在在Ark环境中运行。
有关工作原理、此工具箱背后的动机以及详细的示例,请参阅Ark的私有文档。
问题
手动实现WebAssembly FFI(外部函数接口)既繁琐又无法使用惯用的Rust(如获取或返回非平凡类型(用户结构体、枚举等,以及惯用的Rust类型如Result
/String
等)。
解决方案
此工具箱提供宏,旨在协同解决问题,并允许在API中使用高级模式。
用户端ark_bindgen
宏
此宏应用于一个Rust文件中定义的mod
,该文件将被编译成WebAssembly。此宏的输出取决于是否在宿主上运行。
- 在宿主上,这将创建一个包含一些静态内部方法以及使用高级、惯用Rust模式镜像外部C函数声明的
HostShim
特质。此宏可以使用以下所述的host_exports
宏部分自动实现。 - 在用户代码中,此宏还将创建该特质以及一个包含与声明中相同签名的函数的
mod
。
以下是使用此宏可以做的不同类型的声明
// TODO 重新包含,也请参阅#4516 //rust,ignore //#![doc = include_str!("../../api-ffi/src/ffi/example_automatic.rs")] //
宿主端host_export
宏
此宏应用于上述宏生成的 HostShim
特性中的 impl 块。最终用户只需在特性中实现 _shim
函数,其他部分将由该宏免费实现。
// TODO 重新包含,参见 #4516 //rust,ignore //#![doc = include_str!("../../../components/module-host/src/host_api/examples/automatic_macro.rs")] //
test
宏
此宏旨在在编译为 WebAssembly 的 Rust 模块中复制 #[test]
的行为。
依赖项
~1.5MB
~35K SLoC