Skip to content

Commit 95c5165

Browse files
authored
Add fn rand::make_rng (#1734)
1 parent 146da58 commit 95c5165

File tree

15 files changed

+112
-75
lines changed

15 files changed

+112
-75
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ You may also find the [Upgrade Guide](https://rust-random.github.io/book/update.
2828
- Add fns `IndexedRandom::choose_iter`, `choose_weighted_iter` ([#1632])
2929
- Pub export `Xoshiro128PlusPlus`, `Xoshiro256PlusPlus` prngs ([#1649])
3030
- Pub export `ChaCha8Rng`, `ChaCha12Rng`, `ChaCha20Rng` behind `chacha` feature ([#1659])
31+
- Fn `rand::make_rng() -> R where R: SeedableRng` ([#1734])
3132

3233
### Removals
3334
- Removed `ReseedingRng` ([#1722])
@@ -50,6 +51,7 @@ You may also find the [Upgrade Guide](https://rust-random.github.io/book/update.
5051
[#1717]: https://github.com/rust-random/rand/pull/1717
5152
[#1722]: https://github.com/rust-random/rand/pull/1722
5253
[#1732]: https://github.com/rust-random/rand/pull/1732
54+
[#1734]: https://github.com/rust-random/rand/pull/1734
5355

5456
## [0.9.2] - 2025-07-20
5557

benches/benches/array.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,31 +26,31 @@ pub fn bench(c: &mut Criterion) {
2626

2727
g.bench_function("u16_iter_repeat", |b| {
2828
use core::iter;
29-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
29+
let mut rng: Pcg64Mcg = rand::make_rng();
3030
b.iter(|| {
3131
let v: Vec<u16> = iter::repeat(()).map(|()| rng.random()).take(512).collect();
3232
v
3333
});
3434
});
3535

3636
g.bench_function("u16_sample_iter", |b| {
37-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
37+
let mut rng: Pcg64Mcg = rand::make_rng();
3838
b.iter(|| {
3939
let v: Vec<u16> = StandardUniform.sample_iter(&mut rng).take(512).collect();
4040
v
4141
});
4242
});
4343

4444
g.bench_function("u16_gen_array", |b| {
45-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
45+
let mut rng: Pcg64Mcg = rand::make_rng();
4646
b.iter(|| {
4747
let v: [u16; 512] = rng.random();
4848
v
4949
});
5050
});
5151

5252
g.bench_function("u16_fill", |b| {
53-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
53+
let mut rng: Pcg64Mcg = rand::make_rng();
5454
let mut buf = [0u16; 512];
5555
b.iter(|| {
5656
rng.fill(&mut buf[..]);
@@ -60,31 +60,31 @@ pub fn bench(c: &mut Criterion) {
6060

6161
g.bench_function("u64_iter_repeat", |b| {
6262
use core::iter;
63-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
63+
let mut rng: Pcg64Mcg = rand::make_rng();
6464
b.iter(|| {
6565
let v: Vec<u64> = iter::repeat(()).map(|()| rng.random()).take(128).collect();
6666
v
6767
});
6868
});
6969

7070
g.bench_function("u64_sample_iter", |b| {
71-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
71+
let mut rng: Pcg64Mcg = rand::make_rng();
7272
b.iter(|| {
7373
let v: Vec<u64> = StandardUniform.sample_iter(&mut rng).take(128).collect();
7474
v
7575
});
7676
});
7777

7878
g.bench_function("u64_gen_array", |b| {
79-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
79+
let mut rng: Pcg64Mcg = rand::make_rng();
8080
b.iter(|| {
8181
let v: [u64; 128] = rng.random();
8282
v
8383
});
8484
});
8585

8686
g.bench_function("u64_fill", |b| {
87-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
87+
let mut rng: Pcg64Mcg = rand::make_rng();
8888
let mut buf = [0u64; 128];
8989
b.iter(|| {
9090
rng.fill(&mut buf[..]);

benches/benches/bool.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,41 +27,41 @@ pub fn bench(c: &mut Criterion) {
2727
g.measurement_time(core::time::Duration::from_millis(1000));
2828

2929
g.bench_function("standard", |b| {
30-
let mut rng = Pcg32::from_rng(&mut rand::rng());
30+
let mut rng: Pcg32 = rand::make_rng();
3131
b.iter(|| rng.sample::<bool, _>(rand::distr::StandardUniform))
3232
});
3333

3434
g.bench_function("const", |b| {
35-
let mut rng = Pcg32::from_rng(&mut rand::rng());
35+
let mut rng: Pcg32 = rand::make_rng();
3636
b.iter(|| rng.random_bool(0.18))
3737
});
3838

3939
g.bench_function("var", |b| {
40-
let mut rng = Pcg32::from_rng(&mut rand::rng());
40+
let mut rng: Pcg32 = rand::make_rng();
4141
let p = rng.random();
4242
b.iter(|| rng.random_bool(p))
4343
});
4444

4545
g.bench_function("ratio_const", |b| {
46-
let mut rng = Pcg32::from_rng(&mut rand::rng());
46+
let mut rng: Pcg32 = rand::make_rng();
4747
b.iter(|| rng.random_ratio(2, 3))
4848
});
4949

5050
g.bench_function("ratio_var", |b| {
51-
let mut rng = Pcg32::from_rng(&mut rand::rng());
51+
let mut rng: Pcg32 = rand::make_rng();
5252
let d = rng.random_range(1..=100);
5353
let n = rng.random_range(0..=d);
5454
b.iter(|| rng.random_ratio(n, d));
5555
});
5656

5757
g.bench_function("bernoulli_const", |b| {
58-
let mut rng = Pcg32::from_rng(&mut rand::rng());
58+
let mut rng: Pcg32 = rand::make_rng();
5959
let d = Bernoulli::new(0.18).unwrap();
6060
b.iter(|| rng.sample(d))
6161
});
6262

6363
g.bench_function("bernoulli_var", |b| {
64-
let mut rng = Pcg32::from_rng(&mut rand::rng());
64+
let mut rng: Pcg32 = rand::make_rng();
6565
let p = rng.random();
6666
let d = Bernoulli::new(p).unwrap();
6767
b.iter(|| rng.sample(d))

benches/benches/generators.rs

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ pub fn random_bytes(c: &mut Criterion) {
3838
});
3939
}
4040

41-
bench(&mut g, "pcg32", Pcg32::from_rng(&mut rand::rng()));
42-
bench(&mut g, "pcg64", Pcg64::from_rng(&mut rand::rng()));
43-
bench(&mut g, "pcg64mcg", Pcg64Mcg::from_rng(&mut rand::rng()));
44-
bench(&mut g, "pcg64dxsm", Pcg64Dxsm::from_rng(&mut rand::rng()));
45-
bench(&mut g, "chacha8", ChaCha8Rng::from_rng(&mut rand::rng()));
46-
bench(&mut g, "chacha12", ChaCha12Rng::from_rng(&mut rand::rng()));
47-
bench(&mut g, "chacha20", ChaCha20Rng::from_rng(&mut rand::rng()));
48-
bench(&mut g, "std", StdRng::from_rng(&mut rand::rng()));
49-
bench(&mut g, "small", SmallRng::from_rng(&mut rand::rng()));
41+
bench(&mut g, "pcg32", rand::make_rng::<Pcg32>());
42+
bench(&mut g, "pcg64", rand::make_rng::<Pcg64>());
43+
bench(&mut g, "pcg64mcg", rand::make_rng::<Pcg64Mcg>());
44+
bench(&mut g, "pcg64dxsm", rand::make_rng::<Pcg64Dxsm>());
45+
bench(&mut g, "chacha8", rand::make_rng::<ChaCha8Rng>());
46+
bench(&mut g, "chacha12", rand::make_rng::<ChaCha12Rng>());
47+
bench(&mut g, "chacha20", rand::make_rng::<ChaCha20Rng>());
48+
bench(&mut g, "std", rand::make_rng::<StdRng>());
49+
bench(&mut g, "small", rand::make_rng::<SmallRng>());
5050
bench(&mut g, "os", UnwrapErr(SysRng));
5151
bench(&mut g, "thread", rand::rng());
5252

@@ -66,15 +66,15 @@ pub fn random_u32(c: &mut Criterion) {
6666
});
6767
}
6868

69-
bench(&mut g, "pcg32", Pcg32::from_rng(&mut rand::rng()));
70-
bench(&mut g, "pcg64", Pcg64::from_rng(&mut rand::rng()));
71-
bench(&mut g, "pcg64mcg", Pcg64Mcg::from_rng(&mut rand::rng()));
72-
bench(&mut g, "pcg64dxsm", Pcg64Dxsm::from_rng(&mut rand::rng()));
73-
bench(&mut g, "chacha8", ChaCha8Rng::from_rng(&mut rand::rng()));
74-
bench(&mut g, "chacha12", ChaCha12Rng::from_rng(&mut rand::rng()));
75-
bench(&mut g, "chacha20", ChaCha20Rng::from_rng(&mut rand::rng()));
76-
bench(&mut g, "std", StdRng::from_rng(&mut rand::rng()));
77-
bench(&mut g, "small", SmallRng::from_rng(&mut rand::rng()));
69+
bench(&mut g, "pcg32", rand::make_rng::<Pcg32>());
70+
bench(&mut g, "pcg64", rand::make_rng::<Pcg64>());
71+
bench(&mut g, "pcg64mcg", rand::make_rng::<Pcg64Mcg>());
72+
bench(&mut g, "pcg64dxsm", rand::make_rng::<Pcg64Dxsm>());
73+
bench(&mut g, "chacha8", rand::make_rng::<ChaCha8Rng>());
74+
bench(&mut g, "chacha12", rand::make_rng::<ChaCha12Rng>());
75+
bench(&mut g, "chacha20", rand::make_rng::<ChaCha20Rng>());
76+
bench(&mut g, "std", rand::make_rng::<StdRng>());
77+
bench(&mut g, "small", rand::make_rng::<SmallRng>());
7878
bench(&mut g, "os", UnwrapErr(SysRng));
7979
bench(&mut g, "thread", rand::rng());
8080

@@ -94,15 +94,15 @@ pub fn random_u64(c: &mut Criterion) {
9494
});
9595
}
9696

97-
bench(&mut g, "pcg32", Pcg32::from_rng(&mut rand::rng()));
98-
bench(&mut g, "pcg64", Pcg64::from_rng(&mut rand::rng()));
99-
bench(&mut g, "pcg64mcg", Pcg64Mcg::from_rng(&mut rand::rng()));
100-
bench(&mut g, "pcg64dxsm", Pcg64Dxsm::from_rng(&mut rand::rng()));
101-
bench(&mut g, "chacha8", ChaCha8Rng::from_rng(&mut rand::rng()));
102-
bench(&mut g, "chacha12", ChaCha12Rng::from_rng(&mut rand::rng()));
103-
bench(&mut g, "chacha20", ChaCha20Rng::from_rng(&mut rand::rng()));
104-
bench(&mut g, "std", StdRng::from_rng(&mut rand::rng()));
105-
bench(&mut g, "small", SmallRng::from_rng(&mut rand::rng()));
97+
bench(&mut g, "pcg32", rand::make_rng::<Pcg32>());
98+
bench(&mut g, "pcg64", rand::make_rng::<Pcg64>());
99+
bench(&mut g, "pcg64mcg", rand::make_rng::<Pcg64Mcg>());
100+
bench(&mut g, "pcg64dxsm", rand::make_rng::<Pcg64Dxsm>());
101+
bench(&mut g, "chacha8", rand::make_rng::<ChaCha8Rng>());
102+
bench(&mut g, "chacha12", rand::make_rng::<ChaCha12Rng>());
103+
bench(&mut g, "chacha20", rand::make_rng::<ChaCha20Rng>());
104+
bench(&mut g, "std", rand::make_rng::<StdRng>());
105+
bench(&mut g, "small", rand::make_rng::<SmallRng>());
106106
bench(&mut g, "os", UnwrapErr(SysRng));
107107
bench(&mut g, "thread", rand::rng());
108108

@@ -116,7 +116,7 @@ pub fn init_gen(c: &mut Criterion) {
116116

117117
fn bench<R: SeedableRng>(g: &mut BenchmarkGroup<WallTime>, name: &str) {
118118
g.bench_function(name, |b| {
119-
let mut rng = Pcg32::from_rng(&mut rand::rng());
119+
let mut rng: Pcg32 = rand::make_rng();
120120
b.iter(|| R::from_rng(&mut rng));
121121
});
122122
}
@@ -141,7 +141,7 @@ pub fn init_from_u64(c: &mut Criterion) {
141141

142142
fn bench<R: SeedableRng>(g: &mut BenchmarkGroup<WallTime>, name: &str) {
143143
g.bench_function(name, |b| {
144-
let mut rng = Pcg32::from_rng(&mut rand::rng());
144+
let mut rng: Pcg32 = rand::make_rng();
145145
let seed = rng.random();
146146
b.iter(|| R::seed_from_u64(black_box(seed)));
147147
});
@@ -170,7 +170,7 @@ pub fn init_from_seed(c: &mut Criterion) {
170170
rand::distr::StandardUniform: Distribution<<R as SeedableRng>::Seed>,
171171
{
172172
g.bench_function(name, |b| {
173-
let mut rng = Pcg32::from_rng(&mut rand::rng());
173+
let mut rng: Pcg32 = rand::make_rng();
174174
let seed = rng.random();
175175
b.iter(|| R::from_seed(black_box(seed.clone())));
176176
});

benches/benches/seq_choose.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ criterion_main!(benches);
2020

2121
pub fn bench(c: &mut Criterion) {
2222
c.bench_function("seq_slice_choose_1_of_100", |b| {
23-
let mut rng = Pcg32::from_rng(&mut rand::rng());
23+
let mut rng: Pcg32 = rand::make_rng();
2424
let mut buf = [0i32; 100];
2525
rng.fill(&mut buf);
2626
let x = black_box(&mut buf);
@@ -32,7 +32,7 @@ pub fn bench(c: &mut Criterion) {
3232
for (amount, len) in lens {
3333
let name = format!("seq_slice_sample_{amount}_of_{len}");
3434
c.bench_function(name.as_str(), |b| {
35-
let mut rng = Pcg32::from_rng(&mut rand::rng());
35+
let mut rng: Pcg32 = rand::make_rng();
3636
let mut buf = [0i32; 1000];
3737
rng.fill(&mut buf);
3838
let x = black_box(&buf[..len]);
@@ -56,7 +56,7 @@ pub fn bench(c: &mut Criterion) {
5656
for (amount, len) in lens {
5757
let name = format!("seq_slice_sample_weighted_{amount}_of_{len}");
5858
c.bench_function(name.as_str(), |b| {
59-
let mut rng = Pcg32::from_rng(&mut rand::rng());
59+
let mut rng: Pcg32 = rand::make_rng();
6060
let mut buf = [0i32; 1000];
6161
rng.fill(&mut buf);
6262
let x = black_box(&buf[..len]);
@@ -78,15 +78,15 @@ pub fn bench(c: &mut Criterion) {
7878
}
7979

8080
c.bench_function("seq_iter_sample_10_of_100", |b| {
81-
let mut rng = Pcg32::from_rng(&mut rand::rng());
81+
let mut rng: Pcg32 = rand::make_rng();
8282
let mut buf = [0i32; 100];
8383
rng.fill(&mut buf);
8484
let x = black_box(&buf);
8585
b.iter(|| x.iter().cloned().sample(&mut rng, 10))
8686
});
8787

8888
c.bench_function("seq_iter_sample_fill_10_of_100", |b| {
89-
let mut rng = Pcg32::from_rng(&mut rand::rng());
89+
let mut rng: Pcg32 = rand::make_rng();
9090
let mut buf = [0i32; 100];
9191
rng.fill(&mut buf);
9292
let x = black_box(&buf);

benches/benches/shuffle.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ criterion_main!(benches);
2020

2121
pub fn bench(c: &mut Criterion) {
2222
c.bench_function("seq_shuffle_100", |b| {
23-
let mut rng = Pcg32::from_rng(&mut rand::rng());
23+
let mut rng: Pcg32 = rand::make_rng();
2424
let mut buf = [0i32; 100];
2525
rng.fill(&mut buf);
2626
let x = black_box(&mut buf);

benches/benches/simd.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,47 +30,47 @@ pub fn simd(c: &mut Criterion) {
3030
let mut g = c.benchmark_group("random_simd");
3131

3232
g.bench_function("u128", |b| {
33-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
33+
let mut rng: Pcg64Mcg = rand::make_rng();
3434
b.iter(|| rng.random::<u128>());
3535
});
3636

3737
g.bench_function("m128i", |b| {
38-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
38+
let mut rng: Pcg64Mcg = rand::make_rng();
3939
b.iter(|| rng.random::<core::arch::x86_64::__m128i>());
4040
});
4141

4242
g.bench_function("m256i", |b| {
43-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
43+
let mut rng: Pcg64Mcg = rand::make_rng();
4444
b.iter(|| rng.random::<core::arch::x86_64::__m256i>());
4545
});
4646

4747
g.bench_function("m512i", |b| {
48-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
48+
let mut rng: Pcg64Mcg = rand::make_rng();
4949
b.iter(|| rng.random::<core::arch::x86_64::__m512i>());
5050
});
5151

5252
g.bench_function("u64x2", |b| {
53-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
53+
let mut rng: Pcg64Mcg = rand::make_rng();
5454
b.iter(|| rng.random::<core::simd::u64x2>());
5555
});
5656

5757
g.bench_function("u32x4", |b| {
58-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
58+
let mut rng: Pcg64Mcg = rand::make_rng();
5959
b.iter(|| rng.random::<core::simd::u64x4>());
6060
});
6161

6262
g.bench_function("u32x8", |b| {
63-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
63+
let mut rng: Pcg64Mcg = rand::make_rng();
6464
b.iter(|| rng.random::<core::simd::u8x32>());
6565
});
6666

6767
g.bench_function("u16x8", |b| {
68-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
68+
let mut rng: Pcg64Mcg = rand::make_rng();
6969
b.iter(|| rng.random::<core::simd::u8x32>());
7070
});
7171

7272
g.bench_function("u8x16", |b| {
73-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
73+
let mut rng: Pcg64Mcg = rand::make_rng();
7474
b.iter(|| rng.random::<core::simd::u8x32>());
7575
});
7676
}

benches/benches/standard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ where
2626
{
2727
g.throughput(criterion::Throughput::Bytes(core::mem::size_of::<T>() as u64));
2828
g.bench_function(name, |b| {
29-
let mut rng = Pcg64Mcg::from_rng(&mut rand::rng());
29+
let mut rng: Pcg64Mcg = rand::make_rng();
3030

3131
b.iter(|| rng.sample::<T, _>(D::default()));
3232
});

benches/benches/uniform.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ macro_rules! sample {
5959

6060
($R:ty, $T:ty, $U:ty, $len:tt, $g:expr) => {
6161
$g.bench_function(BenchmarkId::new(stringify!($R), "single"), |b| {
62-
let mut rng = <$R>::from_rng(&mut rand::rng());
62+
let mut rng: $R = rand::make_rng();
6363
let range = sample!(@range $T, $U, $len, rng);
6464
let low = sample!(@MIN $T, $len);
6565
let high = sample!(@wrapping_add low, range, $len);
@@ -68,7 +68,7 @@ macro_rules! sample {
6868
});
6969

7070
$g.bench_function(BenchmarkId::new(stringify!($R), "distr"), |b| {
71-
let mut rng = <$R>::from_rng(&mut rand::rng());
71+
let mut rng: $R = rand::make_rng();
7272
let range = sample!(@range $T, $U, $len, rng);
7373
let low = sample!(@MIN $T, $len);
7474
let high = sample!(@wrapping_add low, range, $len);

benches/benches/uniform_float.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const N_RESAMPLES: usize = 10_000;
2727
macro_rules! single_random {
2828
($R:ty, $T:ty, $g:expr) => {
2929
$g.bench_function(BenchmarkId::new(stringify!($T), stringify!($R)), |b| {
30-
let mut rng = <$R>::from_rng(&mut rand::rng());
30+
let mut rng: $R = rand::make_rng();
3131
let (mut low, mut high);
3232
loop {
3333
low = <$T>::from_bits(rng.random());
@@ -63,7 +63,7 @@ fn single_random(c: &mut Criterion) {
6363
macro_rules! distr_random {
6464
($R:ty, $T:ty, $g:expr) => {
6565
$g.bench_function(BenchmarkId::new(stringify!($T), stringify!($R)), |b| {
66-
let mut rng = <$R>::from_rng(&mut rand::rng());
66+
let mut rng: $R = rand::make_rng();
6767
let dist = loop {
6868
let low = <$T>::from_bits(rng.random());
6969
let high = <$T>::from_bits(rng.random());

0 commit comments

Comments
 (0)