使用旧的 Rust 2015
| 0.1.1 |
|
|---|
#100 in #rand
8KB
144 代码行数
Rand
Rand 是一个 Rust 随机数生成库,具有以下特点:
- 通过
Rng、SliceRandom和IteratorRandom特性轻松生成和使用随机值 - 通过
getrandom包 安全地播种,并通过thread_rng快速、方便地生成 - 基于
rand_core的模块化设计(见书籍) - 最佳类别的加密和非加密生成器的快速实现
- 灵活的
distributions模块 - 通过我们自己的
rand_distr和statrs提供的大量随机数分布的采样器 - 可移植且可重现的输出
#[no_std]兼容性(部分)- 许多 性能优化
也值得指出的是,rand 不是什么
- 小。大多数低级包都很小,但更高层的
rand和rand_distr每个都包含很多功能。 - 简单(实现)。我们非常重视正确性、速度和灵活性,但不是简单性。如果您喜欢小型且简单的库,有其他选择,包括 fastrand 和 oorandom。
- 慢。我们认真对待性能,同时也考虑了新分布的设置时间、常用参数和当前采样器的参数。
文档
用法
将此添加到您的 Cargo.toml
[dependencies]
rand = "0.8.5"
要开始使用Rand,请参阅《Rand图书》。
版本
Rand已经成熟(适用于通用用途,具有不频繁的破坏性发布,最小化破坏)但尚未达到1.0版本。我们与固定版本的Rust编译器保持兼容性(见下文)。
当前Rand版本有
- Version 0.7于2019年6月发布,将大多数非均匀分布移动到外部crate中,将
from_entropy移动到SeedableRng,以及许多小的更改和修复。 - Version 0.8于2020年12月发布,进行了许多小的更改。
有关发布的详细变更日志可供查阅。
当升级到下一个次要系列(特别是0.4 → 0.5)时,我们建议阅读升级指南。
Rand尚未达到1.0,这意味着未来可能会出现一些破坏性变更(SemVer允许每个0.x.0版本包含破坏性变更),但被视为成熟:破坏性变更最小化,破坏性发布不频繁。
Rand库之间存在相互依赖关系,并使用semver技巧以使特性在不同crate版本之间兼容。(这对于RngCore和SeedableRng尤为重要。)因此,一些crate发布是兼容性垫片,取决于下一个lib版本(例如,rand_core版本0.2.2和0.3.1)。这意味着,例如,rand_core_0_4_0::SeedableRng和rand_core_0_3_0::SeedableRng是不同的、不兼容的特性,这可能导致构建错误。通常,运行cargo update足以修复任何问题。
已撤回的版本
一些Rand crate的版本已被撤回(“未发布”)。在这种情况下,crate的CHANGELOG应更新原因,并在问题跟踪器中使用关键词yank进行搜索以发现动机。
Rust版本要求
最低支持的Rust版本(MSRV)是rustc >= 1.60.0。旧版本可能工作(取决于功能配置),但未经测试。
crate功能
Rand默认启用以下功能
std启用依赖于std库的功能alloc(由std隐式启用)启用需要分配器的功能getrandom(由std隐式启用)是一个可选依赖项,提供rngs::OsRng背后的代码std_rng启用包含StdRng、thread_rng和random(后两个还需要启用std)
可选地,可以启用以下依赖项
log通过logcrate启用日志记录
此外,以下功能配置Rand
small_rng启用包含SmallRngPRNGnightly包括一些需要nightly Rust的附加功能simd_support(实验性)启用采样SIMD值(均匀随机的SIMD整数和浮点数),需要nightly Rust
请注意,夜间功能可能不稳定,因此并非所有库和编译器版本都兼容。这对于Rand的实验性simd_support功能尤其如此。
Rand在no_std模式下支持有限功能(通过default-features = false启用)。在这种情况下,OsRng和from_entropy不可用(除非启用了getrandom),大部分seq不可用(除非启用了alloc),并且thread_rng和random不可用。
WASM支持
在WASM目标wasm32-unknown-unknown上,从操作系统种子熵不被rand或getrandom自动支持。如果您愿意手动种子生成器,可以禁用getrandom功能并使用SeedableRng特质的方法。要启用从操作系统种子,要么使用不同的目标,例如wasm32-wasi,要么添加对getrandom的直接依赖项并启用js功能(如果目标支持JavaScript)。参见getrandom#WebAssembly支持。
许可
Rand以MIT许可和Apache许可(版本2.0)的条款分发。
请参阅LICENSE-APACHE、LICENSE-MIT和COPYRIGHT以获取详细信息。