Inizializzare costanti Rust durante l’esecuzione con lazy_static
Inizializzazione costanti Rust con lazy_static
Definisci variabili statiche non costanti con inizializzazione ritardata
Non è un segreto che inizializzare costanti al momento della compilazione sia una buona pratica di programmazione. Non solo si riduce l’overhead di inizializzazione, ma si facilita anche l’ottimizzazione intelligente del codice da parte del compilatore conoscendo in anticipo il valore della costante.
Tuttavia, a volte è impossibile inizializzare ogni costante al momento della compilazione poiché richiede operazioni non costanti o il recupero di dati disponibili solo durante l’esecuzione. Ad esempio, supponiamo di utilizzare ripetutamente il numero √7
nel nostro programma. Invece di calcolarlo ogni volta, sarebbe meglio definire una costante come segue:
const ROOT_OF_SEVEN: f64 = 7_f64.sqrt();
Questo codice, tuttavia, è invalido. Il compilatore di Rust restituisce il seguente errore:
cannot call non-const fn `f64::<impl f64>::sqrt` in constantscalls in constants are limited to constant functions, tuple structs and tuple variants
Lo stesso accade se si tenta di inizializzare una costante con una variabile di ambiente:
- LightOn AI rilascia Alfred-40B-0723 un nuovo modello di linguaggio open-source (LLM) basato su Falcon-40B.
- Aprire a forza la libreria Transformers di Hugging Face
- I ricercatori di Google DeepMind presentano RT-2 un nuovo modello Visione-Linguaggio-Azione (VLA) che impara sia dai dati web che da quelli robotici e li trasforma in azione.
const LANG: String = env::var("LANG").unwrap();
Dal compilatore di Rust:
cannot call non-const fn `std::env::var::<&str>` in constantscalls in constants are limited to constant functions, tuple structs and tuple variants
Come si può vedere, alcune costanti che sarebbe utile inizializzare al momento della compilazione richiedono operazioni non costanti. Qui entra in gioco la libreria lazy_static
di Rust. lazy_static
consente di definire variabili statiche globali che vengono inizializzate in modo ritardato, il che significa che i loro valori vengono impostati solo al primo utilizzo effettivo durante l’esecuzione. Le variabili statiche pigre hanno bisogno di essere inizializzate solo la prima volta che vengono utilizzate e, poiché questa è un’operazione che avviene una sola volta, il loro overhead di inizializzazione durante l’esecuzione è trascurabile.
In questo articolo, vedremo come utilizzare la libreria lazy_static
di Rust per inizializzare in modo pigro costanti globali e alcuni dei loro casi d’uso.
Usa lazy_static
Per utilizzare la libreria lazy_static
, è sufficiente aggiungerla alle dipendenze del tuo progetto mediante