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