mirror of
https://github.com/salsa-rs/salsa.git
synced 2025-01-22 21:05:11 +00:00
Switch from rand to oorandom
The primary motivation here is reducing dependencies. rand has quite a few of them, and many come from `getrandom` crate (bindings to system APIs to get true randomness). Some of `getrandom` crates don't have Apache 2.0 OR MIT license, and it probably doesn't make sense to make salsa's licensing situation more complicated for feature we don't even use. There's a number of small&fast random crates there: * randomize * oorandom * fastrand I've picked oorandom because it was the simplest & smallest (doesn't have a thread_local RNG, for example).
This commit is contained in:
parent
380c4c1dc8
commit
b460db700a
2 changed files with 7 additions and 9 deletions
|
@ -16,7 +16,7 @@ log = "0.4.5"
|
||||||
parking_lot = "0.11.0"
|
parking_lot = "0.11.0"
|
||||||
rustc-hash = "1.0"
|
rustc-hash = "1.0"
|
||||||
smallvec = "1.0.0"
|
smallvec = "1.0.0"
|
||||||
rand = { version = "0.7", features = [ "small_rng" ], default-features = false }
|
oorandom = "11"
|
||||||
|
|
||||||
salsa-macros = { version = "0.15.0", path = "components/salsa-macros" }
|
salsa-macros = { version = "0.15.0", path = "components/salsa-macros" }
|
||||||
|
|
||||||
|
|
14
src/lru.rs
14
src/lru.rs
|
@ -1,7 +1,5 @@
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use rand::rngs::SmallRng;
|
use oorandom::Rand64;
|
||||||
use rand::Rng;
|
|
||||||
use rand::SeedableRng;
|
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::sync::atomic::AtomicUsize;
|
use std::sync::atomic::AtomicUsize;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
|
@ -33,7 +31,7 @@ struct LruData<Node> {
|
||||||
end_red_zone: usize,
|
end_red_zone: usize,
|
||||||
end_yellow_zone: usize,
|
end_yellow_zone: usize,
|
||||||
end_green_zone: usize,
|
end_green_zone: usize,
|
||||||
rng: SmallRng,
|
rng: Rand64,
|
||||||
entries: Vec<Arc<Node>>,
|
entries: Vec<Arc<Node>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +139,7 @@ where
|
||||||
Self::with_rng(rng_with_seed(seed_str))
|
Self::with_rng(rng_with_seed(seed_str))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn with_rng(rng: SmallRng) -> Self {
|
fn with_rng(rng: Rand64) -> Self {
|
||||||
LruData {
|
LruData {
|
||||||
end_yellow_zone: 0,
|
end_yellow_zone: 0,
|
||||||
end_green_zone: 0,
|
end_green_zone: 0,
|
||||||
|
@ -287,7 +285,7 @@ where
|
||||||
|
|
||||||
fn pick_index(&mut self, zone: std::ops::Range<usize>) -> usize {
|
fn pick_index(&mut self, zone: std::ops::Range<usize>) -> usize {
|
||||||
let end_index = std::cmp::min(zone.end, self.entries.len());
|
let end_index = std::cmp::min(zone.end, self.entries.len());
|
||||||
self.rng.gen_range(zone.start, end_index)
|
self.rng.rand_range(zone.start as u64 .. end_index as u64) as usize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,12 +315,12 @@ impl LruIndex {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn rng_with_seed(seed_str: &str) -> SmallRng {
|
fn rng_with_seed(seed_str: &str) -> Rand64 {
|
||||||
let mut seed: [u8; 16] = [0; 16];
|
let mut seed: [u8; 16] = [0; 16];
|
||||||
for (i, &b) in seed_str.as_bytes().iter().take(16).enumerate() {
|
for (i, &b) in seed_str.as_bytes().iter().take(16).enumerate() {
|
||||||
seed[i] = b;
|
seed[i] = b;
|
||||||
}
|
}
|
||||||
SmallRng::from_seed(seed)
|
Rand64::new(u128::from_le_bytes(seed))
|
||||||
}
|
}
|
||||||
|
|
||||||
// A note on ordering:
|
// A note on ordering:
|
||||||
|
|
Loading…
Reference in a new issue