在GraalVM体系结构上实现编程语言

use*_*344 5 graalvm

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

我计划在GraalVM体系结构上重新实现现有的静态类型编程语言,这样我就可以从Java中使用它而不会有太多麻烦.

目前有三种选择:

  • 发出JVM字节码
  • 写一个松露口译员
  • 发出LLVM bitcode,使用Sulong在GraalVM上运行它

在此输入图像描述

小智 8

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

使用松露是我说的简单选择.您只需编写AST解释器,然后代码生成就完成了.它也是高性能选项 - 在所有有Truffle版本和字节码版本的语言中,Truffle版本自信地胜过字节码版本,并且由于没有字节码生成阶段而更简单.

发送LLVM bitcode并在Sulong上运行是一种选择,但它不是我推荐的,除非你有其他限制导致你选择.你必须自己做那个bitcode生成,并且你必须在发射bitcode之前优化自己,因为在设置bitcode之后优化是有限的.

Ruby很适合比较这些选项 - 因为有一个版本可以发出JVM字节码(JRuby),一个版本使用Truffle(TruffleRuby),一个版本发出LLVM bitcode(Rubinius,但它不会在Sulong上运行那个bitcode) .我会说TruffleRuby的实现速度比Rubinius或JRuby更快更简单.(我在TruffleRuby工作.)

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