支援的 Rust 目標
注意:本節是關於 Rust 目標三元組,而不是像 node/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。