版本
- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
- Truffle 语言实现框架
- Truffle 分支插桩
- 动态对象模型
- 静态对象模型
- 解释器代码的主机优化
- Truffle 函数内联方法
- 分析 Truffle 解释器
- Truffle 互操作 2.0
- 语言实现
- 使用 Truffle 实现新语言
- Truffle 语言和工具迁移到 Java 模块
- Truffle 原生函数接口
- 优化 Truffle 解释器
- 选项
- 栈上替换
- Truffle 字符串指南
- 特化直方图
- 测试 DSL 特化
- 基于多语言 API 的 TCK
- Truffle 编译队列方法
- Truffle 库指南
- Truffle AOT 概述
- Truffle AOT 编译
- 辅助引擎缓存
- Truffle 语言安全点教程
- 单态化
- 拆分算法
- 单态化用例
- 向运行时报告多态特化
Truffle AOT 教程
许多静态编译语言,例如 C 语言,在设计时就考虑了无需预先执行即可编译。默认情况下,Truffle 会先解释代码,然后再进行编译。为了提高静态语言的预热速度,可以支持 AOT(预先)编译。以下教程将介绍如何在您的语言中支持 Truffle AOT,以及如何触发和测试它。
语言支持 #
为了使语言支持 AOT 编译,该语言需要实现 RootNode.prepareForAOT() 方法。语言实现可以通过在此方法中返回非 null
值来表示支持 AOT。为 AOT 实现根节点的目的是准备所有 AST 节点,使其在未经预先执行编译时不再去优化。
此方法的典型实现操作包括:
- 在根节点的 FrameDescriptor 中初始化局部变量类型。如果一种语言使用局部变量并且其类型已知,则必须将此信息提供给 FrameDescriptor。此步骤通常可以在解析期间完成。
- 计算根节点的预期执行签名并返回。此步骤要求解析器推断参数和返回值的预期类型。
- 使用在首次执行时不会失效的配置文件来准备专用节点。Truffle DSL 支持为 AOT 准备专用节点。有关详细信息,请参阅示例 AOT 语言。
触发 AOT 编译 #
AOT 编译可以通过使用 --engine.CompileAOTOnCreate=true
选项来触发和测试。这将为每个创建的且其根节点支持 AOT 编译的调用目标触发 AOT 编译。如果根节点在 RootNode.prepareForAOT() 中返回非 null
值,则它支持 AOT 编译。请注意,启用此标志也会禁用后台编译,因此不适用于生产环境。
使用示例 #
请参考以下有文档记录且可执行的 Truffle 语言,作为 AOT 支持的灵感来源:AOT Tutorial
该示例可以通过 mx unittest AOTTutorial
作为 mx 单元测试执行。