In questa sezione

Nessuna di esse cambia ciò che fa il programma compilato. mode = "compat" (o QRUST_MODE=compat) non ne applica nessuna: la build è esattamente quella del Cargo della toolchain, e viene solo osservata. Perché queste impostazioni e non altre: Perché QuickRust è veloce per impostazione predefinita.

Impostazioni

Impostazione Che cosa cambia Si applica a Disattivazione
profile.dev.debug = "line-tables-only" le build dev conservano le informazioni su file e righe (backtrace, esecuzione passo passo, breakpoint) ma non quelle sulle variabili locali e sui tipi comandi di build integrati imposta tu profile.dev.debug
profile.dev.package."*".debug = false nessuna informazione di debug per le dipendenze nelle build dev comandi di build integrati imposta tu profile.dev.debug o profile.dev.package."*".debug
il frontend parallelo di rustc (-Zthreads=N) la compilazione da zero usa più thread unità compilate da zero fast.frontend-threads = "off"
il linker wild le build per l’host degli output linkati usano wild per il link invece dell’LLD incluso in rustc host Linux con glibc su cui è installato wild fast.linker = "off"
la cache degli artefatti un’unità già compilata in precedenza viene ripristinata invece che compilata unità pianificate da Cargo cache.artifacts = "off"
early cut-off dopo una modifica che i dipendenti non possono osservare, i dipendenti vengono ripristinati invece che compilati, e dei binari si ripete solo il link unità pianificate da Cargo, con la cache degli artefatti attiva fast.early-cutoff = "off"

L’output di QuickRust nel terminale è indipendente dalla fast mode: in fast mode output vale per impostazione predefinita qrust, in modalità compat cargo (Output).

Impostazioni del profilo

Le due impostazioni del profilo arrivano a Cargo come argomenti --config, collocati insieme agli argomenti --config del comando stesso. Vengono passate ai comandi di build integrati (build, check, test, bench, run, doc, rustdoc, rustc, clippy, fix) e mai ad altri comandi o a sottocomandi esterni (cargo nextest, …), ai quali Cargo non passa --config.

Un’impostazione definita dall’utente ha la precedenza, e QuickRust lascia allora intatta quell’impostazione e quelle che ne dipendono:

Impostazione di QuickRust Lasciata intatta quando l’utente ha impostato
profile.dev.debug profile.dev.debug
profile.dev.package."*".debug profile.dev.debug o profile.dev.package."*".debug

Un’impostazione è considerata dell’utente quando è definita nel Cargo.toml alla radice del workspace, in un file di configurazione di Cargo che si applica al workspace, in un argomento --config o in una variabile d’ambiente CARGO_PROFILE_*.

Impostazioni applicate dal wrapper di rustc

Il frontend parallelo, il linker, la cache degli artefatti e l’early cut-off vengono applicati da qrust-rustc-wrapper alle compilazioni delle unità pianificate da Cargo. Nessuno di essi si applica:

  • quando l’utente ha configurato un wrapper di rustc (RUSTC_WRAPPER, build.rustc-wrapper o sccache concatenato tramite cache.provider);
  • con measurement.enabled = false;
  • agli script di build e alle sonde del compilatore che eseguono, che vedono il compilatore esattamente com’è.

Il frontend parallelo, il linker e la ripetizione del link richiedono flag -Z. Con un compilatore stable o beta il wrapper imposta RUSTC_BOOTSTRAP=1 per il processo del compilatore insieme a -Zallow-features=, così un crate che abilita #![feature] viene rifiutato come su stable (con l’errore di rustc “not in the list of allowed features”). Quando l’utente imposta RUSTC_BOOTSTRAP, nessuno di questi tre si applica.

Frontend parallelo

   
Chiave fast.frontend-threads: auto (il numero di core, al massimo 8, sulle macchine con almeno 4 core; disattivato sotto i 4), off, oppure un numero non inferiore a 2
Si applica a unità compilate da zero: dipendenze, build release e altre build non incrementali, e la prima compilazione di un’unità del workspace in una directory target
Non si applica a ricompilazioni incrementali; unità che la cache degli artefatti ha visto compilare rapidamente; unità i cui argomenti impostano già -Zthreads

Linker

   
Chiave fast.linker: auto, off
Si applica quando l’host è Linux con glibc e wild si trova in ~/.qrust/bin o nel PATH
Si applica a build per l’host (senza --target) delle unità che eseguono il link: binari, test, proc-macro, librerie dinamiche
Non si applica a unità per cui l’utente ha scelto un linker: -C linker, argomenti di link che selezionano un linker o feature del linker, dalla configurazione di Cargo o da RUSTFLAGS
Collegamento ~/.qrust/linker/ld punta al wild in uso

Cache degli artefatti

   
Chiave cache.artifacts: on, off
Posizione ~/.qrust/cache/artifacts/, gestita insieme al resto della cache di QuickRust (File)
Condivisa le dipendenze tra tutti i checkout della macchina; le unità del workspace all’interno del checkout che le ha compilate
Non salvato output linkati del workspace compilati in meno di cache.artifacts-min-link-ms (predefinito 300); una compilazione i cui input sono cambiati durante l’esecuzione
Differenza visibile una dipendenza che include codice generato dal suo script di build, compilata la prima volta in un’altra directory target, nomina quella directory nei messaggi di panic e nelle informazioni di debug del codice generato; QuickRust lo segnala una volta (con una NOTE) e conta queste unità nel report (cache.artifacts.restored_with_foreign_out_dir)

Come funziona: La cache degli artefatti.

Early cut-off

   
Chiave fast.early-cutoff: auto, off (QRUST_EARLY_CUTOFF)
Richiede la cache degli artefatti e il driver del compilatore di QuickRust per la toolchain
Driver il rustc della toolchain stessa, compilato con il suo componente rustc-dev, una volta per toolchain: da qrust setup e quando un canale passa a una nuova release; altrimenti in background dopo la prima build che lo trova mancante (QuickRust lo segnala con una NOTE). qrust driver status indica se è compilato, qrust driver build lo compila
Effetto l’hash del crate di una libreria copre ciò che i suoi dipendenti possono osservare, quindi una modifica che i dipendenti non possono osservare lascia invariate le loro chiavi di cache e vengono ripristinati; un binario o un test il cui codice non è cambiato viene di nuovo linkato (-Zlink-only) invece che compilato
Non applicato a un’unità su cui il driver ha già fallito in precedenza (da quel momento la compila rustc; il report viene conservato in ~/.qrust/cache/drivers/<key>/failed/); quando Cargo esegue un altro programma al posto di rustc (il clippy-driver di cargo clippy)

Come funziona: L’early cut-off.

Nel report dell’esecuzione

Ogni esecuzione registra che cosa ha fatto la fast mode in policy.fast (Schema del report di esecuzione):

Campo Contenuto
mode fast o compat
applied[] ogni impostazione applicata: key, value, why (le impostazioni del profilo, rustc -Zthreads, linker)
yielded[] ogni impostazione lasciata intatta: key, e because che nomina l’impostazione dell’utente e dove è stata definita
note perché non è stato applicato nulla (modalità compat, non è un comando di build)

policy.cache.artifacts indica se la cache degli artefatti era attiva e, in caso contrario, perché.