Skip to content

Commit 38f7be6

Browse files
authored
Merge branch 'master' into rand_os
2 parents abecc1d + 5a67e32 commit 38f7be6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+2121
-150
lines changed

.travis.yml

+6-4
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ matrix:
7171
- cargo test --manifest-path rand_isaac/Cargo.toml --features=serde1
7272
# TODO: cannot test rand_pcg due to explicit dependency on i128
7373
- cargo test --manifest-path rand_xorshift/Cargo.toml --features=serde1
74+
- cargo test --manifest-path rand_xoshiro/Cargo.toml
7475
- cargo test --manifest-path rand_chacha/Cargo.toml
7576
- cargo test --manifest-path rand_hc/Cargo.toml
7677
- cargo test --manifest-path rand_os/Cargo.toml
@@ -91,6 +92,7 @@ matrix:
9192
- cargo test --manifest-path rand_isaac/Cargo.toml --features=serde1
9293
- cargo test --manifest-path rand_pcg/Cargo.toml --features=serde1
9394
- cargo test --manifest-path rand_xorshift/Cargo.toml --features=serde1
95+
- cargo test --manifest-path rand_xoshiro/Cargo.toml
9496
- cargo test --manifest-path rand_chacha/Cargo.toml
9597
- cargo test --manifest-path rand_hc/Cargo.toml
9698
- cargo test --manifest-path rand_os/Cargo.toml
@@ -117,6 +119,7 @@ matrix:
117119
- cargo test --manifest-path rand_isaac/Cargo.toml --features=serde1
118120
- cargo test --manifest-path rand_pcg/Cargo.toml --features=serde1
119121
- cargo test --manifest-path rand_xorshift/Cargo.toml --features=serde1
122+
- cargo test --manifest-path rand_xoshiro/Cargo.toml
120123
- cargo test --manifest-path rand_chacha/Cargo.toml
121124
- cargo test --manifest-path rand_hc/Cargo.toml
122125
- cargo test --manifest-path rand_os/Cargo.toml
@@ -132,10 +135,8 @@ matrix:
132135
install:
133136
- rustup target add wasm32-unknown-unknown
134137
- rustup target add wasm32-unknown-emscripten
135-
# cargo-web takes ±10 min. to install, and cargo and cargo-update offer
136-
# no reliable update-or-install command. We ignore updating for now
137-
# (just drop the Travis' caches when necessary)
138-
- cargo --list | egrep "^\s*web$" -q || cargo install cargo-web
138+
- nvm install 9
139+
- ./utils/ci/install_cargo_web.sh
139140
- cargo web -V
140141
addons:
141142
chrome: stable
@@ -201,6 +202,7 @@ script:
201202
- cargo test --manifest-path rand_isaac/Cargo.toml --features=serde1
202203
- cargo test --manifest-path rand_pcg/Cargo.toml --features=serde1
203204
- cargo test --manifest-path rand_xorshift/Cargo.toml --features=serde1
205+
- cargo test --manifest-path rand_xoshiro/Cargo.toml
204206
- cargo test --manifest-path rand_chacha/Cargo.toml
205207
- cargo test --manifest-path rand_hc/Cargo.toml
206208
- cargo test --manifest-path rand_os/Cargo.toml

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ A [separate changelog is kept for rand_core](rand_core/CHANGELOG.md).
99
You may also find the [Upgrade Guide](https://rust-random.github.io/book/update.html) useful.
1010

1111

12+
## [0.6.1] - 2018-11-22
13+
- Support sampling `Duration` also for `no_std` (only since Rust 1.25) (#649)
14+
- Disable default features of `libc` (#647)
15+
1216
## [0.6.0] - 2018-11-14
1317

1418
### Project organisation

Cargo.toml

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[package]
22
name = "rand"
3-
version = "0.6.0" # NB: When modifying, also modify html_root_url in lib.rs
3+
version = "0.6.1"
44
authors = ["The Rand Project Developers", "The Rust Project Developers"]
55
license = "MIT/Apache-2.0"
66
readme = "README.md"
77
repository = "https://github.com/rust-random/rand"
8-
documentation = "https://docs.rs/rand"
8+
documentation = "https://rust-random.github.io/rand"
99
homepage = "https://crates.io/crates/rand"
1010
description = """
1111
Random number generators and other randomness functionality.
@@ -40,6 +40,7 @@ rand_isaac = { path = "rand_isaac", version = "0.1" }
4040
rand_chacha = { path = "rand_chacha", version = "0.1" }
4141
rand_hc = { path = "rand_hc", version = "0.1" }
4242
rand_xorshift = { path = "rand_xorshift", version = "0.1" }
43+
rand_xoshiro = { path = "rand_xoshiro", version = "0.1" }
4344
log = { version = "0.4", optional = true }
4445

4546
[dependencies.packed_simd]
@@ -61,7 +62,7 @@ winapi = { version = "0.3", features = ["minwindef", "ntsecapi", "profileapi", "
6162
average = "0.9.2"
6263

6364
[build-dependencies]
64-
rustc_version = "0.2"
65+
autocfg = "0.1"
6566

6667
[package.metadata.docs.rs]
6768
all-features = true

README.md

+9-8
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
[![Build Status](https://travis-ci.org/rust-random/rand.svg?branch=master)](https://travis-ci.org/rust-random/rand)
44
[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-random/rand?svg=true)](https://ci.appveyor.com/project/rust-random/rand)
5-
[![Latest version](https://img.shields.io/crates/v/rand.svg)](https://crates.io/crates/rand)
6-
[![Documentation](https://docs.rs/rand/badge.svg)](https://docs.rs/rand)
7-
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-yellow.svg)](https://github.com/rust-random/rand#rust-version-requirements)
8-
[![License](https://img.shields.io/crates/l/rand.svg)](https://github.com/rust-random/rand#license)
5+
[![Crate](https://img.shields.io/crates/v/rand.svg)](https://crates.io/crates/rand)
6+
[![Book](https://img.shields.io/badge/book-master-yellow.svg)](https://rust-random.github.io/book/)
7+
[![API](https://img.shields.io/badge/api-master-yellow.svg)](https://rust-random.github.io/rand)
8+
[![API](https://docs.rs/rand/badge.svg)](https://docs.rs/rand)
9+
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-lightgray.svg)](https://github.com/rust-random/rand#rust-version-requirements)
910

1011
A Rust library for random number generation.
1112

@@ -18,9 +19,9 @@ implementations should prefer to use `rand_core` while most other users should
1819
depend on `rand`.
1920

2021
Documentation:
21-
- [The Rust Rand Book](https://rust-random.github.io/book/)
22-
- [API reference for the latest release](https://docs.rs/rand/)
23-
- [API reference for the master branch](https://rust-random.github.io/rand/)
22+
- [The Rust Rand Book](https://rust-random.github.io/book)
23+
- [API reference (master)](https://rust-random.github.io/rand)
24+
- [API reference (docs.rs)](https://docs.rs/rand)
2425

2526

2627
## Usage
@@ -32,7 +33,7 @@ Add this to your `Cargo.toml`:
3233
rand = "0.6"
3334
```
3435

35-
To get started using Rand, see [The Book](https://rust-random.github.io/book/).
36+
To get started using Rand, see [The Book](https://rust-random.github.io/book).
3637

3738

3839
## Versions

appveyor.yml

+2
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,15 @@ test_script:
4141
- cargo test --package rand_core --no-default-features --features=alloc
4242
- cargo test --package rand_isaac --features=serde1
4343
- cargo test --package rand_xorshift --features=serde1
44+
- cargo test --package rand_xoshiro
4445
- cargo test --package rand_chacha
4546
- cargo test --package rand_hc
4647
- cargo test --manifest-path rand_core/Cargo.toml
4748
- cargo test --manifest-path rand_core/Cargo.toml --no-default-features --features=alloc
4849
- cargo test --manifest-path rand_isaac/Cargo.toml --features=serde1
4950
- cargo test --manifest-path rand_pcg/Cargo.toml --features=serde1
5051
- cargo test --manifest-path rand_xorshift/Cargo.toml --features=serde1
52+
- cargo test --manifest-path rand_xoshiro/Cargo.toml
5153
- cargo test --manifest-path rand_chacha/Cargo.toml
5254
- cargo test --manifest-path rand_hc/Cargo.toml
5355
- cargo test --manifest-path rand_os/Cargo.toml

benches/distributions.rs

+22
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,26 @@ macro_rules! distr {
101101
}
102102
}
103103

104+
macro_rules! distr_arr {
105+
($fnn:ident, $ty:ty, $distr:expr) => {
106+
#[bench]
107+
fn $fnn(b: &mut Bencher) {
108+
let mut rng = SmallRng::from_entropy();
109+
let distr = $distr;
110+
111+
b.iter(|| {
112+
let mut accum = 0u32;
113+
for _ in 0..::RAND_BENCH_N {
114+
let x: $ty = distr.sample(&mut rng);
115+
accum = accum.wrapping_add(x[0] as u32);
116+
}
117+
accum
118+
});
119+
b.bytes = size_of::<$ty>() as u64 * ::RAND_BENCH_N;
120+
}
121+
}
122+
}
123+
104124
// uniform
105125
distr_int!(distr_uniform_i8, i8, Uniform::new(20i8, 100));
106126
distr_int!(distr_uniform_i16, i16, Uniform::new(-500i16, 2000));
@@ -158,6 +178,8 @@ distr_float!(distr_cauchy, f64, Cauchy::new(4.2, 6.9));
158178
distr_int!(distr_binomial, u64, Binomial::new(20, 0.7));
159179
distr_int!(distr_poisson, u64, Poisson::new(4.0));
160180
distr!(distr_bernoulli, bool, Bernoulli::new(0.18));
181+
distr_arr!(distr_circle, [f64; 2], UnitCircle::new());
182+
distr_arr!(distr_sphere_surface, [f64; 3], UnitSphereSurface::new());
161183

162184
// Weighted
163185
distr_int!(distr_weighted_i8, usize, WeightedIndex::new(&[1i8, 2, 3, 4, 12, 0, 2, 1]).unwrap());

benches/generators.rs

+40
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ extern crate rand_chacha;
1515
extern crate rand_hc;
1616
extern crate rand_pcg;
1717
extern crate rand_xorshift;
18+
extern crate rand_xoshiro;
1819

1920
const RAND_BENCH_N: u64 = 1000;
2021
const BYTES_LEN: usize = 1024;
@@ -30,6 +31,9 @@ use rand_chacha::ChaChaRng;
3031
use rand_hc::{Hc128Rng, Hc128Core};
3132
use rand_pcg::{Lcg64Xsh32, Mcg128Xsl64};
3233
use rand_xorshift::XorShiftRng;
34+
use rand_xoshiro::{Xoshiro256StarStar, Xoshiro256Plus, Xoshiro128StarStar,
35+
Xoshiro128Plus, Xoroshiro128StarStar, Xoroshiro128Plus, SplitMix64,
36+
Xoroshiro64StarStar, Xoroshiro64Star};
3337

3438
macro_rules! gen_bytes {
3539
($fnn:ident, $gen:expr) => {
@@ -49,6 +53,15 @@ macro_rules! gen_bytes {
4953
}
5054

5155
gen_bytes!(gen_bytes_xorshift, XorShiftRng::from_entropy());
56+
gen_bytes!(gen_bytes_xoshiro256starstar, Xoshiro256StarStar::from_entropy());
57+
gen_bytes!(gen_bytes_xoshiro256plus, Xoshiro256Plus::from_entropy());
58+
gen_bytes!(gen_bytes_xoshiro128starstar, Xoshiro128StarStar::from_entropy());
59+
gen_bytes!(gen_bytes_xoshiro128plus, Xoshiro128Plus::from_entropy());
60+
gen_bytes!(gen_bytes_xoroshiro128starstar, Xoroshiro128StarStar::from_entropy());
61+
gen_bytes!(gen_bytes_xoroshiro128plus, Xoroshiro128Plus::from_entropy());
62+
gen_bytes!(gen_bytes_xoroshiro64starstar, Xoroshiro64StarStar::from_entropy());
63+
gen_bytes!(gen_bytes_xoroshiro64star, Xoroshiro64Star::from_entropy());
64+
gen_bytes!(gen_bytes_splitmix64, SplitMix64::from_entropy());
5265
gen_bytes!(gen_bytes_lcg64_xsh32, Lcg64Xsh32::from_entropy());
5366
gen_bytes!(gen_bytes_mcg128_xsh64, Mcg128Xsl64::from_entropy());
5467
gen_bytes!(gen_bytes_chacha20, ChaChaRng::from_entropy());
@@ -77,6 +90,15 @@ macro_rules! gen_uint {
7790
}
7891

7992
gen_uint!(gen_u32_xorshift, u32, XorShiftRng::from_entropy());
93+
gen_uint!(gen_u32_xoshiro256starstar, u32, Xoshiro256StarStar::from_entropy());
94+
gen_uint!(gen_u32_xoshiro256plus, u32, Xoshiro256Plus::from_entropy());
95+
gen_uint!(gen_u32_xoshiro128starstar, u32, Xoshiro128StarStar::from_entropy());
96+
gen_uint!(gen_u32_xoshiro128plus, u32, Xoshiro128Plus::from_entropy());
97+
gen_uint!(gen_u32_xoroshiro128starstar, u32, Xoroshiro128StarStar::from_entropy());
98+
gen_uint!(gen_u32_xoroshiro128plus, u32, Xoroshiro128Plus::from_entropy());
99+
gen_uint!(gen_u32_xoroshiro64starstar, u32, Xoroshiro64StarStar::from_entropy());
100+
gen_uint!(gen_u32_xoroshiro64star, u32, Xoroshiro64Star::from_entropy());
101+
gen_uint!(gen_u32_splitmix64, u32, SplitMix64::from_entropy());
80102
gen_uint!(gen_u32_lcg64_xsh32, u32, Lcg64Xsh32::from_entropy());
81103
gen_uint!(gen_u32_mcg128_xsh64, u32, Mcg128Xsl64::from_entropy());
82104
gen_uint!(gen_u32_chacha20, u32, ChaChaRng::from_entropy());
@@ -88,6 +110,15 @@ gen_uint!(gen_u32_small, u32, SmallRng::from_entropy());
88110
gen_uint!(gen_u32_os, u32, OsRng::new().unwrap());
89111

90112
gen_uint!(gen_u64_xorshift, u64, XorShiftRng::from_entropy());
113+
gen_uint!(gen_u64_xoshiro256starstar, u64, Xoshiro256StarStar::from_entropy());
114+
gen_uint!(gen_u64_xoshiro256plus, u64, Xoshiro256Plus::from_entropy());
115+
gen_uint!(gen_u64_xoshiro128starstar, u64, Xoshiro128StarStar::from_entropy());
116+
gen_uint!(gen_u64_xoshiro128plus, u64, Xoshiro128Plus::from_entropy());
117+
gen_uint!(gen_u64_xoroshiro128starstar, u64, Xoroshiro128StarStar::from_entropy());
118+
gen_uint!(gen_u64_xoroshiro128plus, u64, Xoroshiro128Plus::from_entropy());
119+
gen_uint!(gen_u64_xoroshiro64starstar, u64, Xoroshiro64StarStar::from_entropy());
120+
gen_uint!(gen_u64_xoroshiro64star, u64, Xoroshiro64Star::from_entropy());
121+
gen_uint!(gen_u64_splitmix64, u64, SplitMix64::from_entropy());
91122
gen_uint!(gen_u64_lcg64_xsh32, u64, Lcg64Xsh32::from_entropy());
92123
gen_uint!(gen_u64_mcg128_xsh64, u64, Mcg128Xsl64::from_entropy());
93124
gen_uint!(gen_u64_chacha20, u64, ChaChaRng::from_entropy());
@@ -123,6 +154,15 @@ macro_rules! init_gen {
123154
}
124155

125156
init_gen!(init_xorshift, XorShiftRng);
157+
init_gen!(init_xoshiro256starstar, Xoshiro256StarStar);
158+
init_gen!(init_xoshiro256plus, Xoshiro256Plus);
159+
init_gen!(init_xoshiro128starstar, Xoshiro128StarStar);
160+
init_gen!(init_xoshiro128plus, Xoshiro128Plus);
161+
init_gen!(init_xoroshiro128starstar, Xoroshiro128StarStar);
162+
init_gen!(init_xoroshiro128plus, Xoroshiro128Plus);
163+
init_gen!(init_xoroshiro64starstar, Xoroshiro64StarStar);
164+
init_gen!(init_xoroshiro64star, Xoroshiro64Star);
165+
init_gen!(init_splitmix64, SplitMix64);
126166
init_gen!(init_lcg64_xsh32, Lcg64Xsh32);
127167
init_gen!(init_mcg128_xsh64, Mcg128Xsl64);
128168
init_gen!(init_hc128, Hc128Rng);

build.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
extern crate rustc_version;
2-
use rustc_version::{version, Version};
1+
extern crate autocfg;
32

43
fn main() {
5-
if version().unwrap() >= Version::parse("1.26.0").unwrap() {
6-
println!("cargo:rustc-cfg=rust_1_26");
7-
}
8-
if version().unwrap() >= Version::parse("1.27.0").unwrap() {
9-
println!("cargo:rustc-cfg=rust_1_27");
10-
}
4+
println!("cargo:rerun-if-changed=build.rs");
5+
6+
let ac = autocfg::new();
7+
ac.emit_rustc_version(1, 25);
8+
ac.emit_rustc_version(1, 26);
9+
ac.emit_rustc_version(1, 27);
1110
}

rand_chacha/Cargo.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[package]
22
name = "rand_chacha"
3-
version = "0.1.0" # NB: When modifying, also modify html_root_url in lib.rs
3+
version = "0.1.0"
44
authors = ["The Rand Project Developers", "The Rust Project Developers"]
55
license = "MIT/Apache-2.0"
66
readme = "README.md"
77
repository = "https://github.com/rust-random/rand"
8-
documentation = "https://docs.rs/rand_chacha"
8+
documentation = "https://rust-random.github.io/rand/rand_chacha"
99
homepage = "https://crates.io/crates/rand_chacha"
1010
description = """
1111
ChaCha random number generator
@@ -22,4 +22,4 @@ appveyor = { repository = "rust-random/rand" }
2222
rand_core = { path = "../rand_core", version = ">=0.2, <0.4", default-features=false }
2323

2424
[build-dependencies]
25-
rustc_version = "0.2"
25+
autocfg = "0.1"

rand_chacha/README.md

+8-7
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
[![Build Status](https://travis-ci.org/rust-random/rand.svg)](https://travis-ci.org/rust-random/rand)
44
[![Build Status](https://ci.appveyor.com/api/projects/status/github/rust-random/rand?svg=true)](https://ci.appveyor.com/project/rust-random/rand)
55
[![Latest version](https://img.shields.io/crates/v/rand_chacha.svg)](https://crates.io/crates/rand_chacha)
6-
[![Documentation](https://docs.rs/rand_chacha/badge.svg)](https://docs.rs/rand_chacha)
7-
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-yellow.svg)](https://github.com/rust-random/rand#rust-version-requirements)
8-
[![License](https://img.shields.io/crates/l/rand_chacha.svg)](https://github.com/rust-random/rand/tree/master/rand_chacha#license)
6+
[![Book](https://img.shields.io/badge/book-master-yellow.svg)](https://rust-random.github.io/book/)
7+
[![API](https://img.shields.io/badge/api-master-yellow.svg)](https://rust-random.github.io/rand/rand_chacha)
8+
[![API](https://docs.rs/rand_chacha/badge.svg)](https://docs.rs/rand_chacha)
9+
[![Minimum rustc version](https://img.shields.io/badge/rustc-1.22+-lightgray.svg)](https://github.com/rust-random/rand#rust-version-requirements)
910

1011
A cryptographically secure random number generator that uses the ChaCha
1112
algorithm.
@@ -15,11 +16,11 @@ as an RNG. It is an improved variant of the Salsa20 cipher family, which was
1516
selected as one of the "stream ciphers suitable for widespread adoption" by
1617
eSTREAM[^2].
1718

18-
Documentation:
19-
[master branch](https://rust-random.github.io/rand/rand_chacha/index.html),
20-
[by release](https://docs.rs/rand_chacha)
19+
Links:
2120

22-
[Changelog](CHANGELOG.md)
21+
- [API documentation (master)](https://rust-random.github.io/rand/rand_chacha)
22+
- [API documentation (docs.rs)](https://docs.rs/rand_chacha)
23+
- [Changelog](CHANGELOG.md)
2324

2425
[rand]: https://crates.io/crates/rand
2526
[^1]: D. J. Bernstein, [*ChaCha, a variant of Salsa20*](

rand_chacha/build.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
extern crate rustc_version;
2-
use rustc_version::{version, Version};
1+
extern crate autocfg;
32

43
fn main() {
5-
if version().unwrap() >= Version::parse("1.26.0").unwrap() {
6-
println!("cargo:rustc-cfg=rust_1_26");
7-
}
4+
println!("cargo:rerun-if-changed=build.rs");
5+
let ac = autocfg::new();
6+
ac.emit_rustc_version(1, 26);
87
}

rand_chacha/src/chacha.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ impl ChaChaRng {
114114
/// byte-offset.
115115
///
116116
/// Note: this function is currently only available with Rust 1.26 or later.
117-
#[cfg(rust_1_26)]
117+
#[cfg(rustc_1_26)]
118118
pub fn get_word_pos(&self) -> u128 {
119119
let mut c = (self.0.core.state[13] as u64) << 32
120120
| (self.0.core.state[12] as u64);
@@ -135,7 +135,7 @@ impl ChaChaRng {
135135
/// 60 bits.
136136
///
137137
/// Note: this function is currently only available with Rust 1.26 or later.
138-
#[cfg(rust_1_26)]
138+
#[cfg(rustc_1_26)]
139139
pub fn set_word_pos(&mut self, word_offset: u128) {
140140
let index = (word_offset as usize) & 0xF;
141141
let counter = (word_offset >> 4) as u64;
@@ -330,7 +330,7 @@ mod test {
330330
}
331331

332332
#[test]
333-
#[cfg(rust_1_26)]
333+
#[cfg(rustc_1_26)]
334334
fn test_chacha_true_values_c() {
335335
// Test vector 4 from
336336
// https://tools.ietf.org/html/draft-nir-cfrg-chacha20-poly1305-04

rand_chacha/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
1111
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
1212
html_favicon_url = "https://www.rust-lang.org/favicon.ico",
13-
html_root_url = "https://docs.rs/rand_chacha/0.1.0")]
13+
html_root_url = "https://rust-random.github.io/rand/")]
1414

1515
#![deny(missing_docs)]
1616
#![deny(missing_debug_implementations)]

rand_core/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[package]
22
name = "rand_core"
3-
version = "0.3.0" # NB: When modifying, also modify html_root_url in lib.rs
3+
version = "0.3.0"
44
authors = ["The Rand Project Developers", "The Rust Project Developers"]
55
license = "MIT/Apache-2.0"
66
readme = "README.md"
77
repository = "https://github.com/rust-random/rand"
8-
documentation = "https://docs.rs/rand_core"
8+
documentation = "https://rust-random.github.io/rand/rand_core"
99
homepage = "https://crates.io/crates/rand_core"
1010
description = """
1111
Core random number generator traits and tools for implementation.

0 commit comments

Comments
 (0)