支持的 Rust 目标
注意: 本节介绍 Rust 目标三元组,而不是像节点/Web Worker/浏览器这样的目标。有关这方面的更多信息即将发布!
`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 目标上将无条件地 panic。例如
#[wasm_bindgen] extern "C" { #[wasm_bindgen(js_namespace = console)] fn log(s: &str); } fn main() { log("hello!"); }
此程序将在除 `wasm32-unknown-unknown` 之外的所有平台上无条件地 panic。
但是,为了获得更好的编译时间,您可能希望仅在 `wasm32-unknown-unknown` 目标上使用 `#[wasm_bindgen]`。您可以像这样拥有特定于目标的依赖项
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2"
在您的代码中,您可以使用
#![allow(unused)] fn main() { #[cfg(target_arch = "wasm32")] #[wasm_bindgen] pub fn only_on_the_wasm_target() { // ... } }
其他 Web 目标
`wasm-bindgen` 目标不支持 `wasm32-unknown-emscripten` 也不支持 `asmjs-unknown-emscripten` 目标。目前也没有计划支持这些目标。所有注释在这些目标上的工作方式与其他平台相同,保留导出的函数并导致所有导入 panic。