GraalVM:如何实现编译器优化?

GraalVM: How to implement compiler optimizations?

我想开发一个工具,根据程序结构在程序中执行某些优化。例如,假设我想在循环中识别 if-else,我的工具会将其重写为两个循环。 我希望该工具能够使用多种语言重写程序,例如 Java、C++、Python、Javascript 等

我正在探索 GraalVM 是否可以用于此目的,作为一个通用平台,我可以在其中为各种语言实现相同的优化。

GraalVM 是否有一个通用的中间表示(类似于 LLVM IR)?我查看了文档,但不确定从哪里开始。有什么指点吗?

注意:我不是在寻找语言之间的互操作性。您可以假设我要重写的程序是用一种语言编写的;不同程序的语言可能不同。

GraalVM 有两个与此相关的组件:

  • 编译器,将Java字节码编译成本地代码
  • truffle,这是一个在 GraalVM 之上实现其他编程语言的框架。

使用 Truffle 框架实现的语言被部分评估为 Java 字节码,然后由 Graal 编译器编译。 article/talk 提供了更多细节,包括 Graal 编译器使用的 IR:https://chrisseaton.com/truffleruby/jokerconf17/。根据您的具体用例,您可能希望连接到 Truffle、Truffle 部分评估器或 Graal 编译器。