哪些箱子可以使用 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。