支援的 Rust 目標

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

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)]
fn main() {
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
pub fn only_on_the_wasm_target() {
    // ...
}
}

其他 Web 目標

wasm-bindgen 目標不支援 wasm32-unknown-emscriptenasmjs-unknown-emscripten 目標。目前也沒有計劃支援這些目標。所有註解在目標上的作用與其他平台相同,保留導出的函數並導致所有導入都 panic。