Генератор случайных чисел в Rust: несколько методов с примерами кода

Вот несколько методов генерации случайных чисел в Rust вместе с примерами кода:

  1. Стандартная библиотека (ящик с рандом):

    use rand::Rng;
    fn main() {
       let mut rng = rand::thread_rng();
       let random_number: u32 = rng.gen();
       println!("Random number: {}", random_number);
    }
  2. Крипто-случайный (ящик с рандом):

    use rand::RngCore;
    use rand::rngs::OsRng;
    fn main() {
       let mut rng = OsRng;
       let mut random_number = [0u8; 4];
       rng.fill_bytes(&mut random_number);
       let random_number = u32::from_le_bytes(random_number);
       println!("Random number: {}", random_number);
    }
  3. Алгоритм Xorshift:

    struct Xorshift {
       x: u32,
       y: u32,
       z: u32,
       w: u32,
    }
    impl Xorshift {
       fn new() -> Xorshift {
           // Provide your own seed values here
           Xorshift { x: 123456789, y: 362436069, z: 521288629, w: 88675123 }
       }
       fn next(&mut self) -> u32 {
           let t = self.x ^ (self.x << 11);
           self.x = self.y;
           self.y = self.z;
           self.z = self.w;
           self.w = self.w ^ (self.w >> 19) ^ (t ^ (t >> 8));
           self.w
       }
    }
    fn main() {
       let mut rng = Xorshift::new();
       let random_number = rng.next();
       println!("Random number: {}", random_number);
    }
  4. Алгоритм SmallRng (ячейка rand):

    use rand::SeedableRng;
    use rand::rngs::SmallRng;
    fn main() {
       let mut rng = SmallRng::from_entropy();
       let random_number: u32 = rng.gen();
       println!("Random number: {}", random_number);
    }