QuickRust non legge mai la configurazione di Cargo (.cargo/config.toml) per le proprie impostazioni, e Cargo non legge mai quella di QuickRust. qrust policy explain stampa ogni chiave con il suo valore effettivo, la variabile d’ambiente e l’origine; --format json stampa le stesse informazioni in JSON.
Fonti e precedenza
Le fonti successive prevalgono su quelle precedenti, chiave per chiave:
| Ordine | Fonte |
|---|---|
| 1 | default incorporati |
| 2 | ~/.qrust/config.toml ($QRUST_HOME/config.toml): quello dell’utente |
| 3 | .qrust/config.toml nella directory in cui viene eseguito il comando o nella directory più vicina sopra di essa: quello del repository |
| 4 | la variabile d’ambiente QRUST_* della chiave |
Una variabile d’ambiente vuota conta come non impostata. Un file di configurazione che non esiste conta come vuoto.
Formato del file
TOML. output e mode sono chiavi di primo livello; ogni altra chiave è name dentro la tabella che ha come nome la sua prima parte:
mode = "fast"
[cache]
provider = "sccache"
max-size = "40GiB"
[measurement]
report = ".qrust/runs/{session}.json"
Validazione
Una configurazione non valida ferma ogni comando tranne qrust upstream, con exit status 2 e un messaggio che indica la chiave e la sua fonte:
- una chiave che non esiste (
unknown configuration keycache.providrin <file>); - un valore al di fuori del tipo o dei valori ammessi per la chiave (
invalid value "maybe" forcache.failfrom <file>: expected one of open, closed); - un valore del tipo TOML sbagliato;
- TOML non valido;
- qualsiasi variabile d’ambiente il cui nome inizia con
QRUST_e che non è la variabile di una chiave né una delle variabili interne di QuickRust (Ambiente):unknown configuration variableQRUST_…``.
Tipi di valore
| Tipo | Valori accettati |
|---|---|
| enum | esattamente una delle stringhe elencate |
| bool | true, false; da una stringa o dall’ambiente anche 1/0, on/off, yes/no (maiuscole o minuscole) |
| integer | un intero non negativo |
| string | qualsiasi stringa |
| space | auto; una dimensione (40GiB, 500MB, 1024; unità B, K/KB/KiB, M/MB/MiB, G/GB/GiB, T/TB/TiB, tutte potenze di 1024; maggiore di zero); oppure una quota del disco (10%, maggiore di 0 e al massimo 100) |
| threads | auto, off, oppure un numero non inferiore a 2 |
Chiavi
| Chiave | Tipo e valori | Default | Variabile d’ambiente | Significato |
|---|---|---|---|---|
mode |
fast, compat |
fast |
QRUST_MODE |
fast: si applicano le impostazioni della Fast mode; compat: esattamente ciò che compila il Cargo della toolchain |
output |
qrust, cargo |
qrust |
QRUST_OUTPUT |
chi presenta l’output di un comando in un terminale (Output). In compat mode il default è cargo; un output impostato esplicitamente vale in entrambe le modalità |
compatibility.nested-cargo |
orchestrator, upstream |
orchestrator |
QRUST_NESTED |
un Cargo avviato dentro una sessione QuickRust (il cargo o $CARGO di uno script di build o di un sottocomando): una sessione QuickRust propria collegata a quella esterna, oppure direttamente il Cargo della toolchain |
compatibility.unknown-command |
delegate, instrument |
delegate |
QRUST_COMPATIBILITY_UNKNOWN_COMMAND |
sottocomandi esterni: delegati, oppure delegati con il wrapper di rustc che ne osserva le compilazioni |
measurement.enabled |
bool | true |
QRUST_MEASUREMENT_ENABLED |
osserva le invocazioni di rustc attraverso qrust-rustc-wrapper; false disattiva anche tutto ciò che il wrapper applica (cache degli artefatti, frontend parallelo, linker, early cut-off) |
measurement.report |
string | vuoto | QRUST_REPORT |
scrive il report di ogni build in questo percorso (relativo alla directory corrente); {session} si espande nell’id dell’esecuzione |
measurement.finalize |
lazy, sync |
lazy |
QRUST_MEASUREMENT_FINALIZE |
analizza un’esecuzione la prima volta che viene richiesta, oppure subito dopo ogni build |
measurement.cargo-json |
auto, off |
auto |
QRUST_MEASUREMENT_CARGO_JSON |
legge i messaggi JSON di Cargo quando l’utente li ha richiesti su uno stdout che non è un terminale |
measurement.strict |
bool | false |
QRUST_MEASUREMENT_STRICT |
un’esecuzione che non è stato possibile registrare o riportare fa terminare con exit 2 un comando altrimenti riuscito |
measurement.keep-runs |
integer | 200 |
QRUST_MEASUREMENT_KEEP_RUNS |
esecuzioni registrate conservate per workspace |
measurement.keep-raw-events |
integer | 20 |
QRUST_MEASUREMENT_KEEP_RAW_EVENTS |
esecuzioni analizzate per workspace di cui si conservano gli eventi grezzi di rustc e l’output memorizzato |
incremental.local-dev |
cargo-default, on, off, experiment |
cargo-default |
QRUST_INCREMENTAL_LOCAL_DEV |
compilazione incrementale fuori dalla CI: decidono i profili di Cargo, CARGO_INCREMENTAL=1, CARGO_INCREMENTAL=0, oppure decidono i profili di Cargo (con un rimando a qrust experiment) |
incremental.ci |
come sopra | cargo-default |
QRUST_INCREMENTAL_CI |
lo stesso nella CI |
cache.provider |
inherit, none, sccache |
inherit |
QRUST_CACHE_PROVIDER |
cache del compilatore: osserva il RUSTC_WRAPPER configurato, non ne aggiunge nessuna, oppure concatena sccache (dal PATH) dentro il wrapper di QuickRust quando non è configurato alcun wrapper |
cache.fail |
open, closed |
open |
QRUST_CACHE_FAIL |
quando uno sccache concatenato non è disponibile: compila senza, oppure fallisce prima di compilare |
cache.artifacts |
on, off |
on |
QRUST_CACHE_ARTIFACTS |
fast mode: la cache degli artefatti di QuickRust |
cache.artifacts-min-link-ms |
integer (millisecondi) | 300 |
QRUST_CACHE_ARTIFACTS_MIN_LINK_MS |
gli output linkati del workspace (binari, test, proc-macro) che sono stati compilati in meno di questo tempo non vengono memorizzati nella cache degli artefatti |
build.variant |
string | vuoto | QRUST_BUILD_VARIANT |
un nome per questa configurazione del workspace: compila in una directory propria, builds/<name>-<id>.<variant>, così che le configurazioni di uno stesso workspace tengano separati i loro output (Come trovare gli output di build). Al massimo 32 lettere, cifre, - o _; vuoto indica l’unica directory di build del workspace. Nessun effetto su una directory target scelta da te |
cache.max-size |
space | auto |
QRUST_CACHE_MAX_SIZE |
lo spazio massimo che la cache di QuickRust usa; auto è il 10% del disco, tra 10 GiB e 100 GiB |
cache.min-free |
space | auto |
QRUST_CACHE_MIN_FREE |
lo spazio libero su disco che la cache di QuickRust lascia: sotto di esso, la cache restituisce quanto manca al disco più un quarto di questo valore, a partire da ciò che è stato usato meno di recente, contando ciò che ha rimosso e che il disco non mostra ancora come libero (Raccolta); auto è il 5% del disco, tra 2 GiB e 20 GiB |
fast.frontend-threads |
threads | auto |
QRUST_FAST_FRONTEND_THREADS |
fast mode: il frontend parallelo di rustc; auto è il numero di core, al massimo 8, sulle macchine con 4 o più core, e disattivato sotto i 4 |
fast.early-cutoff |
auto, off |
auto |
QRUST_EARLY_CUTOFF |
fast mode con la cache degli artefatti: compila con il driver del compilatore di QuickRust |
fast.linker |
auto, off |
auto |
QRUST_FAST_LINKER |
fast mode su un host Linux glibc: linka con wild quando è installato |
artifacts.inventory |
bool | true |
QRUST_ARTIFACTS_INVENTORY |
include un inventario della directory di build quando viene analizzata un’esecuzione |
artifacts.stale-days |
integer (giorni) | 30 |
QRUST_ARTIFACTS_STALE_DAYS |
età oltre la quale gli artefatti inutilizzati contano come non aggiornati in qrust inventory |
ci.budget-policy |
string | .qrust/budgets.toml |
QRUST_CI_BUDGET_POLICY |
il file dei budget, relativo alla radice del workspace (Budget) |
ci.baseline |
string | main |
QRUST_CI_BASELINE |
la baseline rispetto alla quale vengono valutati i budget |
ci.enforce-on-build |
bool | false |
QRUST_CI_ENFORCE_ON_BUILD |
valuta i budget dopo ogni comando di build riuscito; un fallimento bloccante termina con exit 3 |
self.update-url |
string | vuoto | QRUST_UPDATE_URL |
l’ancora di un altro registro delle release da cui qrust self update legge le release di QuickRust: uno a cui MachineFabric ha dato un charter, che serve in <url>/charter.json. Vuoto: il registro in cui è stato pubblicato questo QuickRust (qrust doctor, release line) |
toolchain.auto-update |
background, off |
background |
QRUST_TOOLCHAIN_AUTO_UPDATE |
una volta al giorno dopo una build, controlla in background se il canale usato dalla build ha una release più recente, e la installa per la build successiva; mai nella CI |
toolchain.dist-server |
string | https://static.rust-lang.org |
QRUST_DIST_SERVER |
da dove vengono scaricate le release di Rust |
security.persist-environment |
allowlist, none |
allowlist |
QRUST_SECURITY_PERSIST_ENVIRONMENT |
quali valori dell’ambiente conservano i record delle esecuzioni: solo le variabili rilevanti per la build, oppure nessuno |
security.redact-path-home |
bool | true |
QRUST_SECURITY_REDACT_PATH_HOME |
sostituisce la radice del workspace e le directory home, Cargo home e QuickRust home con $WORKSPACE, $HOME, $CARGO_HOME, $QRUST_HOME nei report esportati |
benchmark.allow-mutation |
bool | false |
QRUST_BENCHMARK_ALLOW_MUTATION |
permette allo scenario di benchmark small-edit di modificare un file sorgente senza chiedere |
La variabile d’ambiente di una chiave è QRUST_ seguito dalla chiave in maiuscolo con . e - sostituiti da _, tranne per le chiavi la cui variabile è indicata diversamente qui sopra (QRUST_MODE, QRUST_OUTPUT, QRUST_NESTED, QRUST_REPORT, QRUST_EARLY_CUTOFF, QRUST_CACHE_MAX_SIZE, QRUST_CACHE_MIN_FREE, QRUST_UPDATE_URL, QRUST_TOOLCHAIN_AUTO_UPDATE, QRUST_DIST_SERVER).
Un’esecuzione conta come CI quando una tra CI, GITHUB_ACTIONS, GITLAB_CI, BUILDKITE, JENKINS_URL, TF_BUILD, TEAMCITY_VERSION è impostata a un valore diverso da vuoto, false o 0. La CI seleziona incremental.ci al posto di incremental.local-dev e disattiva toolchain.auto-update. Un CARGO_INCREMENTAL esplicito nell’ambiente prevale sempre su entrambe le chiavi incremental.*.
Selezione della toolchain
La toolchain di un comando è la prima tra:
| Ordine | Fonte | Mostrata come |
|---|---|---|
| 1 | +<toolchain> come primo argomento (cargo +nightly build, rustc +1.98 -V); consumato da QuickRust, mai passato a Cargo |
`+toolchain` argument |
| 2 | RUSTUP_TOOLCHAIN |
RUSTUP_TOOLCHAIN |
| 3 | un file della toolchain nella directory corrente o nella directory più vicina sopra di essa | il percorso del file |
| 4 | la toolchain di default (qrust toolchain default; stable finché non viene impostata) |
default toolchain |
qrust toolchain list e qrust doctor mostrano la toolchain selezionata e che cosa l’ha selezionata. Gli override per directory di rustup non hanno un equivalente.
Nomi delle toolchain
| Forma | Esempio | Passa alle release più recenti |
|---|---|---|
| un canale | stable, beta, nightly |
sì |
| una nightly datata | nightly-2026-10-11 |
no |
| una release minor | 1.98 (la sua patch release più recente) |
sì |
| una release | 1.98.1 |
no |
| una qualsiasi delle precedenti con un host | stable-x86_64-unknown-linux-gnu |
come sopra |
| il nome di una toolchain collegata | my-build (qrust toolchain link my-build <dir>) |
no; mai modificata da QuickRust |
| un percorso assoluto a una directory di toolchain | /opt/rust |
no; usata così com’è |
Qualsiasi altra forma è un errore, prima di qualsiasi download. Una nightly senza data si risolve nella nightly più recente degli ultimi sette giorni che abbia tutti i componenti e i target richiesti.
File della toolchain
rust-toolchain.toml, oppure rust-toolchain (lo stesso TOML, oppure una singola riga che indica la toolchain). Una directory che li contiene entrambi è un errore.
[toolchain]
channel = "1.98" # oppure path = "../my-toolchain", mai entrambi
components = ["rust-src", "llvm-tools"]
targets = ["wasm32-unknown-unknown"]
profile = "minimal" # minimal | default | complete
| Chiave | Contenuto |
|---|---|
channel |
un nome di toolchain |
path |
una directory di toolchain, relativa al file; usata così com’è, quindi components, targets e profile sono errori insieme a essa |
components |
componenti installati con la toolchain |
targets |
target triple la cui libreria standard viene installata con la toolchain |
profile |
il profilo assegnato a una nuova installazione della toolchain |
Qualsiasi altra chiave o tabella è un errore. La toolchain, i suoi componenti e target, e la libreria standard di ogni --target per cui un comando compila vengono installati al primo utilizzo.
Profili delle toolchain
| Profilo | Componenti |
|---|---|
minimal |
rustc, cargo, la libreria standard |
default |
minimal con clippy, rustfmt e rust-src |
complete |
ogni componente che la release ha per l’host |
Una toolchain installata senza un profilo riceve default.
File che QuickRust legge in un repository
| File | Contenuto |
|---|---|
.qrust/config.toml |
configurazione di QuickRust (sopra) |
.qrust/budgets.toml (ci.budget-policy) |
Budget |
.qrust/baselines/<name>.json |
baseline scritte da qrust baseline set |
rust-toolchain.toml, rust-toolchain |
selezione della toolchain (sopra) |