使用旧的 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
通过log
crate启用日志记录
此外,以下功能配置Rand
small_rng
启用包含SmallRng
PRNGnightly
包括一些需要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以获取详细信息。