rustc_driver と rustc_interface
rustc_driver
rustc_driver は本質的に rustc の main 関数です。
これは、rustc_interface crate で定義されたインターフェイスを使用して、
コンパイラのさまざまなフェーズを正しい順序で実行するための接着剤として機能します。可能な場合は、rustc_interface ではなく rustc_driver を使用することが推奨されます。
rustc_driver の主なエントリーポイントは rustc_driver::run_compiler です。
このビルダーは、rustc と同じコマンドライン引数に加えて、Callbacks の実装と、その他の任意のオプションをいくつか受け取ります。
Callbacks は、カスタムのコンパイラ設定を可能にする trait であり、
コンパイルのさまざまなフェーズの後にカスタムコードを実行できるようにもします。
rustc_interface
rustc_interface crate は、コンパイルプロセスを手動で駆動するための低レベル API を外部ユーザーに提供します。
これにより、サードパーティは、crate を解析するため、または rustc_driver が十分に柔軟でない場合(つまり、rustdoc がコードをコンパイルして出力を提供する場合)にコンパイラをアドホックにエミュレートするために、rustc の内部をライブラリとして効果的に使用できます。
rustc_interface の主なエントリーポイント(rustc_interface::run_compiler)は、コンパイラ用の設定変数と、
まだ解決されていない Compiler を受け取る closure を取ります。
run_compiler は設定から Compiler を作成し、それを closure に渡します。
closure の内部では、Compiler を使用してさまざまな関数を呼び出し、crate をコンパイルして結果を取得できます。
rustc_interface の使い方の最小限の例はこちらで確認できます。
rustc_interface を使用する際に必要となるさまざまな関数の使い方の例は、rustc_driver の実装を見ることで確認できます。
具体的には rustc_driver_impl::run_compiler です
(rustc_interface::run_compiler と混同しないでください)。
警告: その性質上、コンパイラの内部 API は常に 不安定です。とはいえ、不要に壊さないようには努めています。