我想用一些随机数作为基准:
#![feature(test)]
/// benchmarks for different map implementation
extern crate test;
extern crate rand;
use test::Bencher;
use rand::Rng;
#[bench]
fn setup_random_hashmap(b: &mut Bencher) {
let mut val : u32 = 0;
let mut rng = rand::thread_rng();
let mut map = std::collections::HashMap::new();
b.iter(|| { map.insert(rng.gen::<u32>(), val); val += 1; })
}
然而,rustc回来了:
bench.rs:14:16: 14:32 error: unresolved name `rand::thread_rng`
bench.rs:14 let mut rng = rand::thread_rng();
thread_rng在rand
中定义为pub fn
。我错过了什么声明?我正在使用1.2.0-nightly (8f9f2fe97 2015-06-07)
。
答案 0 :(得分:10)
你可以在Rust 1.0中重现这一点(至少从1.13开始):
extern crate rand;
fn main() {
rand::thread_rng();
}
出现同样的错误:
error[E0425]: unresolved name `rand::thread_rng`
--> <anon>:4:5
|
4 | rand::thread_rng();
| ^^^^^^^^^^^^^^^^ unresolved name
要解决此问题,您需要将rand
包添加到您的Cargo.toml:
[dependencies]
rand = "*"
这是因为Rust has an internal, hidden crate also called rand
。当1.0稳定性保证即将来临时,许多这些主要是内部的板条箱被分拆到their own repos和hosted on crates.io。但是,编译器仍然需要这些包的部分,因此它们的存根保留在编译器中,但标记为私有。
我可以使用不同的rng吗?
一个看似有用的聪明主意!对于未来的人来说, only 适用于夜间构建,这意味着您接受可能发生的任何破坏代码!
#![feature(rand)]
extern crate rand;
use rand::Rng;
fn main() {
let mut rng = rand::IsaacRng::new_unseeded();
println!("{}", rng.gen_range(0, 10));
}
最大的缺点是程序的每次运行都会有相同的数字序列,因为它总是会有相同的种子。这可能是基准测试的好处!