最近在做 wasm 2.0 的一些工作, 由于我是 wasm 1.0 draft 时代入坑并退坑的人, 错过了 wasm 1.0 release 和 wasm 2.0 draft, 因此花了差不多两周时间追上了当前的 wasm 2.0 draft 的进度. 长话短说, wasm 2.0 从技术上来说, 不是一个很符合我哲学的设计, 只能称它"又一个平平无奇的通用计算架构".
wasm 2.0 增加了引用类型, 并且贴心的增加了 "null" 值. 很难在 2024 年评价这个行为, 因为 "null" 最早的发明者, 在 2009 年就发表了著名的 "Null References: The Billion Dollar Mistake - Tony Hoare".
向量指令. wasm 2.0 支持 128 位向量指令. 我认为这个行为让 wasm 的定位非常模糊. 最早 wasm 的定位是轻量级的嵌入式虚拟机, 向量指令的加入让整个技术栈非常复杂(重量化). 不能说这个行为是错的, 但是向量长度目前只支持 128 位, 其实对性能的提升非常有限. 也就是代价太高, 而收益不足.
槽点比较大的就这两条. 未来 wasm 如何发展, 不好预言, 但可以确认的是它已经丧失了技术的美感.
1
14 49 天前
感谢分享,我一直想把 WebAssembly 用在产品上但始终感觉很鸡肋,我的想法是能否实现使用 TS/JS 这样通用动态的语言编写逻辑,再编译成 WebAssembly 高性能隔离执行,但是现在的问题是编写方面 TS/JS->WebAssembly 只有 QuickJS/AssemblyScript /javy 这样的选择缺乏真正全功能支持,而执行方面也缺乏稳定可靠的方案。
|
2
musi 49 天前 via iPhone
感觉 wasm 还需要让子弹飞一会
|
3
huangsen365 48 天前
bolt.new webassembly 了解下
|
4
buffzty 48 天前
活捉野生大佬一只 几年前看你博客学了好多.
我比较关注 wasi 这个能做起来可能比较好, 还有 webTransport webgpu |
5
pursuer 48 天前
wasm 最初的目的是在浏览器中使用,加速编解码之类的,所以有 SIMD 是很顺理成章的。但是 wasm 应该支持特性探测,允许运行时实现不支持部分高级特性。
空安全可以通过高级语言实现,倒也不必一定要在 wasm 层面纠结,但是我是没懂为什么每种引用类型需要用一个单独的 table |
6
Mohanson OP @pursuer
> 但是我是没懂为什么每种引用类型需要用一个单独的 table 为 externref 建单独的 table 主要是为了方便未来为 wasm 引入 GC. 就目前的 wasm 2.0 draft 来看, externref table 几乎没有任何实际的用处, 事实上也是如此, wasm 2.0 的测试集里也几乎没有关于 externref table 的测试用例. 为 wasm 引入 GC 也是一个值得吐槽的事情. 他们做了这么多的工作, 似乎只是为了在浏览器里实现另一个 JVM. |
7
Mohanson OP 最近重新开始关注 wasm, 发现当年和我同期开始/进行的比较著名的 wasm 项目许多都已经纷纷 archive / 不再维护, 挺有感触. 当然现在也有一些新的项目新开始 ... 很唏嘘.
|
8
jones2000 47 天前
wasm 能使用的权限越来越小了, 想要通过 wasm 去联动一些外部的 PC 终端的软件,都搞不了了。
|
9
flmn 46 天前
我没研究过 wasm 2.0 ,但我觉得 null 没问题啊。这个 null 是给编译成 wasm 的编译器准备的,不是给开发者准备的,又不是手写 wasm 。对于编译器开发者,给他们能力,相信他们能做好。
所以,引用 Null References: The Billion Dollar Mistake - Tony Hoare 来说 wasm 的 null 不太合适。 |