对于 WebAssembly 2.0 的一些看法

6 天前
 Mohanson

最近在做 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 如何发展, 不好预言, 但可以确认的是它已经丧失了技术的美感.

1587 次点击
所在节点    程序员
9 条回复
14
6 天前
感谢分享,我一直想把 WebAssembly 用在产品上但始终感觉很鸡肋,我的想法是能否实现使用 TS/JS 这样通用动态的语言编写逻辑,再编译成 WebAssembly 高性能隔离执行,但是现在的问题是编写方面 TS/JS->WebAssembly 只有 QuickJS/AssemblyScript /javy 这样的选择缺乏真正全功能支持,而执行方面也缺乏稳定可靠的方案。
musi
6 天前
感觉 wasm 还需要让子弹飞一会
huangsen365
5 天前
bolt.new webassembly 了解下
buffzty
5 天前
活捉野生大佬一只 几年前看你博客学了好多.
我比较关注 wasi 这个能做起来可能比较好, 还有 webTransport webgpu
pursuer
5 天前
wasm 最初的目的是在浏览器中使用,加速编解码之类的,所以有 SIMD 是很顺理成章的。但是 wasm 应该支持特性探测,允许运行时实现不支持部分高级特性。
空安全可以通过高级语言实现,倒也不必一定要在 wasm 层面纠结,但是我是没懂为什么每种引用类型需要用一个单独的 table
Mohanson
5 天前
@pursuer

> 但是我是没懂为什么每种引用类型需要用一个单独的 table

为 externref 建单独的 table 主要是为了方便未来为 wasm 引入 GC. 就目前的 wasm 2.0 draft 来看, externref table 几乎没有任何实际的用处, 事实上也是如此, wasm 2.0 的测试集里也几乎没有关于 externref table 的测试用例.

为 wasm 引入 GC 也是一个值得吐槽的事情. 他们做了这么多的工作, 似乎只是为了在浏览器里实现另一个 JVM.
Mohanson
5 天前
最近重新开始关注 wasm, 发现当年和我同期开始/进行的比较著名的 wasm 项目许多都已经纷纷 archive / 不再维护, 挺有感触. 当然现在也有一些新的项目新开始 ... 很唏嘘.
jones2000
4 天前
wasm 能使用的权限越来越小了, 想要通过 wasm 去联动一些外部的 PC 终端的软件,都搞不了了。
flmn
3 天前
我没研究过 wasm 2.0 ,但我觉得 null 没问题啊。这个 null 是给编译成 wasm 的编译器准备的,不是给开发者准备的,又不是手写 wasm 。对于编译器开发者,给他们能力,相信他们能做好。
所以,引用 Null References: The Billion Dollar Mistake - Tony Hoare 来说 wasm 的 null 不太合适。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1086058

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX