Skip to content

Commit c1b98aa

Browse files
committed
Remove weak_rng
Documentation for the function claims it will return the fastest algorithm available in Rust, but since its return type is hardcoded to XorShiftRng, it would be an impossible [breaking-change], when, or if, a faster Rng is added to Rust. [breaking-change], since this removes public API. Uses of `weak_rng` function can be replaced with `random::<XorShiftRng>()` to achieve almost the same behaviour. Fixes #20484
1 parent 0430a43 commit c1b98aa

File tree

8 files changed

+47
-62
lines changed

8 files changed

+47
-62
lines changed

src/libcollections/bench.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
use prelude::*;
1212
use std::rand;
13-
use std::rand::Rng;
13+
use std::rand::{Rng, XorShiftRng};
1414
use test::{Bencher, black_box};
1515

1616
pub fn insert_rand_n<M, I, R>(n: uint,
@@ -22,7 +22,7 @@ pub fn insert_rand_n<M, I, R>(n: uint,
2222
R: FnMut(&mut M, uint),
2323
{
2424
// setup
25-
let mut rng = rand::weak_rng();
25+
let mut rng: XorShiftRng = rand::random();
2626

2727
for _ in range(0, n) {
2828
insert(map, rng.gen::<uint>() % n);
@@ -69,7 +69,7 @@ pub fn find_rand_n<M, T, I, F>(n: uint,
6969
F: FnMut(&M, uint) -> T,
7070
{
7171
// setup
72-
let mut rng = rand::weak_rng();
72+
let mut rng: XorShiftRng = rand::random();
7373
let mut keys = range(0, n).map(|_| rng.gen::<uint>() % n)
7474
.collect::<Vec<_>>();
7575

src/libcollections/btree/map.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1827,7 +1827,7 @@ mod test {
18271827
#[cfg(test)]
18281828
mod bench {
18291829
use prelude::*;
1830-
use std::rand::{weak_rng, Rng};
1830+
use std::rand::{random, XorShiftRng, Rng};
18311831
use test::{Bencher, black_box};
18321832

18331833
use super::BTreeMap;
@@ -1902,7 +1902,7 @@ mod bench {
19021902

19031903
fn bench_iter(b: &mut Bencher, size: uint) {
19041904
let mut map = BTreeMap::<uint, uint>::new();
1905-
let mut rng = weak_rng();
1905+
let mut rng: XorShiftRng = random();
19061906

19071907
for _ in range(0, size) {
19081908
map.insert(rng.gen(), rng.gen());

src/libcollections/slice.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2728,7 +2728,7 @@ mod bench {
27282728
use core::mem;
27292729
use core::ptr;
27302730
use core::iter::repeat;
2731-
use std::rand::{weak_rng, Rng};
2731+
use std::rand::{random, XorShiftRng, Rng};
27322732
use test::{Bencher, black_box};
27332733

27342734
#[bench]
@@ -2896,7 +2896,7 @@ mod bench {
28962896

28972897
#[bench]
28982898
fn random_inserts(b: &mut Bencher) {
2899-
let mut rng = weak_rng();
2899+
let mut rng: XorShiftRng = random();
29002900
b.iter(|| {
29012901
let mut v = repeat((0u, 0u)).take(30).collect::<Vec<_>>();
29022902
for _ in range(0u, 100) {
@@ -2908,7 +2908,7 @@ mod bench {
29082908
}
29092909
#[bench]
29102910
fn random_removes(b: &mut Bencher) {
2911-
let mut rng = weak_rng();
2911+
let mut rng: XorShiftRng = random();
29122912
b.iter(|| {
29132913
let mut v = repeat((0u, 0u)).take(130).collect::<Vec<_>>();
29142914
for _ in range(0u, 100) {
@@ -2920,7 +2920,7 @@ mod bench {
29202920

29212921
#[bench]
29222922
fn sort_random_small(b: &mut Bencher) {
2923-
let mut rng = weak_rng();
2923+
let mut rng: XorShiftRng = random();
29242924
b.iter(|| {
29252925
let mut v = rng.gen_iter::<u64>().take(5).collect::<Vec<u64>>();
29262926
v.as_mut_slice().sort();
@@ -2930,7 +2930,7 @@ mod bench {
29302930

29312931
#[bench]
29322932
fn sort_random_medium(b: &mut Bencher) {
2933-
let mut rng = weak_rng();
2933+
let mut rng: XorShiftRng = random();
29342934
b.iter(|| {
29352935
let mut v = rng.gen_iter::<u64>().take(100).collect::<Vec<u64>>();
29362936
v.as_mut_slice().sort();
@@ -2940,7 +2940,7 @@ mod bench {
29402940

29412941
#[bench]
29422942
fn sort_random_large(b: &mut Bencher) {
2943-
let mut rng = weak_rng();
2943+
let mut rng: XorShiftRng = random();
29442944
b.iter(|| {
29452945
let mut v = rng.gen_iter::<u64>().take(10000).collect::<Vec<u64>>();
29462946
v.as_mut_slice().sort();
@@ -2961,7 +2961,7 @@ mod bench {
29612961

29622962
#[bench]
29632963
fn sort_big_random_small(b: &mut Bencher) {
2964-
let mut rng = weak_rng();
2964+
let mut rng: XorShiftRng = random();
29652965
b.iter(|| {
29662966
let mut v = rng.gen_iter::<BigSortable>().take(5)
29672967
.collect::<Vec<BigSortable>>();
@@ -2972,7 +2972,7 @@ mod bench {
29722972

29732973
#[bench]
29742974
fn sort_big_random_medium(b: &mut Bencher) {
2975-
let mut rng = weak_rng();
2975+
let mut rng: XorShiftRng = random();
29762976
b.iter(|| {
29772977
let mut v = rng.gen_iter::<BigSortable>().take(100)
29782978
.collect::<Vec<BigSortable>>();
@@ -2983,7 +2983,7 @@ mod bench {
29832983

29842984
#[bench]
29852985
fn sort_big_random_large(b: &mut Bencher) {
2986-
let mut rng = weak_rng();
2986+
let mut rng: XorShiftRng = random();
29872987
b.iter(|| {
29882988
let mut v = rng.gen_iter::<BigSortable>().take(10000)
29892989
.collect::<Vec<BigSortable>>();

src/libcoretest/fmt/num.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -169,85 +169,86 @@ fn test_radix_base_too_large() {
169169
mod u32 {
170170
use test::Bencher;
171171
use core::fmt::radix;
172-
use std::rand::{weak_rng, Rng};
172+
use std::rand::{random, XorShiftRng, Rng};
173173
use std::io::util::NullWriter;
174174

175175
#[bench]
176176
fn format_bin(b: &mut Bencher) {
177-
let mut rng = weak_rng();
177+
let mut rng: XorShiftRng = random();
178178
b.iter(|| { write!(&mut NullWriter, "{:b}", rng.gen::<u32>()) })
179179
}
180180

181181
#[bench]
182182
fn format_oct(b: &mut Bencher) {
183-
let mut rng = weak_rng();
183+
let mut rng: XorShiftRng = random();
184184
b.iter(|| { write!(&mut NullWriter, "{:o}", rng.gen::<u32>()) })
185185
}
186186

187187
#[bench]
188188
fn format_dec(b: &mut Bencher) {
189-
let mut rng = weak_rng();
189+
let mut rng: XorShiftRng = random();
190190
b.iter(|| { write!(&mut NullWriter, "{}", rng.gen::<u32>()) })
191191
}
192192

193193
#[bench]
194194
fn format_hex(b: &mut Bencher) {
195-
let mut rng = weak_rng();
195+
let mut rng: XorShiftRng = random();
196196
b.iter(|| { write!(&mut NullWriter, "{:x}", rng.gen::<u32>()) })
197197
}
198198

199199
#[bench]
200200
fn format_show(b: &mut Bencher) {
201-
let mut rng = weak_rng();
201+
let mut rng: XorShiftRng = random();
202202
b.iter(|| { write!(&mut NullWriter, "{:?}", rng.gen::<u32>()) })
203203
}
204204

205205
#[bench]
206206
fn format_base_36(b: &mut Bencher) {
207207
let mut rng = weak_rng();
208+
let mut rng: XorShiftRng = random();
208209
b.iter(|| { write!(&mut NullWriter, "{}", radix(rng.gen::<u32>(), 36)) })
209210
}
210211
}
211212

212213
mod i32 {
213214
use test::Bencher;
214215
use core::fmt::radix;
215-
use std::rand::{weak_rng, Rng};
216+
use std::rand::{random, XorShiftRng, Rng};
216217
use std::io::util::NullWriter;
217218

218219
#[bench]
219220
fn format_bin(b: &mut Bencher) {
220-
let mut rng = weak_rng();
221+
let mut rng: XorShiftRng = random();
221222
b.iter(|| { write!(&mut NullWriter, "{:b}", rng.gen::<i32>()) })
222223
}
223224

224225
#[bench]
225226
fn format_oct(b: &mut Bencher) {
226-
let mut rng = weak_rng();
227+
let mut rng: XorShiftRng = random();
227228
b.iter(|| { write!(&mut NullWriter, "{:o}", rng.gen::<i32>()) })
228229
}
229230

230231
#[bench]
231232
fn format_dec(b: &mut Bencher) {
232-
let mut rng = weak_rng();
233+
let mut rng: XorShiftRng = random();
233234
b.iter(|| { write!(&mut NullWriter, "{}", rng.gen::<i32>()) })
234235
}
235236

236237
#[bench]
237238
fn format_hex(b: &mut Bencher) {
238-
let mut rng = weak_rng();
239+
let mut rng: XorShiftRng = random();
239240
b.iter(|| { write!(&mut NullWriter, "{:x}", rng.gen::<i32>()) })
240241
}
241242

242243
#[bench]
243244
fn format_show(b: &mut Bencher) {
244-
let mut rng = weak_rng();
245+
let mut rng: XorShiftRng = random();
245246
b.iter(|| { write!(&mut NullWriter, "{:?}", rng.gen::<i32>()) })
246247
}
247248

248249
#[bench]
249250
fn format_base_36(b: &mut Bencher) {
250-
let mut rng = weak_rng();
251+
let mut rng: XorShiftRng = random();
251252
b.iter(|| { write!(&mut NullWriter, "{}", radix(rng.gen::<i32>(), 36)) })
252253
}
253254
}

src/librand/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,6 @@ mod test {
520520
}
521521

522522
pub fn weak_rng() -> MyRng<rand::XorShiftRng> {
523-
MyRng { inner: rand::weak_rng() }
523+
MyRng { inner: rand::random() }
524524
}
525525
}

src/libstd/collections/hash/map.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,7 +1603,7 @@ mod test_map {
16031603
use super::Entry::{Occupied, Vacant};
16041604
use iter::{range_inclusive, range_step_inclusive, repeat};
16051605
use cell::RefCell;
1606-
use rand::{weak_rng, Rng};
1606+
use rand::{random, XorShiftRng, Rng};
16071607

16081608
#[test]
16091609
fn test_create_capacity_zero() {
@@ -2261,7 +2261,7 @@ mod test_map {
22612261
}
22622262

22632263
let mut m = HashMap::new();
2264-
let mut rng = weak_rng();
2264+
let mut rng: XorShiftRng = random();
22652265

22662266
// Populate the map with some items.
22672267
for _ in range(0u, 50) {

src/libstd/num/strconv.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ mod bench {
463463

464464
mod uint {
465465
use super::test::Bencher;
466-
use rand::{weak_rng, Rng};
466+
use rand::{random, XorShiftRng, Rng};
467467
use std::fmt;
468468

469469
#[inline]
@@ -473,38 +473,38 @@ mod bench {
473473

474474
#[bench]
475475
fn to_str_bin(b: &mut Bencher) {
476-
let mut rng = weak_rng();
476+
let mut rng: XorShiftRng = random();
477477
b.iter(|| { to_string(rng.gen::<uint>(), 2); })
478478
}
479479

480480
#[bench]
481481
fn to_str_oct(b: &mut Bencher) {
482-
let mut rng = weak_rng();
482+
let mut rng: XorShiftRng = random();
483483
b.iter(|| { to_string(rng.gen::<uint>(), 8); })
484484
}
485485

486486
#[bench]
487487
fn to_str_dec(b: &mut Bencher) {
488-
let mut rng = weak_rng();
488+
let mut rng: XorShiftRng = random();
489489
b.iter(|| { to_string(rng.gen::<uint>(), 10); })
490490
}
491491

492492
#[bench]
493493
fn to_str_hex(b: &mut Bencher) {
494-
let mut rng = weak_rng();
494+
let mut rng: XorShiftRng = random();
495495
b.iter(|| { to_string(rng.gen::<uint>(), 16); })
496496
}
497497

498498
#[bench]
499499
fn to_str_base_36(b: &mut Bencher) {
500-
let mut rng = weak_rng();
500+
let mut rng: XorShiftRng = random();
501501
b.iter(|| { to_string(rng.gen::<uint>(), 36); })
502502
}
503503
}
504504

505505
mod int {
506506
use super::test::Bencher;
507-
use rand::{weak_rng, Rng};
507+
use rand::{random, XorShiftRng, Rng};
508508
use std::fmt;
509509

510510
#[inline]
@@ -514,43 +514,43 @@ mod bench {
514514

515515
#[bench]
516516
fn to_str_bin(b: &mut Bencher) {
517-
let mut rng = weak_rng();
517+
let mut rng: XorShiftRng = random();
518518
b.iter(|| { to_string(rng.gen::<int>(), 2); })
519519
}
520520

521521
#[bench]
522522
fn to_str_oct(b: &mut Bencher) {
523-
let mut rng = weak_rng();
523+
let mut rng: XorShiftRng = random();
524524
b.iter(|| { to_string(rng.gen::<int>(), 8); })
525525
}
526526

527527
#[bench]
528528
fn to_str_dec(b: &mut Bencher) {
529-
let mut rng = weak_rng();
529+
let mut rng: XorShiftRng = random();
530530
b.iter(|| { to_string(rng.gen::<int>(), 10); })
531531
}
532532

533533
#[bench]
534534
fn to_str_hex(b: &mut Bencher) {
535-
let mut rng = weak_rng();
535+
let mut rng: XorShiftRng = random();
536536
b.iter(|| { to_string(rng.gen::<int>(), 16); })
537537
}
538538

539539
#[bench]
540540
fn to_str_base_36(b: &mut Bencher) {
541-
let mut rng = weak_rng();
541+
let mut rng: XorShiftRng = random();
542542
b.iter(|| { to_string(rng.gen::<int>(), 36); })
543543
}
544544
}
545545

546546
mod f64 {
547547
use super::test::Bencher;
548-
use rand::{weak_rng, Rng};
548+
use rand::{random, XorShiftRng, Rng};
549549
use f64;
550550

551551
#[bench]
552552
fn float_to_string(b: &mut Bencher) {
553-
let mut rng = weak_rng();
553+
let mut rng: XorShiftRng = random();
554554
b.iter(|| { f64::to_string(rng.gen()); })
555555
}
556556
}

src/libstd/rand/mod.rs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -291,22 +291,6 @@ impl<'a> SeedableRng<&'a [uint]> for StdRng {
291291
}
292292
}
293293

294-
/// Create a weak random number generator with a default algorithm and seed.
295-
///
296-
/// It returns the fastest `Rng` algorithm currently available in Rust without
297-
/// consideration for cryptography or security. If you require a specifically
298-
/// seeded `Rng` for consistency over time you should pick one algorithm and
299-
/// create the `Rng` yourself.
300-
///
301-
/// This will read randomness from the operating system to seed the
302-
/// generator.
303-
pub fn weak_rng() -> XorShiftRng {
304-
match OsRng::new() {
305-
Ok(mut r) => r.gen(),
306-
Err(e) => panic!("weak_rng: failed to create seeded RNG: {:?}", e)
307-
}
308-
}
309-
310294
/// Controls how the thread-local RNG is reseeded.
311295
struct ThreadRngReseeder;
312296

@@ -645,7 +629,7 @@ mod bench {
645629

646630
use self::test::Bencher;
647631
use super::{XorShiftRng, StdRng, IsaacRng, Isaac64Rng, Rng, RAND_BENCH_N};
648-
use super::{OsRng, weak_rng};
632+
use super::{OsRng, random};
649633
use mem::size_of;
650634

651635
#[bench]
@@ -694,7 +678,7 @@ mod bench {
694678

695679
#[bench]
696680
fn rand_shuffle_100(b: &mut Bencher) {
697-
let mut rng = weak_rng();
681+
let mut rng: XorShiftRng = random();
698682
let x : &mut[uint] = &mut [1; 100];
699683
b.iter(|| {
700684
rng.shuffle(x);

0 commit comments

Comments
 (0)