支援的 Rust 目標

注意:本節是關於 Rust 目標三元組,而不是像 node/web workers/瀏覽器這樣的目標。更多相關資訊即將推出!

wasm-bindgen 專案旨在針對 Rust 中的 wasm32-unknown-unknown 目標。此目標是 Rust 的「精簡」目標,它會發出 WebAssembly 作為輸出。標準函式庫在很大程度上是惰性的,因為像 std::fsstd::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-emscriptenasmjs-unknown-emscripten 目標。目前也沒有計畫支援這些目標。所有註解在目標上都像其他平台一樣運作,保留匯出的函式,並導致所有匯入都 panic。