支持的 Rust 目标
注意: 本节介绍的是 Rust 目标三元组,而不是像节点/Web 工作线程/浏览器这样的目标。有关该方面的更多信息即将发布!
`wasm-bindgen` 项目旨在针对 Rust 中的 `wasm32-unknown-unknown` 目标。此目标是 Rust 的一个“基础”目标,它输出 WebAssembly。标准库在很大程度上是惰性的,因为像 `std::fs` 和 `std::net` 这样的模块只会返回错误。
非 wasm 目标
请注意,`wasm-bindgen` 还旨在编译所有目标。这意味着,如果你愿意,即使编译到 Windows(例如),使用 `#[wasm_bindgen]` 也是安全的。例如
#[wasm_bindgen] pub fn add(a: u32, b: u32) -> u32 { a + b } #[cfg(not(target_arch = "wasm32"))] fn main() { println!("1 + 2 = {}", add(1, 2)); }
此程序将在所有平台上编译并运行,而不仅仅是 `wasm32-unknown-unknown`。请注意,使用 `#[wasm_bindgen]` 导入的函数在非 wasm 目标上将无条件地出现恐慌。例如
#[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] fn log(s: &str); } fn main() { log("hello!"); }
此程序将在除 `wasm32-unknown-unknown` 之外的所有平台上无条件地出现恐慌。
但是,为了获得更好的编译时间,你可能希望只在 `wasm32-unknown-unknown` 目标上使用 `#[wasm_bindgen]`。你可以像这样拥有一个特定于目标的依赖项
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2"
在你的代码中,你可以使用
# #![allow(unused_variables)] #fn main() { #[cfg(target_arch = "wasm32")] #[wasm_bindgen] pub fn only_on_the_wasm_target() { // ... } #}
其他 Web 目标
`wasm-bindgen` 目标不支持 `wasm32-unknown-emscripten` 也不支持 `asmjs-unknown-emscripten` 目标。目前也没有计划支持这些目标。所有注释都像其他平台上的目标一样工作,保留导出的函数并导致所有导入出现恐慌。