支援的 Rust 目標
注意:本節是關於 Rust 目標三元組,而不是像 node/web workers/瀏覽器這樣的目標。更多相關資訊即將推出!
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_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
目標。目前也沒有計畫支援這些目標。所有註解在目標上都像其他平台一樣運作,保留匯出的函式,並導致所有匯入都 panic。