This is a pre-release. To depend on this version, use rand = "=0.9.0-beta.0" to prevent automatic updates (which can be expected to include breaking changes).
Security and unsafe
- Policy: "rand is not a crypto library" (#1514)
- Remove fork-protection from
ReseedingRngandThreadRng. Instead, it is recommended to callThreadRng::reseedon fork. (#1379) - Use
zerocopyto replace someunsafecode (#1349, #1393, #1446, #1502)
Compilation options
- Bump the MSRV to 1.63.0 (#1207, #1246, #1269, #1341, #1416, #1536); note that 1.60.0 may work for dependents when using
--ignore-rust-version - Support
stdfeature withoutgetrandomorrand_chacha(#1354) - Improve
thread_rngrelated docs (#1257) - The
serde1feature has been renamedserde(#1477) - The implicit feature
rand_chachahas been removed. This is enabled bystd_rng. (#1473) - Enable feature
small_rngby default (#1455) - Rename feature
getrandomtoos_rng(#1537)
Inherited changes from rand_core
- Add fn
RngCore::read_adapterimplementingstd::io::Read(#1267) - Add trait
CryptoBlockRng: BlockRngCore; maketrait CryptoRng: RngCore(#1273) - Add traits
TryRngCore,TryCryptoRng(#1424, #1499) - Add bounds
CloneandAsRefto associated typeSeedableRng::Seed(#1491)
Rng trait and top-level fns
- Rename fn
rand::thread_rng()torand::rng(), and remove from the prelude (#1506) - Add top-level fns
random_iter,random_range,random_bool,random_ratio,fill(#1488) - Remove fn
rand::random()from the prelude (#1506) - Re-introduce fn
Rng::gen_iterasrandom_iter(#1305, #1500) - Rename fn
Rng::gentorandomto avoid conflict with the newgenkeyword in Rust 2024 (#1438) - Rename fns
Rng::gen_rangetorandom_range,gen_booltorandom_bool,gen_ratiotorandom_ratio(#1505) - Annotate panicking methods with
#[track_caller](#1442, #1447)
RNGs
- Make
ReseedingRng::reseeddiscard remaining data from the last block generated (#1379) - Change fn
SmallRng::seed_from_u64implementation (#1203) - Fix
<SmallRng as SeedableRng>::Seedsize to 256 bits (#1455) - Remove first parameter (
rng) ofReseedingRng::new(#1533) - Improve SmallRng initialization performance (#1482)
Sequences
- Optimize fn
sample_floyd, affecting output ofrand::seq::index::sampleandrand::seq::SliceRandom::choose_multiple(#1277) - New, faster algorithms for
IteratorRandom::chooseandchoose_stable(#1268) - New, faster algorithms for
SliceRandom::shuffleandpartial_shuffle(#1272) - Split trait
SliceRandomintoIndexedRandom,IndexedMutRandom,SliceRandom(#1382) - Add
IndexedRandom::choose_multiple_array,index::sample_array(#1453, #1469) - Fix
IndexdRandom::choose_multiple_weightedfor very small seeds and optimize for large input length / low memory (#1530)
Distributions
- Rename module
rand::distributionstorand::distr(#1470) - Relax
Sizedbound onDistribution<T> for &D(#1278) - Rename distribution
StandardtoStandardUniform(#1526) - Remove impl of
Distribution<Option<T>>forStandardUniform(#1526) - Let distribution
StandardUniformsupport allNonZero*types (#1332) - Fns
{Uniform, UniformSampler}::{new, new_inclusive}return aResult(instead of potentially panicking) (#1229) - Distribution
UniformimplementsTryFrominstead ofFromfor ranges (#1229) - Optimize distribution
Uniform: use Canon's method (single sampling) / Lemire's method (distribution sampling) for faster sampling (breaks value stability; #1287) - Add
UniformUsizeand use to makeUniformforusizeportable (#1487) - Optimize fn
sample_single_inclusivefor floats (+~20% perf) (#1289) - Allow
UniformFloat::newsamples andUniformFloat::sample_singleto yieldhigh(#1462) - Add impl
DistStringfor distributionsSlice<char>andUniform<char>(#1315) - Add fn
Slice::num_choices(#1402) - Fix portability of distribution
Slice(#1469) - Add trait
Weight, allowingWeightedIndexto trap overflow (#1353) - Add fns
weight, weights, total_weightto distributionWeightedIndex(#1420) - Rename enum
WeightedErrortoWeightError, revising variants (#1382) and mark as#[non_exhaustive](#1480) - Add fn
p()for distributionBernoullito access probability (#1481)
SIMD
Documentation
- Add
Cargo.lock.msrvfile (#1275) - Docs: enable experimental
--generate-link-to-definitionfeature (#1327) - Better doc of crate features, use
doc_auto_cfg(#1411, #1450)
Other
- Reformat with
rustfmtand enforce (#1448) - Apply Clippy suggestions and enforce (#1448, #1474)
- Move all benchmarks to new
benchescrate (#1329, #1439) and migrate to Criterion (#1490)
New Contributors
- @MichaelOwenDyer made their first contribution in #1405
- @JustusFluegel made their first contribution in #1402
- @acceptacross made their first contribution in #1407
- @waywardmonkeys made their first contribution in #1472
- @clarfonthey made their first contribution in #1491
- @arthurprs made their first contribution in #1482
- @marcpabst made their first contribution in #1481
- @JamboChen made their first contribution in #1504
- @oconnor663 made their first contribution in #1488
- @ComputerDruid made their first contribution in #1534
Full Changelog: 0.9.0-alpha.0...0.9.0-beta.0