版本
- 面向 JDK 23 的 GraalVM(最新)
- 面向 JDK 24 的 GraalVM(抢先体验版)
- 面向 JDK 21 的 GraalVM
- 面向 JDK 17 的 GraalVM
- 存档
- 开发版本
- Truffle 语言实现框架
- Truffle 分支检测
- 动态对象模型
- 静态对象模型
- 解释器代码的宿主优化
- Truffle 的函数内联方法
- 分析 Truffle 解释器
- Truffle 交互 2.0
- 语言实现
- 使用 Truffle 实现新语言
- Truffle 语言和工具迁移至 Java 模块
- Truffle 本地函数接口
- 优化 Truffle 解释器
- 选项
- 栈上替换
- Truffle 字符串指南
- 专业化直方图
- 测试 DSL 专业化
- 基于 Polyglot 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 编译 #
可以使用 --engine.CompileAOTOnCreate=true
选项触发和测试 AOT 编译。这将为每个创建的调用目标触发 AOT 编译,前提是该调用目标的根节点支持 AOT 编译。如果根节点在 RootNode.prepareForAOT() 中返回一个非空值,则表示它支持 AOT 编译。请注意,启用此标志也会禁用后台编译,这使其不适合生产环境使用。
示例用法 #
将以下已记录且可执行的 Truffle 语言用作 AOT 支持的灵感:AOT 教程
该示例可以用 mx unittest AOTTutorial
作为 mx 单元测试执行。