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

昨天看了一个很有意思的视频,讲的是 WEB 后台开发, WASM 一统天下的故事。

  •  
  •   3dwelcome · 2022-01-21 14:47:48 +08:00 · 5089 次点击
    这是一个创建于 1035 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在 WEB 服务,都上云服务,docker 容器的概念居多。

    那么本质上,后台的逻辑代码,可以看成是一个个 VM 虚拟机。而 WASM 刚好就是一个非常成功,又跨平台的堆栈虚拟机。

    1. 你后台逻辑更新需要热加载,WASM 能成为最好的插件代码,新版本 nodejs 后台就直接支持 WASM 插件。
    2. 你代码需要可移植性,WASM 就是最好的选择,因为字节码完全和运行平台无关。想 x86, arm64, 甚至手表上运行都没问题。
    3. 你代码需要多语言支持,WASM 完全能满足十几种开发语言的需求。
    4. 你代码需要极速性能,优化过后的 WASM ,几乎没有对手。

    在未来,WEB 前后端会用 WASM ,游戏会用 WASM 来替换现在的 LUA ,云计算会用 WASM 。也许这个技术,会改变我们写代码的方式。

    41 条回复    2022-01-22 14:27:53 +08:00
    rrfeng
        1
    rrfeng  
       2022-01-21 14:50:07 +08:00
    出来的时候都是靠吹

    等过十年,如果真成了我再吹它
    3dwelcome
        2
    3dwelcome  
    OP
       2022-01-21 14:52:53 +08:00
    @rrfeng 区块链不就是靠 WASM 虚拟机来支持的。

    项目大了后,你总要选一个脚本语言,或者定制一个 DSL 行业语言,进而引入 VM ,这是避免不了的。
    orangie
        3
    orangie  
       2022-01-21 15:04:55 +08:00   ❤️ 3
    所说的任何一点,JVM 都具备。
    2i2Re2PLMaDnghL
        4
    2i2Re2PLMaDnghL  
       2022-01-21 15:05:31 +08:00
    WASM 太底层了,就真的是一个虚拟机
    在里面跑虚拟机语言就都是虚拟机套虚拟机

    —— 准确地说,这里的所有虚拟机(我要把 JVM 都拉上)全部都应该叫模拟器。究其原因,它并非采用虚拟化技术进行隔离,而是采用模拟器技术逐指令翻译,从而使得字节码平台无关。对照地说,GBA 模拟器也是一样的操作。
    —— 反而,Qemu 有时是个虚拟机。因此倒也不用唯名论地逐字推敲。

    当然,因为 WASM 效率高,可以推测 WASM+?VM 和?VM 效率差距不大。但是,这样一来,热加载就还是得交给内层的?VM 来实现。
    industryhive
        5
    industryhive  
       2022-01-21 15:05:42 +08:00   ❤️ 1
    WASM 和 GraalVM 有什么区别?
    1. GraalVM 完全支持热加载。
    2. GraalVM 完全支持跨平台,甚至可以嵌入到 MySQL 和 Oracle 中作为执行引擎。
    3. GraalVM 支持 jvm 语言,如果 java 、kotlin 、Scala 等 jvm 语言,也支持 js 、Python 、ruby 等动态语言,还支持 C 、C++等基于 LLVM 的语言,跨语言调用无性能损失
    4. GraalVM 性能非常优秀,可以高性能通用编译后端
    5. GraalVM 同时支持 AOT 和 JIT ,任何语言只要编译到 GraalVM 字节码,就能进行 AOT 编译,获得最快的启动速度,也可以进行 JIT 编译,获得最高的性能峰值
    kop1989smurf
        6
    kop1989smurf  
       2022-01-21 15:06:20 +08:00
    开发生态完备的今天,就不是哪个开发技术先进,生产力强,哪个技术就流行。
    甚至生产力强都不算必要条件。
    2i2Re2PLMaDnghL
        7
    2i2Re2PLMaDnghL  
       2022-01-21 15:06:37 +08:00
    @3dwelcome 感觉是格林斯潘第十定律的一个变体。
    Jooooooooo
        8
    Jooooooooo  
       2022-01-21 15:14:06 +08:00
    所以现在去招一个这样的程序员需要花多少时间呢?

    (还是老老实实把过滤项选 java 或者 go 吧
    3dwelcome
        9
    3dwelcome  
    OP
       2022-01-21 15:17:05 +08:00
    @Jooooooooo WASM 只是代码的最终编译形态,写逻辑代码你还是可以用 java 和 go ,又没区别的。
    3dwelcome
        10
    3dwelcome  
    OP
       2022-01-21 15:20:35 +08:00
    @2i2Re2PLMaDnghL “反而,Qemu 有时是个虚拟机。因此倒也不用唯名论地逐字推敲。”

    现在有些 docker 不就是用 qemu 驱动的,但发布体积大,CPU 转译效率又低,有些时候没必要杀鸡用牛刀。

    WASM 可以做到体积极度轻量,几乎无重型依赖包。

    你说 JVM 也可以,但 JVM 是一种特定语言。WASM 代表着十几种语言,这点上 WASM 完胜。
    aneostart173
        11
    aneostart173  
       2022-01-21 15:25:06 +08:00
    除非 wasm 变成指令集,或者 webos 成为主流。
    learningman
        12
    learningman  
       2022-01-21 15:27:03 +08:00
    反正现在 wasm 的生态还是一坨翔,啥时候出个 spring 这种的统一框架再说吧。
    3dwelcome
        13
    3dwelcome  
    OP
       2022-01-21 15:35:52 +08:00
    @industryhive WASM 和 GraalVM 有什么区别?

    GraalVM 只是一个公司的产品吧,由一个商业公司来维护。而 WASM 是一种开源标准,社区都在帮着写代码,肯定差距很大的。
    2i2Re2PLMaDnghL
        14
    2i2Re2PLMaDnghL  
       2022-01-21 15:42:34 +08:00
    @3dwelcome 不要太关注『——』开头的插曲。
    你想要用 WASM 发布 Python 写出来的东西,貌似仍然需要带上整个 Python 环境和引入的包。
    DianQK
        15
    DianQK  
       2022-01-21 15:50:26 +08:00 via Android
    在拥抱 Wasm 了
    hefish
        16
    hefish  
       2022-01-21 16:12:57 +08:00
    WASM 将来还会把人类变成电池。那样才是更加美好的世界。
    yaphets666
        17
    yaphets666  
       2022-01-21 16:14:16 +08:00
    又是你
    gainsurier
        18
    gainsurier  
       2022-01-21 16:19:54 +08:00
    我举得 wasm 最大的优势就是可以跑在只有几百 k 内存的 mcu 上。
    masterclock
        19
    masterclock  
       2022-01-21 16:24:22 +08:00
    不懂 GraalVM ,可以把 Go 编译到 GraalVM ,然后跑在 MCU 上吗?
    xinJang
        20
    xinJang  
       2022-01-21 16:35:33 +08:00
    这个跟云原生有什么区别吗?
    3dwelcome
        21
    3dwelcome  
    OP
       2022-01-21 16:36:49 +08:00
    @yaphets666 不一样,上次吹的是前端,前端框架多有得选。

    这次看了各种技术分享视频,反而发现云发展后,后台 WASM 用的才多,是云发布的刚需。
    3dwelcome
        22
    3dwelcome  
    OP
       2022-01-21 16:39:23 +08:00
    @xinJang “这个跟云原生有什么区别吗?”

    可作为插件集成到各种平台,以前代码还要编译适配目标平台,后来是 docker ,现在是 wasm 插件包。
    xinJang
        23
    xinJang  
       2022-01-21 16:48:27 +08:00
    @3dwelcome 我之前看云原生的介绍是利用 k8s 这种容器编排技术,将一堆 docker 组成成一个 pod ,基于 pod 的管理,这跟你描述的 wasm 是否是相近的技术呢?
    3dwelcome
        24
    3dwelcome  
    OP
       2022-01-21 16:55:25 +08:00
    是的。docker 的开发者说过,如果早年有 wasm ,就可以不用开发 docker 了。

    两个看似不相关的技术,本质上都是把代码装进黑盒后,便捷发布。

    WASM 对运行环境依赖很低,这样平台移植性就非常高。有时候 docker 还要用 qemu 包一层,就是因为 x86 和 arm64 指令不兼容,WASM 把这个问题,从根本上给解决掉。
    ch2
        25
    ch2  
       2022-01-21 17:06:31 +08:00 via iPhone
    @3dwelcome docker 是二进制级别的打包,不需要源代码适配,兼容性不是一个需要重写+编译的东西能比的
    3dwelcome
        26
    3dwelcome  
    OP
       2022-01-21 17:15:14 +08:00
    @ch2 docker 是二进制级别的打包,不能二次平台适配了。

    而 WASM 是中间字节码打包,加载后可以二次适配到任意 CPU 和可运行平台。

    真正意义上的 write once, run everywhere.
    liuxu
        27
    liuxu  
       2022-01-21 17:23:03 +08:00
    @3dwelcome
    write once, run everywhere

    这不是 php 吗
    weixiangzhe
        28
    weixiangzhe  
       2022-01-21 17:23:18 +08:00
    发出来看看啊
    3dwelcome
        29
    3dwelcome  
    OP
       2022-01-21 17:29:13 +08:00
    @weixiangzhe 视频的名字叫“用 webassembly 做秒杀”, B 站上有,直接搜。
    gam2046
        30
    gam2046  
       2022-01-21 17:36:15 +08:00
    @3dwelcome #26 “write once, run everywhere.” 这不是还是 JVM 老路嘛,JVM 语言也不止 Java ,Scala/Groovy/Kotlin 还有一堆使用率不怎么高的。

    但有一说一,前几天刚刚试了下 ffmpeg 编译到 wasm 在浏览器里跑。确实可以跑,也可以转码,也可以通过 blob url 直接通过 video 标签播放,但在 Chrome 里跑,CPU 占用率挺厉害,用是可以用的。

    至于上云的话,还是慎重,现在各个云平台并没有什么统一标准,真就是上云一时爽,下云火葬场。换个平台就脱一层皮。
    3dwelcome
        31
    3dwelcome  
    OP
       2022-01-21 17:50:38 +08:00
    @gam2046 每个程序员都是自己的语言偏好和历史代码负担,要想完全从头再一张白纸上写代码,是非常困难的事情。

    有时候程序员之间的语言隔阂,比现实中的外语还要大。这也是为什么那么多年,JVM 不温不火,提不上去,又不断有新语言冒泡的原因。

    目前也只有 WASM ,能统一天下所有语言了。
    qqdaiyu55
        32
    qqdaiyu55  
       2022-01-21 17:52:06 +08:00 via iPhone
    wasm 已经有不少应用,pyodide ,以及 figma 等
    neutrino
        33
    neutrino  
       2022-01-21 18:20:43 +08:00 via Android
    还是要根据需求来。虽然现在容器技术应用已经较为广泛,但实际工作中并没有上容器的需求,用 FTP 拷贝代码很顺畅。
    zhangbohun
        34
    zhangbohun  
       2022-01-21 18:31:41 +08:00
    @3dwelcome “ JVM 是一种特定语言” 建议了解下 JVM 的概念
    DrakeXiang
        35
    DrakeXiang  
       2022-01-21 18:42:22 +08:00
    wasm 不是给浏览器用的么,后端怎么用?
    ch2
        36
    ch2  
       2022-01-21 18:47:46 +08:00   ❤️ 1
    @3dwelcome #26 一个本来就设计为 linux x64 only 的二进制产物,不需要考虑让它 run 在浏览器跟 arm 上,这是 docker 能成功的根本原因
    learningman
        37
    learningman  
       2022-01-21 19:18:43 +08:00   ❤️ 1
    @DrakeXiang #35 node 或者某些 wasm 的独立 runtime ,wasi 啥的
    Elissa
        38
    Elissa  
       2022-01-21 23:04:06 +08:00
    @learningman 所以为啥不 nodejs ,前后端都用 js
    musi
        39
    musi  
       2022-01-22 10:46:49 +08:00
    同在关注 WebAssmebly ,之前在 twitter 上看到 docker 作者说,“如果当时有 wasm 那可能就不会有 docker 了”。然后去年(21 年)WasmEdge 项目也进入了 CNCF ,就我个人而言还是比较看好 wasm 的
    chrosing
        40
    chrosing  
       2022-01-22 11:24:47 +08:00
    Spring Cloud 已经没落了,DDD 后来居上 :Doge
    之前有段时间 微信公众号只要是讲技术的 全是推 DDD 的 结果现在也没有多少用 DDD 的
    winglight2016
        41
    winglight2016  
       2022-01-22 14:27:53 +08:00
    wasm 作为一个运行时容器,跟 docker 比有什么优势?(特别是对程序员来说)

    前面所说 docker 不能二次平台适配,我不了解对于运行时容器有什么问题? docker 现在在生产环境都已经被 k8s 战胜了,wasm 如果只是作为 k8s 的插件出现,对于普通程序员没什么用。

    如果 wasm 想推广开来,最好是有个程序员不得不用的理由,不然只是谈优势,没什么意义。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1117 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:40 · PVG 02:40 · LAX 10:40 · JFK 13:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.