Truffle 语言实现框架

Truffle 语言实现框架(Truffle)是一个开源库,用于构建工具和编程语言实现,作为自修改抽象语法树的解释器。与开源 Graal 编译器 结合,Truffle 代表了动态语言时代编程语言实现技术的一次重大进步。

Truffle 工件上传到 Maven 中央仓库。您可以从您的 pom.xml 文件中使用它们,如下所示:

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

实现您的语言 #

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

入门 #

我们提供了广泛的 Truffle API 文档。首先查看 TruffleLanguage 类,您应该对其进行子类化以开始开发语言。Truffle 附带 Graal 编译器和 GraalVM 中的几个语言实现。

使用 Truffle 实现语言的最佳方法是分叉 SimpleLanguage 项目并开始进行黑客攻击。SimpleLanguage 是一个相对较小的语言实现,文档齐全,旨在演示大多数 Truffle 功能。您还可以尝试查看现有开源语言中的代码 实现和实验

高级主题 #

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

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

实现您的工具 #

使用 Truffle 框架,您可以开发语言无关的工具,例如调试器、分析器和其他仪表。首先查看 TruffleInstrument 类,它与 TruffleLanguage 类似,您应该对其进行子类化以开始开发工具。

如果您想实现自己的“Truffle”工具,一个好的方法是分叉 SimpleTool 项目 - 就像上面描述的 SimpleLanguage 项目一样 - 并开始进行黑客攻击。SimpleTool 是一个文档齐全、最小化的代码覆盖率工具,旨在作为了解使用 Truffle 的工具开发过程的起点。

由于使用 Truffle 开发的工具使用相同的基于 AST 节点的策略对语言进行检测,因此语言开发人员在提高性能方面可以使用的大多数技术也适用于工具开发人员。这就是为什么建议您从语言开发人员的角度了解 Truffle 的工作原理,以最大限度地利用您的工具。

兼容性 #

Truffle API 从一个版本到下一个版本以向后兼容的方式演变。当某个 API 被弃用时,它将至少被弃用 两个 GraalVM 版本,然后才会被删除。

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

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

修改 Truffle #

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

联系我们