- GraalVM for JDK 23 (最新)
- GraalVM for JDK 24 (アーリーアクセス)
- GraalVM for JDK 21
- GraalVM for JDK 17
- アーカイブ
- 開発ビルド
- Truffle 言語実装フレームワーク
- Truffle ブランチインストルメンテーション
- 動的オブジェクトモデル
- 静的オブジェクトモデル
- インタープリターコードのホスト最適化
- 関数インライン化に対する Truffle アプローチ
- Truffle インタープリターのプロファイリング
- Truffle Interop 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 コンパイルをサポートします。このフラグを有効にするとバックグラウンドコンパイルも無効になるため、本番環境での使用には適していません。
使用例 #
AOT サポートのインスピレーションとして、次のドキュメント化された実行可能な Truffle 言語を使用してください:AOT チュートリアル
この例は、mx unittest AOTTutorial
を使用して mx 単体テストとして実行可能です。