5

在 GraalVM 架构上实现编程语言的(架构)差异是什么——特别是在使用 Sulong 的 Graal、Truffle 和 LLVM 之间?

我计划在 GraalVM 架构上重新实现现有的静态类型编程语言,这样我就可以从 Java 中轻松使用它。

目前有三种选择:

  • 发出 JVM 字节码
  • 编写一个 Truffle 解释器
  • 发出 LLVM 位码,使用 Sulong 在 GraalVM 上运行

在此处输入图像描述

4

1 回答 1

8

发出 JVM 字节码是传统的选择。您必须在字节码级别工作,并且必须在发出字节码之前优化您的代码,因为 JVM 在发出字节码后对其进行优化的选项是有限的。要获得良好的性能,您可能必须使用invokedynamic。

使用 Truffle 是我想说的简单选择。您只需要编写一个 AST 解释器,然后代码生成就为您完成。它也是高性能选项 - 在所有有 Truffle 版本和字节码版本的语言中,Truffle 版本肯定优于字节码版本,并且由于没有字节码生成阶段而更简单。

发出 LLVM 位码并在 Sulong 上运行是一种选择,但我不建议这样做,除非您有其他限制导致您选择该选项。同样,您必须自己生成位码,并且您必须在发出位码之前优化自己,因为在设置位码后优化是有限的。

Ruby 非常适合比较这些选项 - 因为有一个版本发出 JVM 字节码 (JRuby),一个使用 Truffle 的版本 (TruffleRuby) 和一个发出 LLVM 位码的版本(Rubinius,但它不会在 Sulong 上运行该位码) . 我想说 TruffleRuby 在实现上比 Rubinius 或 JRuby 更快更简单。(我在 TruffleRuby 上工作。)

我不会担心您的语言是静态类型的。Truffle 可以使用静态类型,并且它可以使用分析专业化在运行时再次检测比静态表示的更细粒度的类型。

于 2019-02-12T19:14:02.827 回答