Categories
程式開發

Wasmtime:終於可以在.NET應用中運行WebAssembly了


儘管圍繞WebAssembly的勢頭一直在增長,WebAssembly運行時Wasmtime才增加對.NET Core的支持,使得基於.NET Core的應用程序可以運行WebAssembly代碼。

WebAssembly是安全、可移植的低級代碼格式,旨在提供高效執行和緊湊表示。 WebAssembly通過實現硬件無關、語言無關和平台無關,盡可能將可移植性做到極致。

根據來自Mozilla的工程師Peter Huene介紹,將WebAssembly和.NET集成,可以簡化代碼共享同時提供更好的未授信代碼隔離。

Huene表示,相較於共享類似C庫這樣的本地庫,共享WebAssembly模塊明顯要容易很多,因為前者依賴特定平台構建。而WebAssembly模塊可以在無需修改的情況下分發。

作為一個示例,Huene展示了將Rust編寫的一個庫編譯成WebAssembly,然後集成到.NET應用中。整個過程不需要考慮.NET應用程序運行的實際處理器架構和操作系統。整個工作流尚未完美簡化,因為開發者還需要處理許多諸如值轉換等低級別細節。正如Huene所說,多虧了即將發布的WebAssembly接口類型提案,這些問題將來都會解決。這個提案將會提升WebAssembly和.NET之間的交互性,簡化二者之間複雜數據類型的交換,無需再編寫太多膠水代​​碼,可以將WebAssembly模塊當成是.NET的包。

WebAssembly要求顯示導入允許模塊使用的所有外部函數,並且僅能訪問主機平台上保留的內存區域,從而使隔離未受信代碼成為可能。該功能讓WebAssembly模塊能夠在沙箱環境中高效運行的同時,無需擔心陌生插件任意訪問主機平台。

Huene在他的文章中為希望在.NET應用程序中使用WebAssembly的開發者提供了很多有價值的信息,涵蓋了整個流程中的所有方面。包括了創建WebAssembly代碼來解決問題;檢查模塊需要從主機獲得哪些內容,以及想主機提供什麼功能;創建.NET工程並導入WebAssembly模塊,同時將.NET函數暴露給WebAssembly模塊。

瀏覽器外運行WebAssembly應用程序的運行時環境中,Wasmtime不是唯一一個。這裡尤其需要提一下的有,Wasmer,它也和Wasmtime一樣是一個通用運行時環境;WebAssembly Micro Runtime,專注於小尺寸設備。多虧了Miguel de Icaza創建的項目Wasmer-sharp,Wasmer也能夠用於.NET項目。 Wasmtime和Wasmer都處於活躍開發階段,雖然它們的目標不是完全重合

這兩個項目或多或少有些競爭。

原文鏈接:

Wasmtime Enables Running WebAssembly From .NET Programs