Rust:
Генерация случайных чисел
Как это сделать:
Rust полагается на внешние крейты для генерации случайных чисел, при этом rand
является наиболее часто используемым. Чтобы начать генерацию случайных чисел, вам первым делом нужно добавить rand
в ваш файл Cargo.toml
:
[dependencies]
rand = "0.8.5"
Далее, вы можете генерировать случайные числа с использованием rand
в вашем коде на Rust. Вот пример генерации случайного целого числа и числа с плавающей точкой:
use rand::{Rng, thread_rng};
fn main() {
let mut rng = thread_rng();
// Генерация случайного целого числа от 1 до 10
let random_int: i32 = rng.gen_range(1..=10);
println!("Случайное целое: {}", random_int);
// Генерация случайного числа с плавающей точкой от 0.0 до 1.0
let random_float: f64 = rng.gen::<f64>();
println!("Случайное число с плавающей точкой: {}", random_float);
}
Пример вывода может быть следующим:
Случайное целое: 7
Случайное число с плавающей точкой: 0.9401077112175732
Обратите внимание, что повторный запуск программы будет выдавать разные значения.
Подробнее
Генерация случайных чисел в Rust, осуществляемая благодаря rand
и его зависимостям типа getrandom
, представляет собой широкую абстракцию над возможностями операционных систем и алгоритмическими генераторами. Исторически случайность в вычислениях развивалась от простых, предсказуемых алгоритмов до сложных, криптографически безопасных методов. Подход Rust обобщает это развитие через его подключаемый трейт Rng
, который может поддерживаться различными генераторами в соответствии с требуемым качеством случайности и производительностью.
Для большинства приложений полагаться на rand
и RNG системы предоставляет хороший баланс между простотой и энтропией. Однако для криптографических приложений крейты типа rand
обращаются к getrandom
для начальной загрузки, который, в свою очередь, полагается на механизмы, специфичные для ОС (например, /dev/urandom
в системах, подобных Unix), обеспечивая криптографически безопасную случайность.
В альтернативе, если у вас есть конкретные потребности, которые не удовлетворяются с помощью rand
, изучение других крейтов или реализация пользовательских генераторов на основе математических моделей может быть путем. Тем не менее, для подавляющего большинства случаев использования rand
и его экосистема предоставляют надежные решения, которые одновременно эффективны и просты в интеграции в приложения на Rust.