Truffle AOTのチュートリアル
Cなどの静的にコンパイルされる言語の多くは、事前実行なしにコンパイルできるように設計されています。デフォルトでは、Truffleはコードをコンパイルする前に解釈します。静的言語のウォームアップ速度を向上させるために、AOTコンパイルをサポートできます。次のチュートリアルでは、使用している言語で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 unittestとして実行できます。