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

把 javascript 编译成 LLVM IR, x86 assembly

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

    js-ziju 工程 尝试把简单的 javascript 编译成可运行的 LLVM IR,X86 Assembly ;以及自举( javascript 运行 javascript )

    10 条回复    2021-10-10 16:57:41 +08:00
    mxT52CRuqR6o5
        1
    mxT52CRuqR6o5   35 天前
    如果在没有类型信息下直接编译成 asm,感觉运行起来不会比 jit 更快,当然项目确实很有趣
    wizardpisces
        2
    wizardpisces   35 天前
    @mxT52CRuqR6o5 是的,类型信息很重要,弱类型难推导编译;确实不一定更快
    gam2046
        3
    gam2046   35 天前
    换种角度,虽然速度不一定快,但是提高了逆向门槛。
    wizardpisces
        4
    wizardpisces   35 天前   ❤️ 1
    直接编译 typescript 可能是更好的选择
    wizardpisces
        5
    wizardpisces   35 天前
    @gam2046 这个角度不错。。。越难编译也就越难反编译的感觉
    Mohanson
        6
    Mohanson   35 天前
    2 年前写过 ts 到 llvm 的静态编译器 https://github.com/nervosnetwork/minits 虽然已弃坑... 对于 js/ts 来说类型问题无法解决, 只能拿 js/ts 中的语法子集, 楼主以后应该也会遇到这个问题并同样弃坑(doge
    wizardpisces
        7
    wizardpisces   35 天前
    @Mohanson 厉害了。。确实有这个问题,这个思路也挺不错的: https://www.assemblyscript.org/
    agagega
        8
    agagega   35 天前
    忘了在哪看到过的了,TS 宣称自己的类型信息只会用来在开发的时候做类型检查,以后不会有任何利用类型信息帮助引擎做优化的念头。不过有了明确类型,理论上性能确实可以再进一步。
    makelove
        9
    makelove   35 天前
    @Mohanson 只支持语法子集完全没一点问题吧?毕竟要高性能的一般是算法模块并不需要太多高端灵活的类型支持
    EulerChen
        10
    EulerChen   13 天前
    https://github.com/ovr/StaticScript
    https://github.com/emlai/ts-llvm
    https://github.com/nervosnetwork/minits
    https://github.com/MichaReiser/speedy.js
    这些都是前人们为你踩下的坑,JavaScript 和 TypeScript 毕竟还是太动态了,无论是将其编译为 LLVM IR 还是 asm,都只能编译一个子集,但是仅仅是子集是不够的,动态类型+闭包+Object 这些都是 JavaScript/TypeScript 的生产力,是必不可少的
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1301 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:06 · PVG 08:06 · LAX 17:06 · JFK 20:06
    ♥ Do have faith in what you're doing.