V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Mohanson
V2EX  ›  程序员

对于 WebAssembly 2.0 的一些看法

  •  
  •   Mohanson · 28 天前 · 1808 次点击

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

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

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

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

    为 wasm 引入 GC 也是一个值得吐槽的事情. 他们做了这么多的工作, 似乎只是为了在浏览器里实现另一个 JVM.
    Mohanson
        7
    Mohanson  
    OP
       27 天前
    最近重新开始关注 wasm, 发现当年和我同期开始/进行的比较著名的 wasm 项目许多都已经纷纷 archive / 不再维护, 挺有感触. 当然现在也有一些新的项目新开始 ... 很唏嘘.
    jones2000
        8
    jones2000  
       27 天前
    wasm 能使用的权限越来越小了, 想要通过 wasm 去联动一些外部的 PC 终端的软件,都搞不了了。
    flmn
        9
    flmn  
       26 天前
    我没研究过 wasm 2.0 ,但我觉得 null 没问题啊。这个 null 是给编译成 wasm 的编译器准备的,不是给开发者准备的,又不是手写 wasm 。对于编译器开发者,给他们能力,相信他们能做好。
    所以,引用 Null References: The Billion Dollar Mistake - Tony Hoare 来说 wasm 的 null 不太合适。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:39 · PVG 13:39 · LAX 21:39 · JFK 00:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.