APP下载

强化WebAssembly与Javascript互通性,Rust向网页语言再进一步

消息来源:baojiabao.com 作者: 发布时间:2024-03-29

报价宝综合消息强化WebAssembly与Javascript互通性,Rust向网页语言再进一步
图片来源: 

Lin Clark

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的改变等。

2018-03-19 19:32:00

相关文章