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 單元測試來執行該範例。

與我們聯繫