哪些 Crates 可以直接與 WebAssembly 搭配使用?

最簡單的方法是列出目前無法與 WebAssembly 搭配使用的項目;避免使用這些項目的 Crates 通常可以移植到 WebAssembly,並且通常可以直接使用。一個好的經驗法則是,如果一個 Crate 支援嵌入式和 #![no_std] 的使用方式,它可能也支援 WebAssembly。

Crate 可能會執行的操作,但無法與 WebAssembly 搭配使用

C 語言和系統函式庫的相依性

wasm 中沒有系統函式庫,因此任何嘗試綁定到系統函式庫的 Crate 都無法使用。

使用 C 語言函式庫也可能會失敗,因為 wasm 沒有穩定的跨語言通訊 ABI,而且 wasm 的跨語言連結非常挑剔。每個人都希望這最終能運作,尤其是因為 clang 現在預設提供 wasm32 目標,但目前還沒有完全實現。

檔案 I/O

WebAssembly 無法存取檔案系統,因此假設存在檔案系統的 Crates(並且沒有針對 wasm 的特定解決方法)將無法運作。

產生執行緒

計畫將執行緒新增至 WebAssembly,但目前尚未推出。在 wasm32-unknown-unknown 目標上嘗試產生執行緒將會造成 panic,這會觸發 wasm 陷阱。

那麼,哪些通用 Crates 可以直接與 WebAssembly 搭配使用?

演算法和資料結構

提供特定演算法資料結構實作的 Crates,例如 A* 圖形搜尋或伸展樹,通常可以與 WebAssembly 良好地搭配使用。

#![no_std]

不依賴標準函式庫的 Crates通常可以與 WebAssembly 良好地搭配使用。

剖析器

剖析器——只要它們只接收輸入而不執行自己的 I/O——通常可以與 WebAssembly 良好地搭配使用。

文字處理

處理以文字形式表達的人類語言複雜性的 Crates通常可以與 WebAssembly 良好地搭配使用。

Rust 模式

針對 Rust 程式設計中特定情況的共享解決方案通常可以與 WebAssembly 良好地搭配使用。