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特性轻松生成和使用随机值 - 通过
getrandomcrate 进行安全种子,通过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启用包含SmallRngPRNGnightly包含需要夜间 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