Rust
Génération de nombres aléatoires
Recherche…
Introduction
Rust a une capacité intégrée pour fournir une génération de nombres aléatoires à travers la caisse de rand . Une fois partie de la bibliothèque standard Rust, la fonctionnalité du rand crate a été séparée pour permettre à son développement de se stabiliser séparément du reste du projet Rust. Ce sujet couvrira comment ajouter simplement le rand crate, puis générer et sortir un nombre aléatoire dans Rust.
Remarques
Il existe un support intégré pour un RNG associé à chaque thread stocké dans un stockage local. Ce RNG est accessible via thread_rng
, ou implicitement via le random
. Ce RNG est normalement extrait au hasard d'une source aléatoire du système d'exploitation, par exemple /dev/urandom
sur les systèmes Unix, et se redimensionnera automatiquement à partir de cette source après avoir généré 32 KiB de données aléatoires.
Une application nécessitant une source d'entropie à des fins de cryptographie doit utiliser OsRng
, qui lit le caractère aléatoire de la source fournie par le système d'exploitation (par exemple, /dev/urandom
sur Unix ou CryptGenRandom()
sous Windows). Les autres générateurs de nombres aléatoires fournis par ce module ne sont pas adaptés à de telles fins.
Générer deux nombres aléatoires avec Rand
Tout d'abord, vous devrez ajouter la caisse dans votre fichier Cargo.toml en tant que dépendance.
[dependencies]
rand = "0.3"
Cela permettra de récupérer le rand
crate.io . Ensuite, ajoutez ceci à votre racine de caisse.
extern crate rand;
Comme cet exemple va fournir une sortie simple via le terminal, nous allons créer une fonction principale et imprimer deux nombres générés aléatoirement dans la console. Le générateur de nombres aléatoires local de thread sera mis en cache dans cet exemple. Lorsque vous générez plusieurs valeurs, cela peut souvent s'avérer plus efficace.
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>())
}
}
Lorsque vous exécutez cet exemple, vous devriez voir la réponse suivante dans la console.
$ cargo run
Running `target/debug/so`
i32: 1568599182, u32: 2222135793
Générer des caractères avec Rand
Pour générer des caractères, vous pouvez utiliser la fonction de générateur de nombres aléatoires local au fil, random
.
fn main() {
let tuple = rand::random::<(f64, char)>();
println!("{:?}", tuple)
}
Pour les demandes ponctuelles ou singulières, comme celle ci-dessus, il s'agit d'une méthode efficace et raisonnable. Cependant, si vous avez l'intention de générer plus d'une poignée de chiffres, vous constaterez que la mise en cache du générateur sera plus efficace.
Vous devriez vous attendre à voir la sortie suivante dans ce cas.
$ cargo run
Running `target/debug/so`
(0.906881, '\u{9edc}')