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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章