依存関係の型チェックが完了する前に、依存クレートを開始します。各クレートは、依存するクレートが完全にチェックされる(関数本体を含む)まで待ってから開始します。自身の型チェックにはそれらの本体は必要ありません。依存関係のインターフェース、つまり .rmeta ファイル内のメタデータに対してコンパイルします。Headstart は、インターフェースがチェックされるとすぐに rustc に早期メタデータファイルを書き込ませ、cargo にそれに基づいて依存クレートを開始させます。その後、各クレートの本体は、下流のクレートがすでにコンパイルしている間にチェックされます。
cargo check: 依存クレートは早期メタデータで完了まで実行されます。cargo build: 依存クレートは早期メタデータですべての分析を行い、コード生成前に依存関係の完全なメタデータを待ちます。待機中はジョブスロットを返却します。本体にエラーがある場合、ビルドはそのエラーで失敗し、今日と同じ診断と終了ステータスになります。進行状況行と JSON メッセージのクレート間の順序のみが異なる可能性があります。
コストは、破棄される下流の作業、少し遅れて報告されるエラー、および一度に使用されるメモリの増加です(docs/design.md 参照)。rustc のデフォルトフロントエンドでは、headstart により 13 の実際のプロジェクト(rust-analyzer、zed、bevy、lemmy、polars など)のクリーンビルドが、cargo check で最大 54%、cargo build で最大 42% 高速化されます。遅くなるものはありません。並列フロントエンド(-Zthreads=8)では、同じ領域の一部をカバーし、最大 25% 追加されます。これらは 16 コアの数値です。
出典: Hacker News · 要約:HeadlinesBriefing