2018-03-25 10:40:31 +02:00
|
|
|
# Rand
|
|
|
|
|
2018-08-13 18:00:37 +01:00
|
|
|
[](https://travis-ci.org/rust-random/rand)
|
2018-09-25 14:19:37 +01:00
|
|
|
[](https://ci.appveyor.com/project/rust-random/rand)
|
2018-11-22 19:27:08 +00:00
|
|
|
[](https://crates.io/crates/rand)
|
|
|
|
[](https://rust-random.github.io/book/)
|
|
|
|
[](https://rust-random.github.io/rand)
|
|
|
|
[](https://docs.rs/rand)
|
2020-08-01 18:21:48 +02:00
|
|
|
[](https://github.com/rust-random/rand#rust-version-requirements)
|
2015-02-03 16:57:35 +11:00
|
|
|
|
2018-05-11 10:42:10 +02:00
|
|
|
A Rust library for random number generation.
|
2015-02-03 16:57:35 +11:00
|
|
|
|
2018-05-11 10:42:10 +02:00
|
|
|
Rand provides utilities to generate random numbers, to convert them to useful
|
|
|
|
types and distributions, and some randomness-related algorithms.
|
2018-03-23 15:37:31 +00:00
|
|
|
|
2018-05-11 12:31:17 +02:00
|
|
|
The core random number generation traits of Rand live in the [rand_core](
|
2018-11-08 18:12:01 +00:00
|
|
|
https://crates.io/crates/rand_core) crate but are also exposed here; RNG
|
|
|
|
implementations should prefer to use `rand_core` while most other users should
|
|
|
|
depend on `rand`.
|
2018-03-23 15:37:31 +00:00
|
|
|
|
2018-07-09 18:15:13 +01:00
|
|
|
Documentation:
|
2018-11-22 19:27:08 +00:00
|
|
|
- [The Rust Rand Book](https://rust-random.github.io/book)
|
|
|
|
- [API reference (master)](https://rust-random.github.io/rand)
|
|
|
|
- [API reference (docs.rs)](https://docs.rs/rand)
|
2018-07-09 18:15:13 +01:00
|
|
|
|
2015-02-03 16:57:35 +11:00
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
Add this to your `Cargo.toml`:
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[dependencies]
|
2019-06-27 13:53:06 +02:00
|
|
|
rand = "0.7"
|
2015-02-03 16:57:35 +11:00
|
|
|
```
|
|
|
|
|
2018-11-22 19:27:08 +00:00
|
|
|
To get started using Rand, see [The Book](https://rust-random.github.io/book).
|
2018-05-11 10:42:10 +02:00
|
|
|
|
|
|
|
|
2018-03-11 12:07:24 +00:00
|
|
|
## Versions
|
2017-12-11 16:39:13 +00:00
|
|
|
|
2019-04-17 15:29:42 +01:00
|
|
|
Rand libs have inter-dependencies and make use of the
|
|
|
|
[semver trick](https://github.com/dtolnay/semver-trick/) in order to make traits
|
|
|
|
compatible across crate versions. (This is especially important for `RngCore`
|
|
|
|
and `SeedableRng`.) A few crate releases are thus compatibility shims,
|
|
|
|
depending on the *next* lib version (e.g. `rand_core` versions `0.2.2` and
|
|
|
|
`0.3.1`). This means, for example, that `rand_core_0_4_0::SeedableRng` and
|
|
|
|
`rand_core_0_3_0::SeedableRng` are distinct, incompatible traits, which can
|
|
|
|
cause build errors. Usually, running `cargo update` is enough to fix any issues.
|
|
|
|
|
2018-11-08 18:12:01 +00:00
|
|
|
The Rand lib is not yet stable, however we are careful to limit breaking changes
|
|
|
|
and warn via deprecation wherever possible. Patch versions never introduce
|
|
|
|
breaking changes. The following minor versions are supported:
|
|
|
|
|
2019-06-27 13:53:06 +02:00
|
|
|
- Version 0.7 was released in June 2019, moving most non-uniform distributions
|
|
|
|
to an external crate, moving `from_entropy` to `SeedableRng`, and many small
|
|
|
|
changes and fixes.
|
2018-11-08 18:12:01 +00:00
|
|
|
- Version 0.6 was released in November 2018, redesigning the `seq` module,
|
|
|
|
moving most PRNGs to external crates, and many small changes.
|
|
|
|
- Version 0.5 was released in May 2018, as a major reorganisation
|
|
|
|
(introducing `RngCore` and `rand_core`, and deprecating `Rand` and the
|
|
|
|
previous distribution traits).
|
|
|
|
- Version 0.4 was released in December 2017, but contained almost no breaking
|
|
|
|
changes from the 0.3 series.
|
2018-01-02 14:35:06 +00:00
|
|
|
|
2018-11-08 18:12:01 +00:00
|
|
|
A detailed [changelog](CHANGELOG.md) is available.
|
2018-03-11 12:07:24 +00:00
|
|
|
|
2018-11-08 18:12:01 +00:00
|
|
|
When upgrading to the next minor series (especially 0.4 → 0.5), we recommend
|
|
|
|
reading the [Upgrade Guide](https://rust-random.github.io/book/update.html).
|
2018-03-11 12:07:24 +00:00
|
|
|
|
2019-09-25 09:10:51 +01:00
|
|
|
### Yanked versions
|
|
|
|
|
|
|
|
Some versions of Rand crates have been yanked ("unreleased"). Where this occurs,
|
|
|
|
the crate's CHANGELOG *should* be updated with a rationale, and a search on the
|
|
|
|
issue tracker with the keyword `yank` *should* uncover the motivation.
|
|
|
|
|
2018-03-11 12:07:24 +00:00
|
|
|
### Rust version requirements
|
|
|
|
|
2020-08-01 18:21:48 +02:00
|
|
|
Since version 0.8, Rand requires **Rustc version 1.36 or greater**.
|
|
|
|
Rand 0.7 requires Rustc 1.32 or greater while versions 0.5 require Rustc 1.22 or
|
|
|
|
greater, and 0.4 and 0.3 (since approx. June 2017) require Rustc version 1.15 or
|
|
|
|
greater. Subsets of the Rand code may work with older Rust versions, but this is
|
|
|
|
not supported.
|
2018-03-11 12:07:24 +00:00
|
|
|
|
|
|
|
Travis CI always has a build with a pinned version of Rustc matching the oldest
|
|
|
|
supported Rust release. The current policy is that this can be updated in any
|
|
|
|
Rand release if required, but the change must be noted in the changelog.
|
2017-12-11 16:39:13 +00:00
|
|
|
|
2018-03-23 15:37:31 +00:00
|
|
|
## Crate Features
|
2017-12-14 16:36:28 +00:00
|
|
|
|
2019-05-07 09:57:43 +01:00
|
|
|
Rand is built with these features enabled by default:
|
2017-12-14 16:36:28 +00:00
|
|
|
|
2019-05-07 09:57:43 +01:00
|
|
|
- `std` enables functionality dependent on the `std` lib
|
2020-03-09 15:22:13 +00:00
|
|
|
- `alloc` (implied by `std`) enables functionality requiring an allocator
|
2019-05-07 09:57:43 +01:00
|
|
|
- `getrandom` (implied by `std`) is an optional dependency providing the code
|
|
|
|
behind `rngs::OsRng`
|
2020-03-09 15:22:13 +00:00
|
|
|
- `std_rng` enables inclusion of `StdRng`, `thread_rng` and `random`
|
|
|
|
(the latter two *also* require that `std` be enabled)
|
2019-05-07 09:57:43 +01:00
|
|
|
|
|
|
|
Optionally, the following dependencies can be enabled:
|
|
|
|
|
2020-03-09 15:22:13 +00:00
|
|
|
- `log` enables logging via the `log` crate` crate
|
2019-05-07 09:57:43 +01:00
|
|
|
|
|
|
|
Additionally, these features configure Rand:
|
|
|
|
|
2019-05-13 11:18:52 +01:00
|
|
|
- `small_rng` enables inclusion of the `SmallRng` PRNG
|
2020-09-22 16:59:16 +02:00
|
|
|
- `nightly` enables some optimizations requiring nightly Rust
|
2019-05-07 09:57:43 +01:00
|
|
|
- `simd_support` (experimental) enables sampling of SIMD values
|
2020-09-22 16:59:16 +02:00
|
|
|
(uniformly random SIMD integers and floats), requiring nightly Rust
|
|
|
|
|
|
|
|
Note that the `simd_support` feature (and to a lesser extent the `nightly`
|
|
|
|
feature) may be broken on some nightly Rust versions and cause `rand` to not
|
|
|
|
compile.
|
2019-05-07 09:57:43 +01:00
|
|
|
|
|
|
|
Rand supports limited functionality in `no_std` mode (enabled via
|
|
|
|
`default-features = false`). In this case, `OsRng` and `from_entropy` are
|
|
|
|
unavailable (unless `getrandom` is enabled), large parts of `seq` are
|
|
|
|
unavailable (unless `alloc` is enabled), and `thread_rng` and `random` are
|
|
|
|
unavailable.
|
2017-06-14 12:22:22 -07:00
|
|
|
|
|
|
|
# License
|
|
|
|
|
2018-05-11 10:42:10 +02:00
|
|
|
Rand is distributed under the terms of both the MIT license and the
|
|
|
|
Apache License (Version 2.0).
|
2017-06-14 12:22:22 -07:00
|
|
|
|
2018-08-24 09:22:35 +01:00
|
|
|
See [LICENSE-APACHE](LICENSE-APACHE) and [LICENSE-MIT](LICENSE-MIT), and
|
|
|
|
[COPYRIGHT](COPYRIGHT) for details.
|