这些年用业余时间,使用 Rust 写了个 JS 引擎,不是标题党! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
echosoar
V2EX    分享创造

这些年用业余时间,使用 Rust 写了个 JS 引擎,不是标题党!

  •  1
     
  • echosoar 146 天前 4206 次点击
    这是一个创建于 146 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是一个学习性项目,主要目的是为了了解 JS 引擎的内部实现,还有就是学习 Rust 。

    在 AST 解析、Bytecode 执行等方面参考了一些既有的 JS 解释器实现,比如 Quickjs 等。

    目前已经实现了把 TC39 的 Test262 测试集集成,跑通了几千个 case ,也在逐步参照 ECMA 规范实现更多的特性。

    当前目前还在开发中,有兴趣的朋友可以一起来共建呀!

    欢迎 star 和 contribute: https://github.com/echosoar/jsi

    18 条回复    2025-08-15 00:09:14 +08:00
    qiqw
        1
    qiqw  
       146 天前
    已 fork
    rm2788
        2
    rm2788  
       146 天前
    gc 是怎么实现的?
    br_wang
        3
    br_wang  
       146 天前
    已 star
    MEIerer
        4
    MEIerer  
       146 天前
    niub
        5
    niub  
       146 天前
    厉害
    meteor957
        6
    meteor957  
       146 天前
    有和其他 JS 引擎对比吗, 比如 Quickjs hermes
    BALDOOR
        7
    BALDOOR  
       146 天前
    牛逼!!!给你 256 个赞!!!
    js 这边太多引擎了,可以尝试往纯 ts 引擎方向去做,估计能火
    FreeGuy
        8
    FreeGuy  
       146 天前
    估计你穷其一生的业余时间都无法在 JS 的各种骚语法海洋中荡漾完,祝君好运!与其有这个时间还不如跟着 Carbon 的开源项目一起去玩。
    asdhak
        9
    asdhak  
       146 天前
    @duli950523 #2 没看到有 gc
    acthtml
        10
    acthtml  
       146 天前
    哈哈,点赞。
    tinybaby365
        11
    tinybaby365  
       146 天前
    牛!点赞!
    echosoar
        12
    echosoar  
    OP
       145 天前 via iPhone
    @asdhak 确实还没实现
    echosoar
        13
    echosoar  
    OP
       145 天前 via iPhone
    @FreeGuy 谢谢,总是想做一些有意思、好玩的事情,学习和实现出来一些功能的这个过程让我感觉很享受
    a132811
        14
    a132811  
       145 天前
    脚本执行器,运行完就释放,不需要实现 gc 。

    这在 isolate worker/playground 场景下执行 js/python/golang 都很有用,包括执行流程编排的其它语言的表达式。

    完成度比较高的 js interpreter 是 https://github.com/boa-dev/boa
    tthem
        15
    tthem  
       145 天前
    imba97
        16
    imba97  
       145 天前
    太强了
    huan1209
        17
    huan1209  
       145 天前
    厉害
    LUO12826
        18
    LUO12826  
       145 天前
    跟一个,之前也是以学习的心态用 C++写了个 js 引擎。当时主要是对 gc 、异步函数(协程)等感兴趣。因为不想支持 eval ,所以没整上 test262 ,但也是做到了能跑 Typescript 2 转译器的程度。后来因为毕业找工作啥的就暂停了。写了这么个东西才切身感受到 Quickjs 作者的强大,有的东西先不说难度,繁琐程度就够喝一壶的。

    https://github.com/LUO12826/NaiveJS
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5492 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 06:36 PVG 14:36 LAX 22:36 JFK 01:36
    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