Sinh số ngẫu nhiên

Rust:
Sinh số ngẫu nhiên

Làm thế nào:

Rust dựa vào các crates bên ngoài để tạo số ngẫu nhiên, với rand là cái được sử dụng phổ biến nhất. Để bắt đầu tạo số ngẫu nhiên, bạn sẽ cần thêm rand vào tệp Cargo.toml của mình trước tiên:

[dependencies]
rand = "0.8.5"

Tiếp theo, bạn có thể tạo ra các số ngẫu nhiên bằng cách sử dụng rand trong mã Rust của mình. Dưới đây là một ví dụ về việc tạo ra một số nguyên ngẫu nhiên và một số thực dẫn:

use rand::{Rng, thread_rng};

fn main() {
    let mut rng = thread_rng();
    
    // Tạo một số nguyên ngẫu nhiên từ 1 đến 10
    let random_int: i32 = rng.gen_range(1..=10);
    println!("Số Nguyên Ngẫu Nhiên: {}", random_int);
    
    // Tạo một số thực ngẫu nhiên từ 0.0 đến 1.0
    let random_float: f64 = rng.gen::<f64>();
    println!("Số Thực Ngẫu Nhiên: {}", random_float);
}

Đầu ra mẫu có thể là:

Số Nguyên Ngẫu Nhiên: 7
Số Thực Ngẫu Nhiên: 0.9401077112175732

Lưu ý rằng chạy lại chương trình sẽ tạo ra các giá trị khác nhau.

Tìm hiểu sâu

Việc tạo số ngẫu nhiên trong Rust, được hỗ trợ thông qua rand và các phụ thuộc của nó như getrandom, đại diện cho một trừu tượng rộng lớn qua các tiện ích hệ thống và các bộ tạo số thuật toán. Lịch sử, sự ngẫu nhiên trong máy tính đã tiến hóa từ các thuật toán đơn giản, dễ dự đoán đến các phương pháp an toàn mã hoá phức tạp. Cách tiếp cận của Rust bao hàm sự tiến hóa này qua tính năng mở rộng của nó Rng, có thể được hỗ trợ bởi các bộ tạo số khác nhau tùy thuộc vào chất lượng và hiệu suất ngẫu nhiên cần thiết.

Đối với hầu hết các ứng dụng, dựa vào rand và RNG của hệ thống cung cấp một sự cân bằng tốt giữa sự đơn giản và entropy. Tuy nhiên, đối với các ứng dụng mã hoá, các crates như rand chuyển sang sử dụng getrandom để seeding, chính nó dựa vào các cơ chế đặc biệt của hệ điều hành (ví dụ, /dev/urandom trên các hệ thống giống Unix), đảm bảo ngẫu nhiên an toàn mã hoá.

Ngoài ra, nếu bạn có những nhu cầu cụ thể không được rand đáp ứng, việc khám phá các crates khác hoặc triển khai các bộ tạo số tùy chỉnh dựa trên các mô hình toán học có thể là một con đường. Tuy nhiên, đối với đại đa số các trường hợp sử dụng, rand và hệ sinh thái của nó cung cấp các giải pháp mạnh mẽ vừa hiệu quả và dễ dàng tích hợp vào các ứng dụng Rust.