js-ziju 工程 尝把简单的 Javascript 编译成可运行的 LLVM IR,X86 Assembly ;以及自举( Javascript 运行 Javascript )
1 mxT52CRuqR6o5 2021-09-18 10:53:34 +08:00 如果在没有类型信息下直接编译成 asm,感觉运行起来不会比 jit 更快,当然项目确实很有趣 |
2 wizardpisces OP @mxT52CRuqR6o5 是的,类型信息很重要,弱类型难推导编译;确实不一定更快 |
3 gam2046 2021-09-18 10:59:45 +08:00 换种角度,虽然速度不一定快,但是提高了逆向门槛。 |
4 wizardpisces OP ![]() 直接编译 typescript 可能是更好的选择 |
5 wizardpisces OP @gam2046 这个角度不错。。。越难编译也就越难反编译的感觉 |
![]() | 6 Mohanson 2021-09-18 11:01:31 +08:00 2 年前写过 ts 到 llvm 的静态编译器 https://github.com/nervosnetwork/minits 虽然已弃坑... 对于 js/ts 来说类型问题无法解决, 只能拿 js/ts 中的语法子集, 楼主以后应该也会遇到这个问题并同样弃坑(doge |
7 wizardpisces OP @Mohanson 厉害了。。确实有这个问题,这个思路也挺不错的: https://www.assemblyscript.org/ |
![]() | 8 agagega 2021-09-18 11:32:11 +08:00 忘了在哪看到过的了,TS 宣称自己的类型信息只会用来在开发的时候做类型检查,以后不会有任何利用类型信息帮助引擎做优化的念头。不过有了明确类型,理论上性能确实可以再进一步。 |
![]() | 10 EulerChen 2021-10-10 16:57:41 +08:00 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 的生产力,是必不可少的 |