#bindings #code-generation #wasm #javascript

wasm-wrapper-gen

为针对 wasm32-unknown-unknown 的 Rust 代码生成 JavaScript 包装器

3 个版本

使用旧的 Rust 2015

0.0.3 2017 年 12 月 6 日
0.0.2 2017 年 11 月 28 日
0.0.1 2017 年 11 月 27 日

#246 in FFI

MIT 许可证

6KB
53

wasm-wrapper-gen

为针对 wasm32-unknown-unknown 的 Rust 代码生成 JavaScript 包装器。

此存储库目前处于非常早期的开发阶段,但有一个完整的可工作示例 Cargo 项目在 examples/simple_summation/ 目录中。

概述

wasm-wrapper-gen 由两个相互关联的部分组成

  • wasm-wrapper-gen 提供了 js_fn!() 宏,该宏生成 extern "C" 函数
  • wasm-wrapper-gen-build 是一个构建脚本工具,它从源代码中提取对 js_fn!() 的使用情况,并生成一个 JavaScript 文件,该文件将这些导出的函数绑定起来。

注意:此假设为小端硬件(现代硬件的大多数)。

当前支持

  • 参数类型
    • bool, u8, u16, u32, usize, i8, i16, i32, isize, f32, f64
    • &[_], &mut [_], Vec<_> 其中 _ 是上述任何一种
  • 返回类型
    • bool, u8, u16, u32, usize, i8, i16, i32, isize, f32, f64
    • Vec<_> 其中 _ 是上述任何一种
  • 除非 Rust 函数崩溃,否则将提供完全自动的内存管理和释放
  • 配置以使用单个 DataView 或每个参数的 TypedArray 实例来访问数组
  • 可配置的输出JS缩进

未实现

  • 接下来要做的

    • 添加支持将异步构造函数而不是同步构造函数
    • 添加支持使用 impl 块和 self 参数创建包装JS类型,这些类型可以合理地管理分配。
  • 未来的进一步

    • 进行实际测试并找出如何编写一个只在测试时运行的 build.rs 脚本
    • 实现某些序列化特质的任意参数类型
    • 宏用于将单个结构体包装在单独的JavaScript类中,这些类都引用相同的WebAssembly.Instance

依赖项

~2MB
~48K SLoC