Fast random number generators.
turborand
's internal implementations use Wyrand, a simple and fast
generator but not cryptographically secure, and also ChaCha8, a cryptographically
secure generator tuned to 8 rounds of the ChaCha algorithm in order to increase throughput considerably without sacrificing
too much security, as per the recommendations set out in the Too Much Crypto paper.
```rust use turborand::prelude::*;
let rand = Rng::new();
if rand.bool() { println!("Success! :D"); } else { println!("Failure... :("); } ```
Sample a value from a list:
```rust use turborand::prelude::*;
let rand = Rng::new();
let values = [1, 2, 3, 4, 5];
let value = rand.sample(&values); ```
Generate a vector with random values:
```rust use turborand::prelude::*; use std::iter::repeat_with;
let rand = Rng::new();
let values: Vec<_> = repeat_with(|| rand.f32()).take(10).collect(); ```
Version 0.6 introduces a major reworking of the crate, with code reorganised and also exposed more granularly via features. First things to note:
prelude
module. Top level only exports the new traits for turborand
.Rng
is now split into Rng
and AtomicRng
, no more top level generics that required exporting internal traits. State
trait is now made private and no longer available to be implemented, as this was an internal implementation detail for WyRand
.Rng
are now implemented in TurboCore
, GenCore
, SeededCore
and TurboRand
traits. These are part of the prelude
so as long as they are included, all existing methods will work as expected.Rng
is now under a feature flag, wyrand
. This is enabled by default however, unless default-features = false
is applied on the dependency declaration in Cargo.toml.rng!
, atomic_rng!
macros, as these are no longer needed to manage the generics spam that has since been refactored out. Instead, use ::new()
, ::default()
or ::with_seed(seed)
methods instead.Licensed under either of
at your option.