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 用於正式產品開發。