版本
- 適用於 JDK 23 的 GraalVM (最新)
- 適用於 JDK 24 的 GraalVM (搶先體驗)
- 適用於 JDK 21 的 GraalVM
- 適用於 JDK 17 的 GraalVM
- 封存
- 開發版本
- Truffle 語言實作框架
- Truffle 分支檢測
- 動態物件模型
- 靜態物件模型
- 針對直譯器程式碼的主機最佳化
- Truffle 函式內聯方法
- 分析 Truffle 直譯器
- Truffle Interop 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() 中傳回非 null 值,則根節點支援 AOT 編譯。請注意,啟用此旗標也會停用背景編譯,這使其不適合用於生產環境。
使用範例 #
使用以下說明文件和可執行的 Truffle 語言作為 AOT 支援的靈感: AOT 教學
可以使用 mx unittest AOTTutorial
作為 mx 單元測試來執行該範例。