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 単体テストとして実行可能です。

お問い合わせ