功能参考
此章节将尝试说明, wasm-bindgen项目中实现的各种功能.
下面这部分不是详尽无遗的,但tests用例也能成为你一个寻找功能例子的好地方.
该#[wasm_bindgen]属性可以附加到函数,结构,impls 和外部模块.
其中:
- Impls 只能包含函数,并且该属性不能附加到 impl 块中的函数 或 外部模块中的函数.
- 任何这些类型都不允许使用生命周期参数或类型参数.
- 其他语言模块必须有"C"abi (或没有) 列表 .
- 带有#[wasm_bindgen]的免费函数可能有或没有"C"abi 的列表, 都不必要用#[no_mangle]属性.
所有 函数参数引用的结构都应该在宏本身中定义. 参数允许实现WasmBoundary特征,
例子是:
- 整数-Int (u64 / i64需要BigInt支持)
- 浮点数-Floats
- 借用的字符串&str)
- 拥有的字符串 (String)
- export 结构 (Foo,注释#[wasm_bindgen])
- export 类似 C 的枚举 (Foo,注释#[wasm_bindgen])
- 导入 带有注释的外部模块的类型 要#[wasm_bindgen]
- 借用 export 结构 (&Foo要么&mut Bar)
- 该JsValue类型和&JsValue(不是可变引用)
- Vectors 和 支持的整数类型的切片 和JsValue类型.
上述所有内容还可以返回,除了借用的引用
Vec<JsValue>目前不支持作为函数的参数.
字符串是实现,将数据复制 in/out Rust 堆的垫片函数. 也就是说,从 JS 传递给 Rust 的字符串 被复制到Rust堆 (使用 生成的补丁 malloc 一些空间) , 然后将被适当地释放.
拥有的值通过 框 实现. 当你返回一个Foo, 它实际上变成了Box<RefCell<Foo>>,并作为指针返回给 JS .
指针是有一个定义的 ABI ,和RefCell是为了确保 JS 中的 重导入 和 重命名 的安全性.
一般来说正常使用.,你不应该看到RefCell恐慌
JS-values-in-Rust 是 通过 索引 实现的,而索引一个生成表格是实现 JS绑定 的一部分. 此表格是通过 Rust 中指定的所有权, 以及 我们返回的绑定 进行管理. 有关这方面的更多信息,请参阅design doc.
目前, 所有这些构造在 JS方面 创建相对简单的代码, 大多数在 Rust与JS 中具有1: 1的匹配.