Releases: rust-random/rand
Releases ยท rust-random/rand
0.9.0
Upgrade guide
See https://rust-random.github.io/book/update-0.9.html
Changelog
Security and unsafe
- Policy: "rand is not a crypto library" (#1514)
- Remove fork-protection from
ReseedingRng
andThreadRng
. Instead, it is recommended to callThreadRng::reseed
on fork. (#1379) - Use
zerocopy
to replace someunsafe
code (#1349, #1393, #1446, #1502)
Dependencies
- 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
- Update to
rand_core
v0.9.0 (#1558)
Features
- Support
std
feature withoutgetrandom
orrand_chacha
(#1354) - Enable feature
small_rng
by default (#1455) - Remove implicit feature
rand_chacha
; usestd_rng
instead. (#1473) - Rename feature
serde1
toserde
(#1477) - Rename feature
getrandom
toos_rng
(#1537) - Add feature
thread_rng
(#1547)
API changes: rand_core traits
- Add fn
RngCore::read_adapter
implementingstd::io::Read
(#1267) - Add trait
CryptoBlockRng: BlockRngCore
; maketrait CryptoRng: RngCore
(#1273) - Add traits
TryRngCore
,TryCryptoRng
(#1424, #1499) - Rename
fn SeedableRng::from_rng
->try_from_rng
and add infallible variantfn from_rng
(#1424) - Rename
fn SeedableRng::from_entropy
->from_os_rng
and add fallible variantfn try_from_os_rng
(#1424) - Add bounds
Clone
andAsRef
to associated typeSeedableRng::Seed
(#1491)
API changes: Rng trait and top-level fns
- Rename fn
rand::thread_rng()
torand::rng()
and remove from the prelude (#1506) - Remove fn
rand::random()
from the prelude (#1506) - Add top-level fns
random_iter
,random_range
,random_bool
,random_ratio
,fill
(#1488) - Re-introduce fn
Rng::gen_iter
asrandom_iter
(#1305, #1500) - Rename fn
Rng::gen
torandom
to avoid conflict with the newgen
keyword in Rust 2024 (#1438) - Rename fns
Rng::gen_range
torandom_range
,gen_bool
torandom_bool
,gen_ratio
torandom_ratio
(#1505) - Annotate panicking methods with
#[track_caller]
(#1442, #1447)
API changes: RNGs
- Fix
<SmallRng as SeedableRng>::Seed
size to 256 bits (#1455) - Remove first parameter (
rng
) ofReseedingRng::new
(#1533)
API changes: Sequences
- Split trait
SliceRandom
intoIndexedRandom
,IndexedMutRandom
,SliceRandom
(#1382) - Add
IndexedRandom::choose_multiple_array
,index::sample_array
(#1453, #1469)
API changes: Distributions: renames
- Rename module
rand::distributions
torand::distr
(#1470) - Rename distribution
Standard
toStandardUniform
(#1526) - Move
distr::Slice
->distr::slice::Choose
,distr::EmptySlice
->distr::slice::Empty
(#1548) - Rename trait
distr::DistString
->distr::SampleString
(#1548) - Rename
distr::DistIter
->distr::Iter
,distr::DistMap
->distr::Map
(#1548)
API changes: Distributions
- Relax
Sized
bound onDistribution<T> for &D
(#1278) - Remove impl of
Distribution<Option<T>>
forStandardUniform
(#1526) - Let distribution
StandardUniform
support allNonZero*
types (#1332) - Fns
{Uniform, UniformSampler}::{new, new_inclusive}
return aResult
(instead of potentially panicking) (#1229) - Distribution
Uniform
implementsTryFrom
instead ofFrom
for ranges (#1229) - Add
UniformUsize
(#1487) - Remove support for generating
isize
andusize
values withStandardUniform
,Uniform
(except viaUniformUsize
) andFill
and usage as aWeightedAliasIndex
weight (#1487) - Add impl
DistString
for distributionsSlice<char>
andUniform<char>
(#1315) - Add fn
Slice::num_choices
(#1402) - Add fn
p()
for distributionBernoulli
to access probability (#1481)
API changes: Weighted distributions
- Add
pub
modulerand::distr::weighted
, movingWeightedIndex
there (#1548) - Add trait
weighted::Weight
, allowingWeightedIndex
to trap overflow (#1353) - Add fns
weight, weights, total_weight
to distributionWeightedIndex
(#1420) - Rename enum
WeightedError
toweighted::Error
, revising variants (#1382) and mark as#[non_exhaustive]
(#1480)
API changes: SIMD
- Switch to
std::simd
, expand SIMD & docs (#1239)
Reproducibility-breaking changes
- Make
ReseedingRng::reseed
discard remaining data from the last block generated (#1379) - Change fn
SmallRng::seed_from_u64
implementation (#1203) - Allow
UniformFloat::new
samples andUniformFloat::sample_single
to yieldhigh
(#1462) - Fix portability of distribution
Slice
(#1469) - Make
Uniform
forusize
portable viaUniformUsize
(#1487) - Fix
IndexdRandom::choose_multiple_weighted
for very small seeds and optimize for large input length / low memory (#1530)
Reproducibility-breaking optimisations
- Optimize fn
sample_floyd
, affecting output ofrand::seq::index::sample
andrand::seq::SliceRandom::choose_multiple
(#1277) - New, faster algorithms for
IteratorRandom::choose
andchoose_stable
(#1268) - New, faster algorithms for
SliceRandom::shuffle
andpartial_shuffle
(#1272) - Optimize distribution
Uniform
: use Canon's method (single sampling) / Lemire's method (distribution sampling) for faster sampling (breaks value stability; #1287) - Optimize fn
sample_single_inclusive
for floats (+~20% perf) (#1289)
Other optimisations
Other
- Add
Cargo.lock.msrv
file (#1275) - Reformat with
rustfmt
and enforce (#1448) - Apply Clippy suggestions and enforce (#1448, #1474)
- Move all benchmarks to new
benches
crate (#1329, #1439) and migrate to Criterion (#1490)
Documentation
- Improve
ThreadRng
related docs (#1257) - Docs: enable experimental
--generate-link-to-definition
feature (#1327) - Better doc of crate features, use
doc_auto_cfg
(#1411, #1450)
All PRs
- update Miri CI config by @RalfJung in #1223
- fix typo by @cuishuang in #1228
- Remove unused fields by @vks in #1184
- Make
CryptoRngCore
trait implyCryptoRng
as well by @cbeck88 in #1230 - Deterministic Rayon monte carlo example by @masonk in #1236
- small deterministic example update by @TheIronBorn in #1240
- switch to std::simd, expand SIMD & docs by @TheIronBorn in #1239
- optimize simd widening mul by @TheIronBorn in #1247
- Mention disabling getrandom for wasm32-unknown-unknown in README by @golddranks in #1250
- Bump MSRV to 1.51.0 by @dhardy in #1246
- rand_core: update CHANGELOG for 0.6.4 by @dhardy in #1253
- Update listed rand_core version number by @atouchet in #1254
- Doc: improve random, thread_rng, ThreadRng docs by @dhardy in #1257
- Clarify documentation of
choose_weighted(_mut)
mentioning accurate behavior with floats by @ISibboI in #1245 - clarify shuffle docs by @RalfJung in #1259
- fix outdated choose_multiple_weighted docs by @TheIronBorn in #1237
- Update GitHub Actions by @dhardy in #1263
- Fix typo by @yaronf in #1264
- Remove redundant bounds by @steffahn in #1207
- SmallRng uses wrong seed_from_u64 implementation by @ironhaven in #1203
- gh-pages action: add id-token write permission by @dhardy in #1265
- Bump MSRV to 1.56 (Edition 2021) by @dhardy in #1269
- fill_via_chunks: mutate src on BE (small optimisation) by @dhardy in #1182
- Add read_adapter to avoid dynamic dispatch by @SUPERCILEX in #1267
- GitHub Workflows security hardening by @sashashura in #1274
- Add Criterion as dev-dependency, fix CI for MSRV and minimal-versions by @dhardy in #1275
- use partition_point in WeightedIndex by @TheIronBorn in #1276
- Simpler and faster implementation of Floyd's F2 by @ciphergoth in #1277
- Relax
Sized
bound onDistribution<T> for &D
by @ChayimFriedman2 in #1278 - Added new versions of choose and choose_stable by @wainwrightmark in #1268
- Performance improvements for
shuffle
andpartial_shuffle
by @wainwrightmark in #1272 - Add note about floating point weights in update_weights docs by @arya2 in #1280
- Make
Uniform
constructors return a result by @vks in #1229 - Poisson returns -1 for small lambda by @tearne in #1284
- Rework CryptoRng by @newpavlov in #1273
- Don't run the random write test by @SUPERCILEX in #1294
- Poisson distribution falls into an infinite loop for parameter ฮป=โ by @Thopic in #1291
- Use const generics in Dirichlet by @Armavica in #1292
- Uniform sampling: use C...
0.9.0-beta.3
Changes to rand
- Add feature
thread_rng
(#1547) - Move
distr::Slice
->distr::slice::Choose
,distr::EmptySlice
->distr::slice::Empty
(#1548) - Rename trait
distr::DistString
->distr::SampleString
(#1548) - Rename
distr::DistIter
->distr::Iter
,distr::DistMap
->distr::Map
(#1548) - Move
distr::{Weight, WeightError, WeightedIndex}
->distr::weighted::{Weight, Error, WeightedIndex}
(#1548)
Changes to rand_distr
- Move
Slice
->slice::Choose
,EmptySlice
->slice::Empty
(#1548) - Rename trait
DistString
->SampleString
(#1548) - Rename
DistIter
->Iter
,DistMap
->Map
(#1548) - Move
{Weight, WeightError, WeightedIndex}
->weighted::{Weight, Error, WeightedIndex}
(#1548) - Move
weighted_alias::{AliasableWeight, WeightedAliasIndex}
->weighted::{..}
(#1548) - Move
weighted_tree::WeightedTreeIndex
->weighted::WeightedTreeIndex
(#1548)
New Contributors
- @serendipity-crypto made their first contribution in #1551
Full Changelog: 0.9.0-beta.1...0.9.0-beta.3
0.9.0-beta.0
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
ReseedingRng
andThreadRng
. Instead, it is recommended to callThreadRng::reseed
on fork. (#1379) - Use
zerocopy
to replace someunsafe
code (#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
std
feature withoutgetrandom
orrand_chacha
(#1354) - Improve
thread_rng
related docs (#1257) - The
serde1
feature has been renamedserde
(#1477) - The implicit feature
rand_chacha
has been removed. This is enabled bystd_rng
. (#1473) - Enable feature
small_rng
by default (#1455) - Rename feature
getrandom
toos_rng
(#1537)
Inherited changes from rand_core
- Add fn
RngCore::read_adapter
implementingstd::io::Read
(#1267) - Add trait
CryptoBlockRng: BlockRngCore
; maketrait CryptoRng: RngCore
(#1273) - Add traits
TryRngCore
,TryCryptoRng
(#1424, #1499) - Add bounds
Clone
andAsRef
to 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_iter
asrandom_iter
(#1305, #1500) - Rename fn
Rng::gen
torandom
to avoid conflict with the newgen
keyword in Rust 2024 (#1438) - Rename fns
Rng::gen_range
torandom_range
,gen_bool
torandom_bool
,gen_ratio
torandom_ratio
(#1505) - Annotate panicking methods with
#[track_caller]
(#1442, #1447)
RNGs
- Make
ReseedingRng::reseed
discard remaining data from the last block generated (#1379) - Change fn
SmallRng::seed_from_u64
implementation (#1203) - Fix
<SmallRng as SeedableRng>::Seed
size 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::sample
andrand::seq::SliceRandom::choose_multiple
(#1277) - New, faster algorithms for
IteratorRandom::choose
andchoose_stable
(#1268) - New, faster algorithms for
SliceRandom::shuffle
andpartial_shuffle
(#1272) - Split trait
SliceRandom
intoIndexedRandom
,IndexedMutRandom
,SliceRandom
(#1382) - Add
IndexedRandom::choose_multiple_array
,index::sample_array
(#1453, #1469) - Fix
IndexdRandom::choose_multiple_weighted
for very small seeds and optimize for large input length / low memory (#1530)
Distributions
- Rename module
rand::distributions
torand::distr
(#1470) - Relax
Sized
bound onDistribution<T> for &D
(#1278) - Rename distribution
Standard
toStandardUniform
(#1526) - Remove impl of
Distribution<Option<T>>
forStandardUniform
(#1526) - Let distribution
StandardUniform
support allNonZero*
types (#1332) - Fns
{Uniform, UniformSampler}::{new, new_inclusive}
return aResult
(instead of potentially panicking) (#1229) - Distribution
Uniform
implementsTryFrom
instead ofFrom
for ranges (#1229) - Optimize distribution
Uniform
: use Canon's method (single sampling) / Lemire's method (distribution sampling) for faster sampling (breaks value stability; #1287) - Add
UniformUsize
and use to makeUniform
forusize
portable (#1487) - Optimize fn
sample_single_inclusive
for floats (+~20% perf) (#1289) - Allow
UniformFloat::new
samples andUniformFloat::sample_single
to yieldhigh
(#1462) - Add impl
DistString
for distributionsSlice<char>
andUniform<char>
(#1315) - Add fn
Slice::num_choices
(#1402) - Fix portability of distribution
Slice
(#1469) - Add trait
Weight
, allowingWeightedIndex
to trap overflow (#1353) - Add fns
weight, weights, total_weight
to distributionWeightedIndex
(#1420) - Rename enum
WeightedError
toWeightError
, revising variants (#1382) and mark as#[non_exhaustive]
(#1480) - Add fn
p()
for distributionBernoulli
to access probability (#1481)
SIMD
Documentation
- Add
Cargo.lock.msrv
file (#1275) - Docs: enable experimental
--generate-link-to-definition
feature (#1327) - Better doc of crate features, use
doc_auto_cfg
(#1411, #1450)
Other
- Reformat with
rustfmt
and enforce (#1448) - Apply Clippy suggestions and enforce (#1448, #1474)
- Move all benchmarks to new
benches
crate (#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
rand* 0.9.0-alpha.0
This is a pre-release. To depend on this version, use rand = "=0.9.0-alpha.0"
to prevent automatic updates (which can be expected to include breaking changes).
Generators
- Change
SmallRng::seed_from_u64
implementation (#1203) - Replace
SeedableRng
impl forSmallRng
with inherent methods, excludingfn from_seed
(#1368)
Sequences
- Simpler and faster implementation of Floyd's F2 (#1277). This
changes some outputs fromrand::seq::index::sample
and
rand::seq::SliceRandom::choose_multiple
. - New, faster algorithms for
IteratorRandom::choose
andchoose_stable
(#1268) - New, faster algorithms for
SliceRandom::shuffle
andpartial_shuffle
(#1272) - Re-introduce
Rng::gen_iter
(#1305) - Split trait
SliceRandom
intoIndexedRandom
,IndexedMutRandom
,SliceRandom
(#1382)
Distributions
{Uniform, UniformSampler}::{new, new_inclusive}
return aResult
(instead of potentially panicking) (#1229)Uniform
implementsTryFrom
instead ofFrom
for ranges (#1229)Uniform
now uses Canon's method (single sampling) / Lemire's method (distribution sampling) for faster sampling (breaks value stability; #1287)- Relax
Sized
bound onDistribution<T> for &D
(#1278) - Explicit impl of
sample_single_inclusive
(+~20% perf) (#1289) - Impl
DistString
forSlice<char>
andUniform<char>
(#1315) - Let
Standard
support allNonZero*
types (#1332) - Add
trait Weight
, allowingWeightedIndex
to trap overflow (#1353) - Rename
WeightedError
toWeightError
, revising variants (#1382)
SIMD
Other
- Bump MSRV to 1.60.0 (#1207, #1246, #1269, #1341)
- Improve
thread_rng
related docs (#1257) - Add
Cargo.lock.msrv
file (#1275) - Docs: enable experimental
--generate-link-to-definition
feature (#1327) - Use
zerocopy
to replace someunsafe
code (#1349) - Support
std
feature withoutgetrandom
orrand_chacha
(#1354)
rand_distr-0.5.0-alpha.0
This is a pre-release. To depend on this version, use rand_distr = "=0.5.0-alpha.0"
to prevent automatic updates (which can be expected to include breaking changes).
Additions
Changes
- Target
rand
version0.9.0-alpha.0
- Remove unused fields from
Gamma
,NormalInverseGaussian
andZipf
distributions (#1184)
This breaks serialization compatibility with older versions. Dirichlet
now usesconst
generics, which means that its size is required at compile time (#1292)- The
Dirichlet::new_with_size
constructor was removed (#1292)