Démarrer les crates dépendants avant que leurs dépendances aient terminé la vérification de type. Chaque crate attend que les crates dont il dépend soient entièrement vérifiés, corps de fonctions inclus, avant de commencer. Il n'a pas besoin de ces corps pour se vérifier lui-même. Il compile contre l'interface de la dépendance, les métadonnées dans son fichier .rmeta. Headstart fait écrire à rustc un fichier de métadonnées précoce dès que l'interface est vérifiée, et fait démarrer cargo sur les dépendants. Les corps de chaque crate sont ensuite vérifiés pendant que les crates en aval compilent déjà.
cargo check : les dépendants s'exécutent jusqu'à la fin sur les métadonnées précoces. cargo build : les dépendants effectuent toute leur analyse sur les métadonnées précoces, puis attendent les métadonnées complètes de la dépendance avant de générer du code. En attendant, ils rendent leur emplacement de travail. Si un corps a une erreur, la build échoue toujours avec cette erreur, avec les mêmes diagnostics et statut de sortie qu'aujourd'hui ; seules les lignes de progression et l'ordre inter-crate des messages JSON peuvent différer.
Les coûts sont le travail en aval qui est jeté, les erreurs signalées un peu plus tard, et plus de mémoire utilisée à la fois (voir docs/design.md). Sur le frontend par défaut de rustc, headstart rend les builds propres de 13 projets réels (rust-analyzer, zed, bevy, lemmy, polars et autres) jusqu'à 54% plus rapides pour cargo check, et jusqu'à 42% pour cargo build. Aucun n'est plus lent. Avec le frontend parallèle (-Zthreads=8), qui couvre une partie du même terrain, il ajoute jusqu'à 25%. Ce sont des chiffres sur 16 cœurs.
Source: Hacker News · Résumé par HeadlinesBriefing