Skip to content

Commit

Permalink
Prepare 0.9.0-beta.0 (#1535)
Browse files Browse the repository at this point in the history
- Update version numbers
- Update CHANGELOGs
- Add an extra benchmark
  • Loading branch information
dhardy authored Nov 26, 2024
1 parent bf9d429 commit 3fac49f
Show file tree
Hide file tree
Showing 15 changed files with 177 additions and 130 deletions.
117 changes: 62 additions & 55 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,79 +8,86 @@ A [separate changelog is kept for rand_core](rand_core/CHANGELOG.md).

You may also find the [Upgrade Guide](https://rust-random.github.io/book/update.html) useful.

## [Unreleased]
- Add `rand::distributions::WeightedIndex::{weight, weights, total_weight}` (#1420)
- Add `IndexedRandom::choose_multiple_array`, `index::sample_array` (#1453, #1469)
- Bump the MSRV to 1.63.0
- Rename `Rng::gen` to `Rng::random` to avoid conflict with the new `gen` keyword in Rust 2024 (#1435)
- Move all benchmarks to new `benches` crate (#1439) and migrate to Criterion (#1490)
- Annotate panicking methods with `#[track_caller]` (#1442, #1447)
- Enable feature `small_rng` by default (#1455)
- Allow `UniformFloat::new` samples and `UniformFloat::sample_single` to yield `high` (#1462)
- Fix portability of `rand::distributions::Slice` (#1469)
- Rename `rand::distributions` to `rand::distr` (#1470)
- The `serde1` feature has been renamed `serde` (#1477)
- The implicit feature `rand_chacha` has been removed. This is enabled by `std_rng`. (#1473)
- Mark `WeightError` as `#[non_exhaustive]` (#1480).
- Add `p()` for `Bernoulli` to access probability (#1481)
- Add `UniformUsize` and use to make `Uniform` for `usize` portable (#1487)
- Require `Clone` and `AsRef` bound for `SeedableRng::Seed`. (#1491)
- Improve SmallRng initialization performance (#1482)
- Rename `Rng::gen_iter` to `random_iter` (#1500)
- Rename `rand::thread_rng()` to `rand::rng()`, and remove from the prelude (#1506)
- Remove `rand::random()` from the prelude (#1506)
- Rename `Rng::gen_range` to `random_range`, `gen_bool` to `random_bool`, `gen_ratio` to `random_ratio` (#1505)
- Rename `Standard` to `StandardUniform` (#1526)
- Remove impl of `Distribution<Option<T>>` for `Standard` (#1526)
- Remove `SmallRng::from_thread_rng` (#1532)
- Remove first parameter (`rng`) of `ReseedingRng::new` (#1533)
- Rename feature `getrandom` to `os_rng`
## [0.9.0-beta.0] - 2024-11-25
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).

## [0.9.0-alpha.1] - 2024-03-18
- Add the `Slice::num_choices` method to the Slice distribution (#1402)
### Security and unsafe
- Policy: "rand is not a crypto library" (#1514)
- Remove fork-protection from `ReseedingRng` and `ThreadRng`. Instead, it is recommended to call `ThreadRng::reseed` on fork. (#1379)
- Use `zerocopy` to replace some `unsafe` code (#1349, #1393, #1446, #1502)

### Generators
- `ReseedingRng::reseed` also resets the random data cache.
- Remove fork-protection from `ReseedingRng` and `ThreadRng`. Instead, it is recommended to call `ThreadRng::reseed` on fork.

## [0.9.0-alpha.0] - 2024-02-18
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).
### 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 without `getrandom` or `rand_chacha` (#1354)
- Improve `thread_rng` related docs (#1257)
- The `serde1` feature has been renamed `serde` (#1477)
- The implicit feature `rand_chacha` has been removed. This is enabled by `std_rng`. (#1473)
- Enable feature `small_rng` by default (#1455)
- Rename feature `getrandom` to `os_rng` (#1537)

### Inherited changes from `rand_core`
- Add fn `RngCore::read_adapter` implementing `std::io::Read` (#1267)
- Add trait `CryptoBlockRng: BlockRngCore`; make `trait CryptoRng: RngCore` (#1273)
- Add traits `TryRngCore`, `TryCryptoRng` (#1424, #1499)
- Add bounds `Clone` and `AsRef` to associated type `SeedableRng::Seed` (#1491)

### Rng trait and top-level fns
- Rename fn `rand::thread_rng()` to `rand::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` as `random_iter` (#1305, #1500)
- Rename fn `Rng::gen` to `random` to avoid conflict with the new `gen` keyword in Rust 2024 (#1438)
- Rename fns `Rng::gen_range` to `random_range`, `gen_bool` to `random_bool`, `gen_ratio` to `random_ratio` (#1505)
- Annotate panicking methods with `#[track_caller]` (#1442, #1447)

### Generators
- Change `SmallRng::seed_from_u64` implementation (#1203)
- Replace `SeedableRng` impl for `SmallRng` with inherent methods, excluding `fn from_seed` (#1368)
### 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`) of `ReseedingRng::new` (#1533)
- Improve SmallRng initialization performance (#1482)

### Sequences
- Simpler and faster implementation of Floyd's F2 (#1277). This
changes some outputs from `rand::seq::index::sample` and
`rand::seq::SliceRandom::choose_multiple`.
- Optimize fn `sample_floyd`, affecting output of `rand::seq::index::sample` and `rand::seq::SliceRandom::choose_multiple` (#1277)
- New, faster algorithms for `IteratorRandom::choose` and `choose_stable` (#1268)
- New, faster algorithms for `SliceRandom::shuffle` and `partial_shuffle` (#1272)
- Re-introduce `Rng::gen_iter` (#1305)
- Split trait `SliceRandom` into `IndexedRandom`, `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
- `{Uniform, UniformSampler}::{new, new_inclusive}` return a `Result` (instead of potentially panicking) (#1229)
- `Uniform` implements `TryFrom` instead of `From` for ranges (#1229)
- `Uniform` now uses Canon's method (single sampling) / Lemire's method (distribution sampling) for faster sampling (breaks value stability; #1287)
- Rename module `rand::distributions` to `rand::distr` (#1470)
- Relax `Sized` bound on `Distribution<T> for &D` (#1278)
- Explicit impl of `sample_single_inclusive` (+~20% perf) (#1289)
- Impl `DistString` for `Slice<char>` and `Uniform<char>` (#1315)
- Let `Standard` support all `NonZero*` types (#1332)
- Add `trait Weight`, allowing `WeightedIndex` to trap overflow (#1353)
- Rename `WeightedError` to `WeightError`, revising variants (#1382)
- Rename distribution `Standard` to `StandardUniform` (#1526)
- Remove impl of `Distribution<Option<T>>` for `StandardUniform` (#1526)
- Let distribution `StandardUniform` support all `NonZero*` types (#1332)
- Fns `{Uniform, UniformSampler}::{new, new_inclusive}` return a `Result` (instead of potentially panicking) (#1229)
- Distribution `Uniform` implements `TryFrom` instead of `From` 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 make `Uniform` for `usize` portable (#1487)
- Optimize fn `sample_single_inclusive` for floats (+~20% perf) (#1289)
- Allow `UniformFloat::new` samples and `UniformFloat::sample_single` to yield `high` (#1462)
- Add impl `DistString` for distributions `Slice<char>` and `Uniform<char>` (#1315)
- Add fn `Slice::num_choices` (#1402)
- Fix portability of distribution `Slice` (#1469)
- Add trait `Weight`, allowing `WeightedIndex` to trap overflow (#1353)
- Add fns `weight, weights, total_weight` to distribution `WeightedIndex` (#1420)
- Rename enum `WeightedError` to `WeightError`, revising variants (#1382) and mark as `#[non_exhaustive]` (#1480)
- Add fn `p()` for distribution `Bernoulli` to access probability (#1481)

### SIMD
- Switch to `std::simd`, expand SIMD & docs (#1239)
- Optimise SIMD widening multiply (#1247)

### Other
- Bump MSRV to 1.60.0 (#1207, #1246, #1269, #1341)
- Improve `thread_rng` related docs (#1257)
### Documentation
- Add `Cargo.lock.msrv` file (#1275)
- Docs: enable experimental `--generate-link-to-definition` feature (#1327)
- Use `zerocopy` to replace some `unsafe` code (#1349)
- Support `std` feature without `getrandom` or `rand_chacha` (#1354)
- 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)

## [0.8.5] - 2021-08-20
### Fixes
Expand Down
10 changes: 5 additions & 5 deletions Cargo.lock.msrv

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rand"
version = "0.9.0-alpha.1"
version = "0.9.0-beta.0"
authors = ["The Rand Project Developers", "The Rust Project Developers"]
license = "MIT OR Apache-2.0"
readme = "README.md"
Expand Down Expand Up @@ -69,14 +69,14 @@ members = [
exclude = ["benches", "distr_test"]

[dependencies]
rand_core = { path = "rand_core", version = "=0.9.0-alpha.1", default-features = false }
rand_core = { path = "rand_core", version = "=0.9.0-beta.0", default-features = false }
log = { version = "0.4.4", optional = true }
serde = { version = "1.0.103", features = ["derive"], optional = true }
rand_chacha = { path = "rand_chacha", version = "=0.9.0-alpha.1", default-features = false, optional = true }
rand_chacha = { path = "rand_chacha", version = "=0.9.0-beta.0", default-features = false, optional = true }
zerocopy = { version = "0.8.0", default-features = false, features = ["simd"] }

[dev-dependencies]
rand_pcg = { path = "rand_pcg", version = "=0.9.0-alpha.1" }
rand_pcg = { path = "rand_pcg", version = "=0.9.0-beta.0" }
# Only to test serde
bincode = "1.2.1"
rayon = "1.7"
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,17 @@ Documentation:
## Usage

Add this to your `Cargo.toml`:

```toml
[dependencies]
rand = "0.8.5"
```

Or, to try the 0.9.0 beta release:
```toml
[dependencies]
rand = "=0.9.0-beta.0"
```

To get started using Rand, see [The Book](https://rust-random.github.io/book).

## Versions
Expand Down
27 changes: 27 additions & 0 deletions benches/benches/seq_choose.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,33 @@ pub fn bench(c: &mut Criterion) {
});
}

let lens = [(1, 1000), (950, 1000), (10, 100), (90, 100)];
for (amount, len) in lens {
let name = format!("seq_slice_choose_multiple_weighted_{}_of_{}", amount, len);
c.bench_function(name.as_str(), |b| {
let mut rng = Pcg32::from_rng(&mut rand::rng());
let mut buf = [0i32; 1000];
rng.fill(&mut buf);
let x = black_box(&buf[..len]);

let mut results_buf = [0i32; 950];
let y = black_box(&mut results_buf[..amount]);
let amount = black_box(amount);

b.iter(|| {
// Collect full result to prevent unwanted shortcuts getting
// first element (in case sample_indices returns an iterator).
let samples_iter = x
.choose_multiple_weighted(&mut rng, amount, |_| 1.0)
.unwrap();
for (slot, sample) in y.iter_mut().zip(samples_iter) {
*slot = *sample;
}
y[amount - 1]
})
});
}

c.bench_function("seq_iter_choose_multiple_10_of_100", |b| {
let mut rng = Pcg32::from_rng(&mut rand::rng());
let mut buf = [0i32; 100];
Expand Down
4 changes: 2 additions & 2 deletions distr_test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ edition = "2021"
publish = false

[dev-dependencies]
rand_distr = { path = "../rand_distr", version = "=0.5.0-alpha.1", default-features = false, features = ["alloc"] }
rand = { path = "..", version = "=0.9.0-alpha.1", features = ["small_rng"] }
rand_distr = { path = "../rand_distr", version = "=0.5.0-beta.0", default-features = false, features = ["alloc"] }
rand = { path = "..", version = "=0.9.0-beta.0", features = ["small_rng"] }
num-traits = "0.2.19"
# Special functions for testing distributions
special = "0.11.0"
Expand Down
13 changes: 5 additions & 8 deletions rand_chacha/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
- The `serde1` feature has been renamed `serde` (#1477)
- Rename feature `getrandom` to `os_rng`

## [0.9.0-alpha.1] - 2024-03-18

## [0.9.0-alpha.0] - 2024-02-18
This is a pre-release. To depend on this version, use `rand_chacha = "=0.9.0-alpha.0"` to prevent automatic updates (which can be expected to include breaking changes).
## [0.9.0-beta.0] - 2024-11-25
This is a pre-release. To depend on this version, use `rand_chacha = "=0.9.0-beta.0"` to prevent automatic updates (which can be expected to include breaking changes).

- Made `rand_chacha` propagate the `std` feature down to `rand_core` (#1153)
- Remove usage of `unsafe` in `fn generate` (#1181) then optimise for AVX2 (~4-7%) (#1192)
- The `serde1` feature has been renamed `serde` (#1477)
- Revise crate docs (#1454)
- Rename feature `getrandom` to `os_rng` (#1537)

## [0.3.1] - 2021-06-09
- add getters corresponding to existing setters: `get_seed`, `get_stream` (#1124)
Expand Down
6 changes: 3 additions & 3 deletions rand_chacha/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rand_chacha"
version = "0.9.0-alpha.1"
version = "0.9.0-beta.0"
authors = ["The Rand Project Developers", "The Rust Project Developers", "The CryptoCorrosion Contributors"]
license = "MIT OR Apache-2.0"
readme = "README.md"
Expand All @@ -20,14 +20,14 @@ all-features = true
rustdoc-args = ["--generate-link-to-definition"]

[dependencies]
rand_core = { path = "../rand_core", version = "=0.9.0-alpha.1" }
rand_core = { path = "../rand_core", version = "=0.9.0-beta.0" }
ppv-lite86 = { version = "0.2.14", default-features = false, features = ["simd"] }
serde = { version = "1.0", features = ["derive"], optional = true }

[dev-dependencies]
# Only to test serde
serde_json = "1.0"
rand_core = { path = "../rand_core", version = "=0.9.0-alpha.1", features = ["os_rng"] }
rand_core = { path = "../rand_core", version = "=0.9.0-beta.0", features = ["os_rng"] }

[features]
default = ["std"]
Expand Down
24 changes: 12 additions & 12 deletions rand_core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
- Bump the MSRV to 1.63.0
- The `serde1` feature has been renamed `serde` (#1477)
- Rename feature `getrandom` to `os_rng`

## [0.9.0-alpha.1] - 2024-03-18
## [0.9.0-beta.0] - 2024-11-25
This is a pre-release. To depend on this version, use `rand_core = "=0.9.0-beta.0"` to prevent automatic updates (which can be expected to include breaking changes).

## [0.9.0-alpha.0] - 2024-02-18
This is a pre-release. To depend on this version, use `rand_core = "=0.9.0-alpha.0"` to prevent automatic updates (which can be expected to include breaking changes).
### Compilation options and unsafe
- 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`
- The `serde1` feature has been renamed `serde` (#1477)
- Use `zerocopy` to replace some `unsafe` code (#1349, #1393, #1446, #1502)

- Bump MSRV to 1.60.0 (#1207, #1246, #1269, #1341)
### Other
- Allow `rand_core::impls::fill_via_u*_chunks` to mutate source (#1182)
- Add `fn RngCore::read_adapter` implementing `std::io::Read` (#1267)
- Add `trait CryptoBlockRng: BlockRngCore`; make `trait CryptoRng: RngCore` (#1273)
- Use `zerocopy` to replace some `unsafe` code (#1349, #1393)
- Add fn `RngCore::read_adapter` implementing `std::io::Read` (#1267)
- Add trait `CryptoBlockRng: BlockRngCore`; make `trait CryptoRng: RngCore` (#1273)
- Add traits `TryRngCore`, `TryCryptoRng` (#1424, #1499)
- Add bounds `Clone` and `AsRef` to associated type `SeedableRng::Seed` (#1491)
- Rename feature `getrandom` to `os_rng` (#1537)

## [0.6.4] - 2022-09-15
- Fix unsoundness in `<BlockRng64 as RngCore>::next_u32` (#1160)
Expand Down
2 changes: 1 addition & 1 deletion rand_core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "rand_core"
version = "0.9.0-alpha.1"
version = "0.9.0-beta.0"
authors = ["The Rand Project Developers", "The Rust Project Developers"]
license = "MIT OR Apache-2.0"
readme = "README.md"
Expand Down
Loading

0 comments on commit 3fac49f

Please sign in to comment.