使用旧 Rust 2015
| 0.6.4 |
|
|---|
#116 in #rng
520KB
8K SLoC
Rand
Rand 是一个用于随机数生成的 Rust 库。
Rand 提供生成随机数、将它们转换为有用的类型和分布以及一些随机相关算法的实用工具。
Rand 的核心随机数生成特性位于 rand_core 包中,但也在此处公开;RNG 实现应优先使用 rand_core,而大多数其他用户应依赖 rand。
文档
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
rand = "0.6"
要开始使用 Rand,请参阅 书籍。
版本
Rand 库尚不稳定,但我们小心地限制了破坏性更改,并在可能的情况下通过弃用进行警告。补丁版本从不引入破坏性更改。以下为支持的次要版本
- 0.6 版本于 2018 年 11 月发布,重新设计了
seq模块,将大多数 PRNG 移动到外部包中,以及许多小更改。 - 0.5 版本于 2018 年 5 月发布,作为一次重大重组(引入了
RngCore和rand_core,并弃用了Rand以及之前的分布特性)。 - 0.4 版本于 2017 年 12 月发布,但与 0.3 系列相比几乎没有破坏性更改。
有关详细信息,请参阅 变更日志。
当升级到下一个次要系列(尤其是 0.4 → 0.5)时,我们建议阅读 升级指南。
Rust 版本要求
自 0.5 版本以来,Rand 需要 Rustc 版本 1.22 或更高版本。Rand 0.4 和 0.3(自大约 2017 年 6 月以来)需要 Rustc 版本 1.15 或更高版本。Rand 代码的子集可能与旧版本的 Rust 一起工作,但这不受支持。
Travis CI 始终有一个使用固定版本 Rustc 的构建版本,以匹配支持的最老 Rust 版本。当前政策是在必要时可以更新任何 Rand 版本,但必须在变更日志中记录更改。
为了避免不必要地更改所需版本,我们使用一个build.rs脚本来自动检测编译器版本,并自动启用某些功能或更改代码路径。由于这会使得无意中使用需要较新Rust版本的特性变得容易,如果您需要与特定版本兼容,我们建议使用固定的Rustc版本进行测试。
包功能
Rand默认启用std和rand_os功能
std启用依赖于std库的功能,并隐含alloc和rand_osrand_os启用rand_os包,rngs::OsRng并启用其使用;该功能的持续存在不能保证,因此建议用户指定std
以下为可选功能
- 可以使用
alloc代替std以提供Vec和Box。 log通过log包启用一些日志记录。nightly启用所有不稳定特性(simd_support)。serde1通过Serde版本1启用一些类型的序列化。simd_support启用SIMD类型(整数和浮点数)的统一抽样。stdweb通过结合stdweb和cargo-web,在wasm32-unknown-unknown上启用对OsRng的支持。wasm-bindgen通过wasm-bindgen在wasm32-unknown-unknown上启用对OsRng的支持。
通过设置default-features = false激活no_std模式;这会移除依赖于std的功能
thread_rng()和random()不可用,因为它们需要线程局部存储和熵源。OsRng和EntropyRng不可用。JitterRng代码仍然存在,但必须通过JitterRng::new_with_timer提供纳秒级定时器- 由于没有外部熵可用,无法使用
FromEntropy特质(用户必须提供种子)创建带有新鲜种子的生成器。 - 由于在
core中没有提供exp和log函数,因此某些非线性分布不可用。 - 除非使用
alloc功能,否则seq-uence模块的大部分功能不可用(许多API和实现需要Vec)。
许可
Rand在MIT许可和Apache许可(版本2.0)的条款下分发。
有关详细信息,请参阅LICENSE-APACHE、LICENSE-MIT和COPYRIGHT。
依赖关系
~0–1MB
~18K SLoC