APP下载

Mozilla将为WebAssembly加入界面类型,以提升与其他开发语言的互通性

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

报价宝综合消息Mozilla将为WebAssembly加入界面类型,以提升与其他开发语言的互通性

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进行测试。

2019-08-26 22:49:00

相关文章