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 的生产力,是必不可少的 |