最近有很多碎片化时间,读了下wasm的规范,也实现了一个完整的wasm的VM,谈下自己的看法:
wasm类似于一个跨平台的C语言,但是出于安全因素加了一些限制,比如不能内嵌汇编,不能任意跳转,其抽象
程度类似于C语言,所以VM,JIT,AOT都很好做,而且做的也可以很轻量级。
先不考虑web相关的东西,wasm 的价值主要有以下几点:
- 它是一个标准,解析起来也比较简单,能跑wasm的设备会比较多,甚至包括大量低端的IOT设备
- 分发比较容易,reachability很高。
由于跨平台特性,一旦生成了字节码以后可以预计将来十年,二十年依然可以跑起来。
这一点其实很重要,现在的软件构件系统太复杂了,一旦软件的作者不再维护了,已有的软件大概率就被废弃了。
编译输出成wasm以后,它的软件寿命会大大延长。
- 安全。因为前面提到wasm的运行时实现起来很容易,所以相对定制一个也比较轻松,这样可以做一些细粒度的控制。
比如只允许部分网络,文件访问等。
wasm对于web 我觉得不会削弱javascript的生态,反而会增强这个平台的生态,以前一些web不能做的,现在借助wasm
也可以做了。当然也有些不利的因素: 比如原本有simd.js proposal,因为wasm的出现simd指令只能在wasm上实现了,
但总的来说利大于弊。