This replaces the wrapper around the runtime RNG with a pure Rust implementation of the same algorithm. This is much faster (up to 5x), and is hopefully safer.
There is still (a little) room for optimisation: testing by summing 100,000,000 random `u32`s indicates this is about ~~40-50%~~ 10% slower than the pure C implementation (running as standalone executable, not in the runtime).
(Only
6d50d55 is part of this PR, the first two are from #6058, but are required for the rt rng to be correct to compare against in the tests.)
* Returns a random value of a Rand type, using the task's random number
* generator.
*/
+ #[inline]
pub fn random<T: Rand>() -> T {
- task_rng().gen()
+ (*task_rng()).gen()
}
#[cfg(test)]