69 个版本
0.9.0-alpha.2 | 2024 年 7 月 29 日 |
---|---|
0.9.0-alpha.1 | 2024 年 3 月 18 日 |
0.9.0-alpha.0 | 2024 年 2 月 18 日 |
0.8.5 | 2022 年 2 月 14 日 |
0.3.4 | 2015 年 3 月 31 日 |
#1 in 算法
12,281,510 每月下载量
用于 39,686 个 crate (15,660 直接使用)
415KB
7K SLoC
Rand
Rand 是一个用于随机数生成的 Rust 库,具有以下特点
- 通过
Rng
,SliceRandom
和IteratorRandom
特性轻松生成和使用随机值 - 通过
getrandom
crate 进行安全种子,通过thread_rng
进行快速、便捷的生成 - 基于
rand_core
的模块化设计(请参阅书籍) - 最佳类的加密和非加密生成器的快速实现
- 灵活的
distributions
模块 - 通过我们自己的
rand_distr
和statrs
为大量随机数分布提供采样器 - 可移植的可重复输出
#[no_std]
兼容性(部分)- 许多 性能优化
值得一提的是 rand
不是什么
- 小型。大多数底层 crate 都很小,但更高层的
rand
和rand_distr
每个都包含大量功能。 - 简单(实现)。我们注重正确性、速度和灵活性,但不注重简洁性。如果您喜欢简单小巧的库,有其他选择,包括 fastrand 和 oorandom。
- 慢。我们认真对待性能,同时考虑新分布的设置时间、常用参数以及当前采样器的参数。
文档
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies]
rand = "=0.9.0-alpha.2"
rand_distr = "=0.5.0-alpha.2"
要开始使用 Rand,请参阅 书籍。
版本
Rand 已经 成熟(适用于通用用途,具有不常发布的破坏性较小的版本)但尚未达到 1.0。当前版本包括
- 0.8 版本于 2020 年 12 月发布,包含许多小变化。
- 0.9 版本正在开发中,包含许多小变化。
包功能
Rand 默认启用以下功能
std
启用依赖于std
库的功能alloc
(由std
暗示)启用需要分配器的功能getrandom
(由std
暗示)是一个可选依赖,提供rngs::OsRng
的代码std_rng
启用包含StdRng
、thread_rng
和random
(后两者 也 需要启用std
)
可选,以下依赖项可以启用
log
通过 log 启用日志记录
此外,以下功能配置 Rand
small_rng
启用包含SmallRng
PRNGnightly
包含需要夜间 Rust 的某些添加simd_support
(实验性)启用 SIMD 值的采样(均匀随机的 SIMD 整数和浮点数),需要夜间 Rust
请注意,夜间功能不稳定,因此并非所有库和编译器版本都将兼容。这对于 Rand 的实验性 simd_support
功能尤其如此。
Rand 在 no_std
模式下支持有限的功能(通过 default-features = false
启用)。在这种情况下,OsRng
和 from_os_rng
不可用(除非启用 getrandom
),大部分 seq
不可用(除非启用 alloc
),并且 thread_rng
和 random
不可用。
可移植性和平台支持
许多(但并非所有)算法旨在具有可重复的输出。更多内容请参阅书籍:可移植性。
Rand 库支持多种 CPU 架构。平台集成外包给 getrandom。
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 获取详细信息。
依赖关系
~0.5–1MB
~14K SLoC