v 站三年的陈年 flag 拔旗了, 代码终于写好了呢... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Mohanson
V2EX    程序员

v 站三年的陈年 flag 拔旗了, 代码终于写好了呢...

  •  7
     
  •   Mohanson 2020-05-08 19:45:37 +08:00 5377 次点击
    这是一个创建于 2008 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前情提要:

    1. 2018 年 12 月, "最近在写 WebAssembly 虚拟机": https://v2ex.com/t/520987
    2. 2019 年 1 月, "WebAssembly 虚拟机的纯 Python 实现: py-wasmi MVP 版本 release": https://v2ex.com/t/523261

    为甚么要插旗子呢, 因为拔旗的时候很快乐... 下面是正文

    pywasm 1.0 版本发布

    在过去的一段时间里, pywasm 加足马力, 一口气将自身版本号从 0.4.6 版本升到 1.0.0 版本, 这意味着它已经做好了 Ready for product 的准备!

    pywasm 是什么? pywasm 是使用纯 Python 编写的 WebAssembly 解释器. 项目地址: https://github.com/mohanson/pywasm

    pywasm 现在有哪些有趣的应用?

    pywasm 在这段时间干了什么?

    重写 LEB128 不定长整数编码算法. 它是 python 环境下第一个关于 LEB128 算法的轮子, 你可以直接 pip install leb128 来下载和使用它. 相比起 0.4.6 版本, 它带来了大约 120% 左右的性能提升.

    重写 WebAssembly Parser. 要运行一段代码首先得解析它, 不是吗? 更快, 代码更清晰!

    重写浮点数指令. 在 0.4.6, 浮点数使用 python 内置 float 来完成, 但这存在问题, 因为 Python 的 float 几乎完全不符合 IEEE 754 标准. 现在, numpy 承担了这部分工具. Python, 为甚么你就不愿意好好的设计整数和浮点数这两种基本类型呢? 不定长的整数和浮点数看上去很吸引人, 但对于底层开发来说真的是大灾难.

    重写 Runtime 结构. 目前的代码结构更加符合 WebAssembly 核心规范所描述的虚拟机结构. 这存粹是为了方便阅读而作的优化.

    采用多栈结构替换单栈结构. 每一个函数调用都有一个全新的栈, 虽然和规范有所出入, 但真的很 awesome! 另外多栈的好处是调用栈的快速销毁: 当退出一个函数时, 直接抛弃该函数的栈即可, 而无需过多与父函数交互.

    完整的兼容性. 为了不破坏早期使用者的体验, 此次升级保持向上兼容.

    完整的测试. pywasm 项目的启动是在 3 年前, 那时候 WebAssembly 还处在早期阶段, 官方并未发布组织结构良好的测试用例. 在发现官方将四处散落的测试用例集合并以一个 Mirror repo 公布时, pywasm 立即更新了自身的测试. 对于解析和验证无误的 wasm module, pywasm 已经做到 100% 测试通过.

    pywasm 的未来

    • 思考 JIT 或 AOT 方案. 虽然已经有初步尝试, 但它需要外援!
    • WASI(WebAssembly System Interface), 不过这得等该规范 stable 后开始动手.
    • 多线程和多返回值支持, 同样得等该规范 merge 入 wasm core spec 后开始动手.

    对 WebAssembly 的思考和吐槽

    这家伙不是一个指令集标准, 而是一门语言标准! 它在运行过程中上下文环境太强, 这与我认知的 ISA 可区别贼大了, 更像是一门二进制编程语言...

    25 条回复    2020-05-09 23:37:31 +08:00
    April5
        1
    April5  
       2020-05-08 19:52:34 +08:00
    火钳流明
    qq316107934
        2
    qq316107934  
       
    卧槽,太强了!! 请问有 benchmark 吗,相比原生的浏览器 wasm 环境损失多少?
    jmc891205
        3
    jmc891205  
       2020-05-08 19:57:32 +08:00 via iPhone
    恭喜恭喜
    1.0 撒花
    makefei
        4
    makefei  
       2020-05-08 19:59:01 +08:00 via iPhone
    nb
    Mohanson
        5
    Mohanson  
    OP
       2020-05-08 20:08:22 +08:00   2
    @qq316107934 既然都用上 python 了, benchmark 这么尴尬的问题就... 好吧, 慢两个数量级(狗头
    lacewingcc
        6
    lacewingcc  
       2020-05-08 21:25:12 +08:00
    撒花撒花
    lekai63
        7
    lekai63  
       2020-05-08 21:28:31 +08:00 via iPhone
    撒花
    guyskk0x0
        8
    guyskk0x0  
       2020-05-08 21:53:00 +08:00 via Android
    既然性能差距这么大,肯定干不过 rust 或 go 实现的,这个方向继续下去也只能当个玩具吧。

    不如想想别的方向,比如专心做“胶水”,让(任何) wasm 程序能在 python 里直接调用?或者让别的语言能直接调用 python 包?
    Mohanson
        9
    Mohanson  
    OP
       2020-05-08 22:24:23 +08:00   2
    @guyskk0x0 赞同前 1/4 部分. python 虽然慢, 但依然比较适合做早期 demo 进行快速验证, 然后逐步替换成高性能编程语言; 当选择使用 Python 时, 就已经默认不会运行复杂算法除非是 C 绑定了... 所以不是对跑视频解码等这些复杂工作抱有信心.

    对于"Why did", 不知可否反问一句"Why not", 脑洞, 这一切都是为了神奇的脑洞.
    ruby0906
        10
    ruby0906  
       2020-05-08 22:33:27 +08:00
    @Mohanson 支持楼主,支持脑洞~~
    lithbitren
        11
    lithbitren  
       2020-05-08 22:37:07 +08:00
    tql nb
    Mohanson
        12
    Mohanson  
    OP
       2020-05-09 08:01:53 +08:00 via Android   2
    python 社区有一个讨论,是将 wasm runtime 加入标准库,提案人提到了 pywasm 并成功用它做了实验,woooooooooooo!

    https://discuss.python.org/t/add-a-webassembly-wasm-runtime/3957
    dyllen
        13
    dyllen  
       2020-05-09 09:35:22 +08:00
    大佬。。。
    dukiduki
        14
    dukiduki  
       2020-05-09 09:41:27 +08:00 via Android
    @Mohanson 这原来不是一个玩具???恭喜(酸
    wangyzj
        15
    wangyzj  
       2020-05-09 10:56:55 +08:00 via iPhone
    nb
    binbinyouliiii
        16
    binbinyouliiii  
       2020-05-09 11:26:10 +08:00
    大佬,看过你博客上面的很多内容,学到了很多。

    看 GBA 那个章节好像是要写成书吗?出来了一定支持
    Mohanson
        17
    Mohanson  
    OP
       2020-05-09 11:42:07 +08:00
    @binbinyouliiii 因为收到任天堂的邮件警告, 出书木得希望了, 所以干脆直接全部公开了, 不过还有一小部分内容图片太多嫌麻烦没整理, 当时为了凑页数加上的教你如何开发 GBA 游戏的一章...
    binbinyouliiii
        18
    binbinyouliiii  
       2020-05-09 11:53:55 +08:00
    @Mohanson #17 残念 ,任天堂还挺小气的
    guyskk0x0
        19
    guyskk0x0  
       2020-05-09 12:22:45 +08:00
    @Mohanson #12 看来已经能在 Python 里直接调用 wasm 了?赞!
    kylix
        20
    kylix  
       2020-05-09 13:04:32 +08:00
    留个名先~~~
    geekzhu
        21
    geekzhu  
       2020-05-09 13:11:01 +08:00
    看到大佬当然是要支持的
    hu6360567
        22
    hu6360567  
       2020-05-09 13:40:04 +08:00
    最近在使用 wamr,有 JIT 和 AOT 的实现,有时间可以研究一下啊
    Mohanson
        23
    Mohanson  
    OP
       2020-05-09 14:54:45 +08:00
    @hu6360567 谢谢, 正准备看大量的资料和不同的实现
    panlilu
        24
    panlilu  
       2020-05-09 19:11:31 +08:00
    666666
    sivacohan
        25
    sivacohan  
    PRO
       2020-05-09 23:37:31 +08:00
    行吧,我在来小额赞助一下。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3046 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 94ms UTC 12:23 PVG 20:23 LAX 04:23 JFK 07:23
    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