Updating to 0.7
Since the 0.6 release, rust-random gained a logo and a new crate: getrandom!
Dependencies
Rand crates now require rustc version 1.32.0 or later.
This allowed us to remove all build.rs files for faster compilation.
The Rand crate now has fewer dependencies overall, though with some new ones.
Getrandom
As mentioned above, we have a new crate: getrandom, delivering a minimal API
around platform-independent access to fresh entropy. This replaces the previous
implementation in [OsRng], which is now merely a wrapper.
Core features
The FromEntropy trait has now been removed. Fear not though, its
from_entropy method continues to provide easy initialisation from its new
home in the SeedableRng trait (this requires that rand_core has the std
or getrandom feature enabled):
#![allow(unused)] fn main() { use rand::{SeedableRng, rngs::StdRng}; let mut rng = StdRng::from_entropy(); }
The SeedableRng::from_rng method is now considered value-stable:
implementations should have portable results.
The Error type of rand_core and rand has seen a major redesign; direct
usage of this type is likely to need adjustment.
PRNGs
These have seen less change than in the previous release, but noteworthy is:
rand_chachahas been rewritten for much better performance (via SIMD instructions)StdRngandThreadRngnow use the ChaCha algorithm. This is a value-breaking change forStdRng.SmallRngis now gated behind thesmall_rngfeature flag.- The
xoshirocrate is nowrand_xoshiro. rand_pcgnow includesPcg64.
Distributions
For the most widely used distributions (Standard and Uniform), there have
been no significant changes. But for most of the rest...
- We added a new crate, [rand_distr], to house the all distributions
(including re-exporting those still within
rand::distributions). If you previously usedrand::distributions::Normal, now you userand_distr::Normal. - Constructors for many distributions changed in order to return a
Resultinstead of panicking on error. - Many distributions are now generic over their parameter type (in most cases
supporting
f32andf64). This aids usage with generic code, and allows reduced size of parameterised distributions. Currently the more complex algorithms always usef64internally. Standardcan now sampleNonZeroU*values
We also added several distributions:
rand::distributions::weighted::alias_method::WeightedIndexrand_distr::Pertrand_distr::Triangularrand_distr::UnitBallrand_distr::UnitDiscrand_distr::UnitSphere(previously namedrand::distributions::UnitSphereSurface)
Sequences
To aid portability, all random samples of type usize now instead sample a
u32 value when the upper-bound is less than u32::MAX. This means that
upgrading to 0.7 is a value-breaking change for use of seq functionality, but
that after upgrading to 0.7 results should be consistent across CPU
architectures.