在GraalVM架构上实现编程语言

时间:2019-02-11 13:39:02

标签: graalvm

在GraalVM架构上实现编程语言有哪些(架构上的)差异?特别是在使用Sulong的Graal,Truffle和LLVM之间?

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

目前有三种选择:

  • 发出JVM字节码
  • 编写松露解释器
  • 发出LLVM位代码,使用Sulong在GraalVM上运行它

enter image description here

1 个答案:

答案 0 :(得分:7)

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

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

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

Ruby非常适合比较这些选项-因为存在一个发出JVM字节码(JRuby)的版本,一个使用Truffle的版本(TruffleRuby)和一个发出LLVM位代码的版本(Rubinius,但随后不运行该位代码)在苏龙上)。我想说TruffleRuby的实现比Rubinius或JRuby更快,更简单。 (我正在研究TruffleRuby。)

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