這是Rust 和 WebAssembly 協力作業的未發布文件,已發布的文件可在 Rust 和 WebAssembly 主要文件網站 取得。這裡文件化的功能在 Rust 和 WebAssembly 發行的工具版本中可能無法使用。

哪些箱子可以使用 WebAssembly 即用型?

最簡單的列出目前無法使用 WebAssembly 的事項;會避免這些事項的箱子傾向於可以移植到 WebAssembly,並且通常可以直接使用。一個不錯的經驗法則,就是如果一個箱子支援內嵌和 #![no_std] 用法,它可能也支援 WebAssembly。

箱子可能做的事情,但不會使用 WebAssembly

C 和系統程式庫依賴項

wasm 中沒有系統程式庫,因此任何嘗試連結到系統程式庫的箱子都無法使用。

使用 C 函式庫可能會導致失敗,因為 wasm 沒有用於跨語言通訊的穩定 ABI,而 wasm 中的跨語言連結非常不穩定。雖然大家都希望這項功能未來能夠順利運作,尤其因為 clang 已預設發布他們的 wasm32 目標,不過這項功能目前尚未正式推出。

檔案輸入/輸出

WebAssembly 無法存取檔案系統,因此假設檔案系統存在的函式庫,而且沒有 wasm 專用解決方案的函式庫將無法順利運作。

衍生執行緒

WebAssembly 有 增加執行緒的計畫,但是尚未開始發布。嘗試在 wasm32-unknown-unknown 目標上衍生執行緒會引發恐慌,進而觸發 wasm 陷阱。

哪些通用函式庫通常可用於 WebAssembly?

演算法與資料結構

提供特定 演算法資料結構 實作的函式庫,例如 A* 圖形搜尋或伸展樹,通常可以順利用於 WebAssembly。

#![no_std]

不依賴標準函式庫的函式庫通常可以順利用於 WebAssembly。

剖析器

剖析器,只要只取得輸入,而沒有執行自己的輸入/輸出,通常都可以順利用於 WebAssembly。

文字處理

處理以文字形式表示的人類語言的函式庫通常可以使用於 WebAssembly。

Rust 模式

針對特定 Rust 程式設計情況提供的共用解決方案通常可以使用於 WebAssembly。