Bytecode Alliance釋出的Wasmtime現在新增加.NET Core API,而這項更新的意思,代表開發人員將可直接在.NET程式中,載入WebAssembly程式碼。Wasmtime是小型高效能的WebAssembly Runtime,目前這個新API正在初期預覽階段。

Bytecode Alliance是Mozilla、Fastly、英特爾和紅帽共同組成的WebAssembly聯盟,要透過共同提案並實作新標準,來推動WebAssembly在瀏覽器之外的應用。Mozilla提到,之所以.NET Core已經是一個跨平臺的Runtime,仍然要支援WebAssembly,主要有3項好處,除了可跨平臺共享更多程式碼之外,還能安全地隔離不受信任程式碼,同時也能因WebAssembly介面類型(WebAssembly Interface Types),使WebAssembly和.NET可相互傳遞複雜類型。

雖然.NET可以建置跨平臺應用程式,但是要使用諸如C或是Rust等原生函式庫,卻仍然相當不方便,需要函式庫為每個平臺發布特定的函式庫版本,不過,WebAssembly卻可以扮演橋樑的角色,簡單地滿足這項需求。原生函式庫能夠先編譯成WebAssembly,則許多平臺包括.NET,就能使用這些WebAssembly模組,這將能簡化函式庫的發布以及應用程式相依於這些函式庫的方式。

由於WebAssembly是為網頁設計,而網頁是一種每次存取網站,都會執行不受信任程式碼的環境,WebAssembly模組只能呼叫從主機環境明確輸入的外部函式,而且也只能存取主機所分配的記憶體區域,而這樣的沙盒程式碼設計,也能被應用在.NET中增加程式安全性。

Mozilla提到,過去.NET Framework曾經嘗試要將不受信任程式碼沙盒化,但是最終無論是程式碼存取安全性(Code Access Security)或是應用程式域(Application Domains)等技術,都無法正確隔離程式碼,因此微軟最後在.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成員仍積極開發中,更新將不保證向後相容,目前Bytecode Alliance的第一目標是讓Wasmtime更為穩定,因此不建議開發者將Wasmtime的.NET Core API用於正式產品開發。


Advertisement

更多 iThome相關內容