mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-08 01:28:18 +03:00
6bc8f164b0
This commit removes the `rand` crate from the standard library facade as well as the `__rand` module in the standard library. Neither of these were used in any meaningful way in the standard library itself. The only need for randomness in libstd is to initialize the thread-local keys of a `HashMap`, and that unconditionally used `OsRng` defined in the standard library anyway. The cruft of the `rand` crate and the extra `rand` support in the standard library makes libstd slightly more difficult to port to new platforms, namely WebAssembly which doesn't have any randomness at all (without interfacing with JS). The purpose of this commit is to clarify and streamline randomness in libstd, focusing on how it's only required in one location, hashmap seeds. Note that the `rand` crate out of tree has almost always been a drop-in replacement for the `rand` crate in-tree, so any usage (accidental or purposeful) of the crate in-tree should switch to the `rand` crate on crates.io. This then also has the further benefit of avoiding duplication (mostly) between the two crates!
70 lines
1.8 KiB
Rust
70 lines
1.8 KiB
Rust
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
#![deny(warnings)]
|
|
|
|
#![feature(attr_literals)]
|
|
#![feature(box_syntax)]
|
|
#![feature(inclusive_range_syntax)]
|
|
#![feature(collection_placement)]
|
|
#![feature(const_fn)]
|
|
#![feature(drain_filter)]
|
|
#![feature(exact_size_is_empty)]
|
|
#![feature(iterator_step_by)]
|
|
#![feature(pattern)]
|
|
#![feature(placement_in_syntax)]
|
|
#![feature(rand)]
|
|
#![feature(repr_align)]
|
|
#![feature(slice_rotate)]
|
|
#![feature(splice)]
|
|
#![feature(str_escape)]
|
|
#![feature(string_retain)]
|
|
#![feature(unboxed_closures)]
|
|
#![feature(unicode)]
|
|
|
|
extern crate std_unicode;
|
|
extern crate rand;
|
|
|
|
use std::hash::{Hash, Hasher};
|
|
use std::collections::hash_map::DefaultHasher;
|
|
|
|
mod binary_heap;
|
|
mod btree;
|
|
mod cow_str;
|
|
mod fmt;
|
|
mod linked_list;
|
|
mod slice;
|
|
mod str;
|
|
mod string;
|
|
mod vec_deque;
|
|
mod vec;
|
|
|
|
fn hash<T: Hash>(t: &T) -> u64 {
|
|
let mut s = DefaultHasher::new();
|
|
t.hash(&mut s);
|
|
s.finish()
|
|
}
|
|
|
|
// FIXME: Instantiated functions with i128 in the signature is not supported in Emscripten.
|
|
// See https://github.com/kripken/emscripten-fastcomp/issues/169
|
|
#[cfg(not(target_os = "emscripten"))]
|
|
#[test]
|
|
fn test_boxed_hasher() {
|
|
let ordinary_hash = hash(&5u32);
|
|
|
|
let mut hasher_1 = Box::new(DefaultHasher::new());
|
|
5u32.hash(&mut hasher_1);
|
|
assert_eq!(ordinary_hash, hasher_1.finish());
|
|
|
|
let mut hasher_2 = Box::new(DefaultHasher::new()) as Box<Hasher>;
|
|
5u32.hash(&mut hasher_2);
|
|
assert_eq!(ordinary_hash, hasher_2.finish());
|
|
}
|