Rustのコンパイルの流れメモ
クエリシステム
Lexer
主にトークン化を行う
Parser
主にASTを作る
AST lowering
AST → HIR → MIR の順で抽象度を下げていく過程のこと
HIR
脱糖(糖衣構文を元に戻す)
型推論
型チェック
トレイト解決
THIR
Typed High-level Intermediate Representation
HIRからさらに脱糖された表現
MIR
多くの最適化が行われる
借用チェックはこの段階
LLVMコンパイラへの入力の標準形式
クエリシステム
コンパイラの主要なステップはクエリシステムを使用している(全てではない)
例
型を要求するクエリ
関数の最適化されたMIRを要求するクエリ
増分コンパイルとの関係
クエリの結果はディスクにキャッシュされる
クエリの結果が変更されたかを確認して、同じだったらキャッシュを使用する