Chiedi a QuickRust dell’ultima build
Subito dopo la build che ti ha sorpreso:
qrust analyze rebuilds
Rebuild reasons
REASON UNITS TIME
source 1 42ms
previously known units rebuilt: 1 of 1 in the index (ratio 1.0)
UNIT KIND REASON COST CONFIDENCE DETAIL
[email protected] bin source 42ms high timestamp-only change (content identical): src/main.rs
Ogni unità ricompilata ha un motivo, il tempo che è costata e quanto QuickRust ne è sicuro. In una build grande, restringi l’elenco:
qrust analyze rebuilds --filter reason=environment
qrust analyze rebuilds --filter package=serde --sort cost_ns:desc --limit 10
qrust analyze rebuilds --format json
Per esaminare una build precedente, aggiungi --run latest~1 (o un id di esecuzione da qrust runs).
Agisci in base al motivo
| Motivo | Che cosa è cambiato | Che cosa fare |
|---|---|---|
new |
QuickRust non ha mai visto questa unità prima | Nulla: è la sua prima build. |
source |
un file letto dal compilatore; timestamp-only change (content identical) significa che è cambiata solo la sua data di modifica |
Previsto dopo una modifica. Se non l’hai modificato tu, scopri che cosa lo tocca (un generatore di codice, un git checkout, un formatter che riscrive file invariati). |
dependency |
una dipendenza è stata ricompilata | Cerca il motivo della dipendenza stessa: risolvi quello e questo scompare. |
build-script-input |
lo script di build del pacchetto è stato eseguito di nuovo | Controlla che cosa dichiara lo script con cargo::rerun-if-changed / rerun-if-env-changed (qrust analyze scripts); uno script che non dichiara nulla viene rieseguito ogni volta che cambia un qualsiasi file del suo pacchetto. |
environment |
una variabile d’ambiente da cui l’unità dipende | Mantieni quella variabile uguale tra una build e l’altra; editor e terminali spesso differiscono (PATH, RUSTFLAGS, variabili specifiche di uno strumento). |
rustflags |
RUSTFLAGS o i rustflags del target |
Usa gli stessi flag in ogni punto da cui compili, oppure dai allo strumento che differisce una propria directory target. |
feature-set |
il pacchetto è stato compilato con altre feature | Compilare singoli pacchetti (-p) e compilare l’intero workspace risolvono le feature in modo diverso; qrust analyze duplication elenca le varianti e chi le richiede. |
profile |
le impostazioni del profilo | Di solito è l’alternanza tra comandi o modalità con impostazioni diverse, per esempio tra fast mode e compat mode. |
compiler |
la toolchain | Il canale è passato a una nuova release (vedi più sotto), oppure +toolchain / un file di toolchain ne ha selezionata un’altra. |
target |
il target di compilazione | Previsto quando compili per un altro --target. |
cache-miss |
nulla: esiste un’unità identica, ma non in questa directory di build, oppure cargo clean l’ha rimossa |
Normale per un nuovo checkout o dopo una pulizia; la cache degli artefatti di QuickRust ripristina la maggior parte di queste unità. |
unknown |
QuickRust non ha potuto vedere che cosa è cambiato | Vedi “Quando il motivo è sconosciuto” più sotto. |
Confronta due build
qrust compare latest~1 latest
stampa le metriche delle due esecuzioni affiancate e ciò che differisce tra i loro ambienti (toolchain, lockfile, impostazioni). Una differenza elencata lì come notable è spesso la causa.
Ricompilazioni dopo il passaggio tra QuickRust e Cargo puro
Cargo puro e QuickRust mantengono directory di build separate, quindi non ricompilano mai l’output l’uno dell’altro. Se condividi un’unica directory tra i due, gli script di build che dichiarano cargo::rerun-if-env-changed=RUSTC_WRAPPER vengono rieseguiti a ogni passaggio; Come provare QuickRust prima di farne il tuo cargo mostra come evitarlo.
Ricompilazioni dopo un aggiornamento della toolchain
QuickRust aggiorna in background i canali come stable, e la prima build sulla nuova release compila di nuovo tutto (motivo compiler). Se preferisci scegliere tu quando accade, fissa la release in rust-toolchain.toml oppure disattiva gli aggiornamenti in background; vedi Come scegliere e gestire le toolchain.
Unità compilate due volte in altri worktree
qrust analyze worktrees
elenca gli altri checkout e workspace che QuickRust conosce, e quante unità identiche ciascuno ha compilato che ha compilato anche questo.
Quando il motivo è sconosciuto
unknown significa che l’identità dell’unità è cambiata senza che cambiasse alcun componente che QuickRust può osservare, oppure che è stata ricompilata con un’identità invariata (input che rustc non elenca, o artefatti rimossi al di fuori di Cargo). Per vedere che cosa ne pensa Cargo stesso, esegui la stessa build con il log dei fingerprint di Cargo:
CARGO_LOG=cargo::core::compiler::fingerprint=info cargo build 2>&1 | grep -i dirty
Vedi anche
- Schema del report per i record
rebuilds - Misurare le build per ciò che QuickRust può e non può osservare