圖片來源: 

Mozilla強化了WebAssembly與Javascript的互通性,不只簡化之間傳值的程序,還簡化了將其打包成NPM套件的工作,並讓Javascript可以更直覺的使用WebAssembly套件功能。

2018年Rust社群就是想讓Rust成為網頁語言,而Rust是個系統開發語言,因此在網頁應用程式上,需要先把Rust編譯為WebAssembly,因此他們透過改進WebAssembly,來讓Rust能像Javasacript執行的一樣好,而開發人員也能夠像Javasacript一樣使用WebAssembly。

強化Rust與Javascript的互通性,讓Rust可以融入Javascript生態系中,與其說要強化Rust與Javascript的互通性,倒不如說強化的是WebAssembly與Javascript的互通性,與此同時也嘉惠了C/C++這類可以編譯為WebAssembly的語言與Javascript的互通性。

Rust社群目標要讓Javascript與Rust能夠互相呼叫函數,Rust也可以呼叫主機的函數,而Rust函式庫(Crate)能夠依賴NPM套件,Javascript與Rust也都能使用直覺的方式傳遞物件。(來源:Mozilla)

而第一個要解決便是WebAssembly與Javascript互相傳遞物件的問題,這是最困難的部分之一,因為目前WebAssembly只支援整數以及浮點數兩種型態,因此光是Javascript要傳送字串給WebAssembly函數,就夠開發者忙的了。

開發者需要將英文字母編碼成數字代碼,再將第一個字母的索引傳遞給WebAssembly端,WebAssembly再由索引取得數字後對應回字母。傳遞字串就如此大費功夫,就別論傳遞其他更複雜的物件了。

而Mozilla為這個複雜的過程製作了一個黑盒子,開發者不再需要理解傳遞物件的邏輯。只要在Rust程式碼中添加一些註釋,Wasm-bindgen便能自動建立WebAssembly與Javascript兩端需要的程式碼。而且基於Wasm-bindgen語言獨立特性,未來也能在其他語言,諸如C/C++中使用。

使用Wasm-bindgen功能會產生一些檔案,而這些檔案需要被打包成一個NPM套件,並由Package.json描述相依性。Mozilla為此打造了一站式打包功能,幫開發者把WebAssembly檔案編譯為NPM套件。(來源:Mozilla)

該功能會為使用者先執行Wasm-bindgen,接著把產生的檔案打包一起,從Rust程式碼中產生Package.json詳述相依性,而使用者需要做的就只是發布NPM套件。

把WebAssembly打包成NPM後,下一步就是要讓Javascript能夠取用。Mozilla開發者關係團隊工程師Lin Clark表示,這是一件苦差事,從提取文件到準備相依性,每一個步驟都必須撰寫程式碼來完成,而現在新提供的ES模組就能完成這件事,目標讓使用WebAssembly模組就跟導入一樣簡單。不過,這件功能目前還不夠完善,Mozilla正與TC39及WebAssembly社群規畫標準化事宜。

Rust距離成為網頁語言還有一段路,首要工作就是能與Javascript生態系有良好的協作,但Lin Clark表示,Mozilla並沒有想要讓Rust取代Javascript,只不過有一些工作的確比較適合用Rust來進行,像是解析地圖或是找出DOM的改變等。


Advertisement

更多 iThome相關內容