如何使用 Truffle 语言实现框架实现语言编译器

How do I implement a language compiler using the Truffle Language Implementation Framework

所以我正在研究如何使用 Truffle 创建语言编译器。为了这个问题的目的,我们就说这种语言叫做 Emerald。

Emerald 是一种静态编译语言,它运行在JVM 上,就像Java。

Emerald 的编译器是一个名为 emeraldc 的程序。编译器 emeraldc 会将源文件编译为 Hello.emerald 到 Hello.class.

我还没有找到任何使用 Truffle 来创建这种语言的示例。我发现的所有语言示例都是解释性语言。例如,None 似乎编译成 class 个文件。

使用 GraalVM 的 Truffle 框架,语言被专门实现为解释器,但您仍然可以获得编译器。

语言通常不是本质上编译或解释的(例如,您可以解释 C 并编译 Javascript)。甚至有混合使用两者的情况:例如,您的 Emerald 编译器将 emerald 编译为 Java 字节码,然后可以在 Java 虚拟机中解释并编译 Just-In-Time.

使用 GraalVM 的 Truffle 框架,典型的设置是为您的语言实现解释器,GraalVM 将通过对解释器的部分评估为您提供 JIT 编译器。您可能需要查看 this introduction.

如果要编译Ahead-Of-Time,Truffle也有support for that.

然而,目前没有配置输出 AOT 或 JIT 编译将是 Java 字节码。