把 javascript 编译成 LLVM IR, x86 assembly

2021-09-18 10:35:50 +08:00
 wizardpisces

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

1707 次点击
所在节点    TypeScript
10 条回复
mxT52CRuqR6o5
2021-09-18 10:53:34 +08:00
如果在没有类型信息下直接编译成 asm,感觉运行起来不会比 jit 更快,当然项目确实很有趣
wizardpisces
2021-09-18 10:57:02 +08:00
@mxT52CRuqR6o5 是的,类型信息很重要,弱类型难推导编译;确实不一定更快
gam2046
2021-09-18 10:59:45 +08:00
换种角度,虽然速度不一定快,但是提高了逆向门槛。
wizardpisces
2021-09-18 11:00:19 +08:00
直接编译 typescript 可能是更好的选择
wizardpisces
2021-09-18 11:01:00 +08:00
@gam2046 这个角度不错。。。越难编译也就越难反编译的感觉
Mohanson
2021-09-18 11:01:31 +08:00
2 年前写过 ts 到 llvm 的静态编译器 https://github.com/nervosnetwork/minits 虽然已弃坑... 对于 js/ts 来说类型问题无法解决, 只能拿 js/ts 中的语法子集, 楼主以后应该也会遇到这个问题并同样弃坑(doge
wizardpisces
2021-09-18 11:08:25 +08:00
@Mohanson 厉害了。。确实有这个问题,这个思路也挺不错的: https://www.assemblyscript.org/
agagega
2021-09-18 11:32:11 +08:00
忘了在哪看到过的了,TS 宣称自己的类型信息只会用来在开发的时候做类型检查,以后不会有任何利用类型信息帮助引擎做优化的念头。不过有了明确类型,理论上性能确实可以再进一步。
makelove
2021-09-18 11:54:08 +08:00
@Mohanson 只支持语法子集完全没一点问题吧?毕竟要高性能的一般是算法模块并不需要太多高端灵活的类型支持
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 的生产力,是必不可少的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX