有人可以解释一下 Graal、GraalVM、Truffle 和 SubstrateVM 之间的区别吗?

Could someone please explain the differences between Graal, GraalVM, Truffle & SubstrateVM?

我知道这些技术都是相关的,但有人可以解释一下每一种技术的用途以及它们如何组合在一起吗?

过度简化:

  • Graal - Java 字节码编译器。可以及时使用(作为 JVM 的一部分)或提前使用。

  • SubstrateVM - 实际需要 运行 提前编译的其他东西(运行时间)Java 没有 JVM 的字节码。这为 GraalVM 的 "native-image" 命令提供了动力。

  • Truffle - 将语言实现为 AST 解释器的框架,可以使用 graal 进行即时编译。实现的一些著名语言是 JavaScript、Ruby、R 和 LLVM 位码。

  • GraalVM - 大多数这些技术打包在一起以支持不同的用例,例如:运行ning JVM 程序(即任何编译为 Java 字节码)使用 Graal 作为 JIT 编译器以获得更好的峰值性能,提前编译 JVM 程序以实现快速启动和低内存占用,运行 宁快速动态语言(JS,R , Ruby) 可以在没有开销的情况下进行互操作,等等。