WASI 0.3.0 版本說明

WASI 0.3.0 將 WebAssembly 系統介面過渡到以 Component Model 為基礎的架構,引入了如 actors 和 streams 這樣的非同步功能。此版本表示從簡單的類 Unix API 轉向更結構化、可互操作的組件系統,該系統專為伺服器端 Wasm 執行環境設計。

過渡到 Component Model

WASI 0.3.0 建構於 WebAssembly Component Model 之上,遠離了舊版單體 API 方法。此架構轉變旨在透過使用 .wit (WebAssembly Interface Type) 檔案定義介面,以提供不同生態系統間更佳的互操作性,這些檔案可直接在 WASI GitHub 提案目錄 中瀏覽。

儘管 Component Model 的初衷是促進模組化,但它在開發者間引發了關於複雜性的討論。一些批評者認為,遠離精簡的類 Unix API,轉向「有觀點的組件模型」會引入不必要的過度複雜化,這可能會阻礙保持 WebAssembly 快速且簡單的主要目標。

新增非同步功能

WASI 0.3.0 的主要技術進步是引入 async/await 風格的功能。包括:

  • Actors:啟用結構化並發和通訊。
  • Streams:提供一種標準化的方式來非同步處理資料流。

這些功能旨在將現代非同步編程模式帶入 Wasm 生態系統,儘管實作細節——例如 stackfull async 是否依賴於 stack-switching 提案——仍然是執行環境實作者間的技術探討點。

生態系統相容性與執行環境支援

WASI 0.3.0 目前針對伺服器端執行環境,且瀏覽器不提供原生支援。它也與原始 WASI 提案以及支援舊版的執行環境保持相容性中斷。

對於今日需要將未修改的 C/C++ 程式和函式庫編譯為 WebAssembly 的開發者來說,由於 WASI 0.3.0 目前的工具鏈存在差距,常被引用的替代方案如 WASIX 被視為更實用的選項。此外,語言支援仍在演進中;例如,Rust 開發者正在等待一個專用的 WASI 0.3 目標,以充分利用此新版本。

社群觀點與批評

針對此版本的社群回饋呈現兩極化,焦點在於透明度與組件模型的實用性:

"wasi 元件的承諾尚未實現。市場希望能動態熱載入並連結構件。wasi 專案若要以此方式使用,需要內部的巧思:該產品在出貨前已經靜態連結元件。"

其他開發者對於在 0.3.0 版本發布前開發過程缺乏公開可見性的感覺感到沮喪,這表明在公告之前的一段顯著時間內,進展對公眾並不明顯。

關鍵變更摘要

功能 WASI 0.2 / 舊版 WASI 0.3.0
架構 單體的 / 類 Unix 以 Component Model 為基礎
非同步支援 有限的/同步 Async/Await, Actors, Streams
介面定義 C 風格 headers/API .wit files
主要目標 通用 Wasm 伺服器端執行環境

Sources