Rust
Generazione di numeri casuali
Ricerca…
introduzione
Rust ha una capacità incorporata per fornire la generazione di numeri casuali attraverso la cassa rand . Una volta parte della libreria standard di Rust, la funzionalità della cassa rand è stata separata per consentire al suo sviluppo di stabilizzarsi separatamente rispetto al resto del progetto Rust. Questo argomento spiegherà come aggiungere semplicemente la cassa rand, quindi generare e generare un numero casuale in Rust.
Osservazioni
È presente un supporto integrato per un RNG associato a ciascun thread archiviato nella memoria locale del thread. È possibile accedere a questo RNG tramite thread_rng
o utilizzato implicitamente tramite random
. Questo RNG è normalmente seminato casualmente da una sorgente di casualità del sistema operativo, ad esempio /dev/urandom
su sistemi Unix, e automaticamente si risistemerà da questa sorgente dopo aver generato 32 KiB di dati casuali.
Un'applicazione che richiede una fonte di entropia per scopi crittografici deve utilizzare OsRng
, che legge la casualità dalla sorgente fornita dal sistema operativo (ad esempio /dev/urandom
su Unixes o CryptGenRandom()
su Windows). Gli altri generatori di numeri casuali forniti da questo modulo non sono adatti a tali scopi.
Generazione di due numeri casuali con Rand
In primo luogo, dovrai aggiungere la cassa nel tuo file Cargo.toml come dipendenza.
[dependencies]
rand = "0.3"
Questo recupererà la cassa rand
da casse.io . Successivamente, aggiungi questo alla tua radice di cassa.
extern crate rand;
Dato che questo esempio fornirà un output semplice attraverso il terminale, creeremo una funzione principale e stamperemo due numeri generati casualmente sulla console. Il generatore di numeri casuali locali del thread verrà memorizzato nella cache in questo esempio. Quando si generano più valori, questo può spesso rivelarsi più efficiente.
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
if rng.gen() { // random bool
println!("i32: {}, u32: {}", rng.gen::<i32>(), rng.gen::<u32>())
}
}
Quando si esegue questo esempio, si dovrebbe vedere la seguente risposta nella console.
$ cargo run
Running `target/debug/so`
i32: 1568599182, u32: 2222135793
Generazione di personaggi con Rand
Per generare caratteri, è possibile utilizzare la funzione di generatore di numeri casuali locale del thread, a random
.
fn main() {
let tuple = rand::random::<(f64, char)>();
println!("{:?}", tuple)
}
Per richieste occasionali o singolari, come quella sopra, questo è un metodo ragionevole ed efficiente. Tuttavia, se intendi generare più di una manciata di numeri, troverai il caching del generatore più efficiente.
Dovresti aspettarti di vedere il seguente output in questo caso.
$ cargo run
Running `target/debug/so`
(0.906881, '\u{9edc}')