Rust
Zufallszahlengenerierung
Suche…
Einführung
Rust verfügt über eine integrierte Funktion zur Erzeugung von Zufallszahlen über die Randkiste . Als Teil der Rust-Standardbibliothek wurde die Funktionalität der rand- Kiste getrennt, damit sich ihre Entwicklung unabhängig vom restlichen Rust-Projekt stabilisieren konnte. In diesem Thema wird beschrieben, wie Sie die Randkiste hinzufügen und anschließend eine Zufallszahl in Rust generieren und ausgeben.
Bemerkungen
Es gibt eine integrierte Unterstützung für ein RNG, das jedem Thread zugeordnet ist, der im lokalen Threadspeicher gespeichert ist. Auf diesen RNG kann über thread_rng
zugegriffen werden oder implizit über random
. Diese RNG wird normalerweise zufällig aus einer Zufallsquelle des Betriebssystems ausgesät, z. B. /dev/urandom
auf Unix-Systemen, und wird automatisch aus dieser Quelle nach dem Erzeugen von 32 KiB zufälliger Daten neu angespielt.
Eine Anwendung, die eine Entropiequelle für kryptografische Zwecke benötigt, muss OsRng
, das OsRng
aus der vom Betriebssystem OsRng
Quelle liest (z. B. /dev/urandom
unter Unixes oder CryptGenRandom()
unter Windows). Die anderen von diesem Modul bereitgestellten Zufallszahlengeneratoren sind für solche Zwecke nicht geeignet.
Zwei Zufallszahlen mit Rand erzeugen
Zunächst müssen Sie die Kiste als Abhängigkeit in Ihre Cargo.toml-Datei einfügen.
[dependencies]
rand = "0.3"
Dadurch wird die rand
Kiste von crates.io abgerufen. Als nächstes fügen Sie dies Ihrer Kistenwurzel hinzu.
extern crate rand;
Da dieses Beispiel eine einfache Ausgabe über das Terminal liefert, erstellen wir eine Hauptfunktion und drucken zwei zufällig generierte Zahlen auf die Konsole. Der Thread-Generator für lokale Zufallszahlen wird in diesem Beispiel zwischengespeichert. Bei der Generierung mehrerer Werte kann sich dies oft als effizienter erweisen.
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>())
}
}
Wenn Sie dieses Beispiel ausführen, sollte die folgende Antwort in der Konsole angezeigt werden.
$ cargo run
Running `target/debug/so`
i32: 1568599182, u32: 2222135793
Zeichen mit Rand erzeugen
So generieren Zeichen, können Sie die lokalen Thread-Zufallszahlengenerator - Funktion nutzen random
.
fn main() {
let tuple = rand::random::<(f64, char)>();
println!("{:?}", tuple)
}
Für gelegentliche oder einzelne Anfragen wie die oben genannte ist dies eine vernünftige, effiziente Methode. Wenn Sie jedoch mehr als eine Handvoll Zahlen generieren möchten, werden Sie feststellen, dass das Generieren des Caching effizienter ist.
In diesem Fall sollten Sie mit der folgenden Ausgabe rechnen.
$ cargo run
Running `target/debug/so`
(0.906881, '\u{9edc}')