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

Cla*_*ick 7 graalvm

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

Bor*_*riS 4

简单化:

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

  • SubstrateVM - 在没有 JVM 的情况下实际运行提前编译的 Java 字节码所需的其他东西(运行时)。这为 GraalVM 的“native-image”命令提供了支持。

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

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