.NET 應用程序支持直接調用WebAssembly 模塊
WebAssembly Runtime現已添加.NET Core API,開發者可直接在.NET應用程序中調用WebAssembly模塊。Mozilla 宣布由Bytecode Alliance創建的Wasmtime(WebAssembly runtime)現已添加處於早期預覽版狀態的.NET Core API,這就意味著開發者可以直接在.NET應用程序中調用WebAssembly代碼。
Bytecode Alliance(字節碼聯盟)是由Mozilla、Fastly、Intel與Red Hat聯合成立的組織,該聯盟旨在通過協作實施標準和提出新標準,以完善WebAssembly在瀏覽器之外的生態。Mozilla提到,.NET Core作為一個跨平台的Runtime,仍提供對WebAssembly的支持主要三個好處,除了可跨平台共享更多代碼之外,還能安全地隔離不受信任的代碼,同時憑藉著WebAssembly的接口類型(WebAssembly Interface Types),WebAssembly和.NET可相互傳遞複雜類型。
雖然我們能夠使用.NET Core 構建跨平台應用,但如果要使用諸如C 或是Rust 等原生函數庫,這仍然是十分不方便的操作,因為需要函數庫為每個平台發布特定函數庫版本。不過有了WebAssembly 之後,我們可以將其作為橋樑以簡單滿足上面的需求。原生函數庫可以先編譯成WebAssembly,然後包括.NET Core 在內的許多平台就能使用這些WebAssembly 模塊,這將簡化函數庫的發布以及應用程序對這些函數庫的依賴方式。
由於WebAssembly 是面向網頁設計的,網頁是一種每次訪問網站(讀/寫數據)都會執行不受信任代碼的環境,WebAssembly 模塊只能調用從主機環境明確輸入的外部函數,而且只能在主機分配的內存區域進行讀寫數據,這種沙盒設計方式也能被應用在.NET Core 中,以增加安全性。通過支持WebAssembly,.NET Core 也能使用沙盒以執行不信任代碼。
另外,Bytecode Alliance 力推的WebAssembly 接口類型增加了WebAssembly 與其他語言的互通性,.NET Core 也能從中受益。Mozilla 表示,WebAssembly 接口類型簡化了應用程序與WebAssembly 模塊間來回傳遞複雜類型所需的“膠水代碼”。當Wasmtime 的.NET API 最終可以對接口類型進行操作,WebAssembly 和.NET 之間就能夠無縫地傳遞複雜類型。
最後,Wasmtime 新增加的這個.NET Core API 尚處於預覽階段,Bytecode Alliance 成員仍在對其積極開發中,更新將不保證向後兼容。當前目標是讓Wasmtime 更為穩定,因此不建議開發者將Wasmtime 的.NET Core API 用於正式產品開發。