当前时间段(2023 年 11 月)开发 wasm 的最佳实现是什么? AssemblyScript? Go? Rust? C#?有已经应用的生产中的老哥来讨论下吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cvooc
V2EX    程序员
当前时间段(2023 年 11 月)开发 wasm 的最佳实现是什么? AssemblyScript? Go? Rust? C#?有已经应用的生产中的老哥来讨论下吗?
  •  
  •   cvooc
    cvooc 2023-11-25 16:50:01 +08:00 2346 次点击
    这是一个创建于 753 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我尝试了下 rust 的 wasm, 相同算法对比 js 速度快了整整 30 倍, js 版的执行速度有 15 秒, 而 wasm 则只用了 500 毫秒.

    准备研究一下 wasm 做技术储备, 介于目前市面上关于 wasm 的方案很多, 有什么已经成熟的库或框架推荐吗? 语言无所谓, 本身就是储备反正都要学习的.

    我主要想了解下, 目前各个方案的差异, 比如性能提升程度, 如用 GO 写和用 Rust 写相同算法, 两方会有更明显的性能差异. 以及生态兼容性, 是否可以使用本身语言已存在的一些第三方依赖等等. 比如使用 AssemblyScript 的话对 npm 生态兼容性如何?

    8 条回复    2024-06-04 16:33:29 +08:00
    xieren58
        1
    xieren58  
       2023-11-25 18:14:57 +08:00
    当然是选 rust...
    cvooc
        2
    cvooc  
    OP
       2023-11-25 18:45:33 +08:00 via Android
    @xieren58 主要问题是 他相对其他语言的版本有什么优势,这个我想了解下
    yplam
        3
    yplam  
       2023-11-25 20:52:16 +08:00 via Android   1
    看你用 wasm 的目的是什么,通常 CPU 密集型的代码才用 wasm ,rust 肯定是首选
    AV1
        4
    AV1  
       2023-11-25 21:41:25 +08:00   1
    wasm 的一等公民是 C/C++/Rust ,最好就从这三个里选。
    Jat001
        5
    Jat001  
       2023-11-25 21:48:50 +08:00
    想到一个好点子,我现在有个 cgo 写的 library ,不知道可不可以在 wasm 里跑,明天试试
    tool2d
        6
    tool2d  
       2023-11-25 22:52:15 +08:00
    我测试下来,正常的业务逻辑 wasm 平均只比 js 快两倍。但是挺难用的,各种限制比较多,没有 JS 写起来自由。

    当然很多密集型计算,wasm 是要快不少,但这种毕竟是少数。

    前端大部分代码还是业务向,这点没办法。
    EulerChen
        7
    EulerChen  
       2023-11-26 22:47:16 +08:00
    排除 C#我不了解以外,我个人觉得优先选择如下
    第一选择:C/C++,目前 C/C++/Rust 编译到 WebAssembly 基本上都是基于 LLVM ,编译产物在性能和体积方面区别不大,但是 C/C++存量代码比 Rust 很多,生态也更好,Rust 有的 C/C++都有,Rust 没有的 C/C++也有
    第二选择:Rust ,感觉是政治正确的原因,Rust 看起来比 C/C++更火热,如果不想用 C/C++的话 Rust 是个不错的选择
    第三选择:Go ,Go 编译到 wasm 需要用 TinyGo 编译器,但 Go 编译到 wasm 跟编译到 Native 有同样的缺陷,编译产物体积很大(塞了个 Runtime 进去),尽管 TinyGo 的后端也是基于 LLVM
    第四选择:AssemblyScript ,编译器前端是手搓的(不太行),编译器后端是 Binaryen (大佬出品,值得信赖),基本不可能复用 npm 生态,AS 代码虽然看起来类似 TS ,但其实从类型系统的角度看根本不是一种语言,很少有 JS/TS 可以方便移植到 AS 上,这个项目最近两年已经处于半死不活的状态,除非你只会 JS/TS ,否则不推荐 AssemblyScript
    dimwoodxi27
        8
    dimwoodxi27  
       2024-06-04 16:33:29 +08:00 via Android
    @EulerChen go 确实编译后体积非常大,但都是包很大,但用 tinygo 加一些优化能从几百 kb 减小到 40-60kb 的样子,再能用特别方式能减小到 10-20kb ,最终体积跟 rust 差不多,tinygo 本身编译也是 cgo 编译器
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3216 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 11:08 PVG 19:08 LAX 03:08 JFK 06:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86