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 个) 中使用

MIT/Apache

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