系統介面WASI 0.3改用元件模型非同步機制,改善Wasm跨元件呼叫與串流處理
WASI是WebAssembly在瀏覽器外使用系統功能的重要介面。早期WASI 0.1主要處理檔案、環境變數、亂數等基本功能,讓WebAssembly程式能在伺服器或命令列環境執行。2024年的WASI 0.2把重心轉向元件模型,讓不同語言寫成的WebAssembly元件可以用明確介面互相組合。而到了WASI 0.3,重點在於各元件不必各自維護事件迴圈或非同步執行環境,而是改用元件模型本身提供的共用非同步機制。
在WASI 0.2中,使用串流或非同步功能的元件,常需要各自帶有事件迴圈或非同步執行方式。單一元件可以執行,但多個元件要彼此搭配時,事件排程不容易協調,WASI 0.3改由宿主端統一管理事件迴圈,執行環境負責安排等待中的工作,即使非同步呼叫跨過多個元件邊界,也能在結果準備好後繼續處理。
該變更也簡化了介面設計,WASI 0.2中用來處理輪詢、輸入串流與輸出串流的機制,到了WASI 0.3不再需要由WASI另外設計,而是改由元件模型本身提供。過去需要拆成開始、完成與訂閱等多個步驟的非同步呼叫,也可改成直接宣告為非同步函式,讓綁定產生器能產生更接近Rust、Go、JavaScript或Python慣用寫法的非同步介面。
變動較大的部分包括HTTP介面,WASI 0.3重新整理HTTP服務與中介元件的設計,使一個WebAssembly元件可以把收到的請求轉交給另一個元件處理。這種服務串接方式,讓執行環境有機會在同一個程序內組合多個元件,而不一定要讓服務之間透過網路互相呼叫。
官方指出,WebAssembly執行環境Wasmtime 45已可執行最新候選版本,Wasmtime 46將納入WASI 0.3.0,並預設啟用元件模型的非同步能力。JavaScript元件模型工具鏈jco也已支援WASI 0.3,後續版本將預設啟用。Rust、Go、JavaScript和Python等用來開發WebAssembly元件的語言工具鏈,則仍在逐步導入支援。
Comments (0)