Mozilla為WebAssembly添加了介面類型(WebAssembly Interface Types),以提升WebAssembly與其他語言的互通性,WebAssembly模組將能夠與使用Python、Rust與Node等程式語言原生Runtime執行的模組溝通,傳遞字串、序列、記錄和變數等高階值。

開發者不只可以在瀏覽器之外,以獨立Runtime執行WebAssembly程式,而且還能以Python、Ruby以及Rust編寫WebAssembly程式,Mozilla首席研究工程師Lin Clark提到,之所以開發者會想這麼做,主要有三個原因。

首先,WebAssembly能讓使用原生模組變得不那麼複雜,像是Node以及CPython都允許使用開發者以C++撰寫的模組,因為低階語言模組執行速度更快,但因為需要在使用者裝置上編譯,因此也難以使用,而WebAssembly原生模組提供與低階語言模組差不多的執行速度,但使用起來更簡單。

而像是Rust這些低階語言,就不需要WebAssembly的加速,但是由於WebAssembly會預設提供輕量級沙盒,因此將程式編譯成WebAssembly,可以為原生程式碼模組提供額外的安全保護,這是第二個原因。第三個原因則是,WebAssembly讓程式碼能夠跨平臺共享程式碼,在網頁以及桌面應用程式使用相同的程式碼基底,在不損失執行的速度的前提下,節省開發時間以及維護成本。

但是目前WebAssembly與其他開發語言互通的難題,在於WebAssembly僅支援數字,當其他語言要傳遞字串給WebAssembly,就必須要先將字串轉成數字陣列交由WebAssembly處理,再將處理結束後回傳的數字陣列轉回字串,Lin Clark提到,雖然WebAssembly與其他語言可以互相呼叫,但只要傳遞的值是數字以外的類型,情況就會變得很複雜,想要解決這個問題,就必須要替WebAssembly和各語言,都發展可以使用數字溝通的模組,並為使用這個模組的環境增加黏合用的中介程式碼。

即將到來的這個WebAssembly介面類型,就是要來解決這個問題,WebAssembly介面類型將提供豐富的API和複雜類型,能讓WebAssembly模組與使用其他語言撰寫的WebAssembly模組順暢互通,甚至還能直接與以各程式語言原生Runtime執行的模組溝通,並且也讓WebAssembly模組能和主機系統通訊。

WebAssembly介面類型與現在WebAssembly擁有的類型完全不同,不會因為增加了介面類型因此增加WebAssembly任何新的操作,所有操作都會在雙方的具體類型(Concrete Type)中執行,Lin Clark表示,雙方不會共享描述(Representation),而是從一邊複製值到另一邊而已。

目前WebAssembly介面類型仍處在早期階段的提案,因此很可能會有大幅度的改變,不過有興趣的開發者,現在就可以搭配使用Rust工具鍊、wasm-bindgen以及Wasmtime WebAssembly Runtime進行測試。


Advertisement

更多 iThome相關內容