Truffle 语言实现框架

Truffle 语言实现框架(Truffle)是一个开源库,用于构建工具和编程语言实现,作为自修改抽象语法树(Abstract Syntax Trees)的解释器。Truffle 与开源的 Graal 编译器一道,代表着在当前动态语言时代,编程语言实现技术迈出的重要一步。

Truffle 制品已上传至 Maven Central - Sonatype。您可以在 pom.xml 文件中使用它们,例如:

<dependency>
    <groupId>org.graalvm.truffle</groupId>
    <artifactId>truffle-api</artifactId>
    <version>24.2.0</version> <!-- or any later version -->
</dependency>
<dependency>
    <groupId>org.graalvm.truffle</groupId>
    <artifactId>truffle-dsl-processor</artifactId>
    <version>24.2.0</version>
    <scope>provided</scope>
</dependency>

实现您的语言 #

Truffle 框架允许您在 GraalVM 上高效运行编程语言。它通过自动从解释器派生高性能代码来简化语言实现。

入门 #

我们提供了详尽的 Truffle API 文档。首先查看 TruffleLanguage 类,您应该继承此子类以开始开发语言。Truffle 随 GraalVM 附带了 Graal 编译器和多个语言实现。

使用 Truffle 开始实现您语言的一个好方法是 Fork SimpleLanguage 项目并开始编写代码。SimpleLanguage 是一个相对较小的语言实现,文档齐全,旨在演示 Truffle 的大多数功能。您也可以尝试查看现有开源语言 实现和实验 中的代码。

高级主题 #

使用 Truffle 实现语言提供了一种与其他“Truffle”语言互操作的方式。要评估您的语言是否是有效的多语言公民,请阅读有关使用 基于多语言 API 的测试兼容性工具包 (TCK) 的信息。一些值得探讨的相关主题包括 Truffle 库,以及如何使用它们实现 语言互操作性。使用 Truffle 实现的语言也可以通过 多语言 API 嵌入到 Java 主机应用程序中。

为了更好地理解如何提高语言的性能,请参阅关于 分析 Truffle 解释器优化 Truffle 解释器 的文档。此外,为了更好地理解如何使用 Truffle 的自动化单态化功能(例如,拆分),请查阅相关文档

实现您的工具 #

借助 Truffle 框架,您可以开发与语言无关的工具,例如调试器、分析器和其他插桩工具。首先查看 TruffleInstrument 类,与 TruffleLanguage 类似,您应该继承此子类以开始开发工具。

如果您想实现自己的“Truffle”工具,一个好的开始方法是 Fork SimpleTool 项目——就像上面描述的 SimpleLanguage 项目一样——然后开始编写代码。SimpleTool 是一个文档齐全、极简的代码覆盖工具,旨在作为理解使用 Truffle 进行工具开发过程的起点。

由于使用 Truffle 开发的工具采用相同的基于 AST 节点的方法来对语言进行插桩,因此语言开发人员可用于提高性能的大多数技术也适用于工具开发人员。这就是为什么建议您从语言开发人员的角度理解 Truffle 的工作原理,以便最大限度地发挥您的工具的效用。

兼容性 #

Truffle API 以向后兼容的方式从一个版本演进到下一个版本。当一个 API 被弃用时,它将至少在 两个 GraalVM 版本 中保持弃用状态,然后才会被移除。

最佳实践建议一次只升级一个 Truffle 版本。这样,您可以在继续升级到下一个版本之前增加版本并修复弃用警告。弃用 API 上的 Javadoc 弃用标签旨在作为升级指南。

最新添加和更改可在更新日志中查看。

修改 Truffle #

要了解如何修改 Truffle,请查阅此文件。如果您想为 Truffle 贡献代码,请参阅贡献文档

联系我们