#rand #traits #numbers #derive #generation

已删除 derive_rand

#[derive]-like functionality for the rand::Rand trait

使用旧的 Rust 2015

0.1.1 2015年2月3日

#100 in #rand

MIT/Apache

8KB
144 代码行数

Rand

Test Status Crate Book API API Minimum rustc version

Rand 是一个 Rust 随机数生成库,具有以下特点:

也值得指出的是,rand 不是什么

  • 小。大多数低级包都很小,但更高层的 randrand_distr 每个都包含很多功能。
  • 简单(实现)。我们非常重视正确性、速度和灵活性,但不是简单性。如果您喜欢小型且简单的库,有其他选择,包括 fastrandoorandom
  • 慢。我们认真对待性能,同时也考虑了新分布的设置时间、常用参数和当前采样器的参数。

文档

用法

将此添加到您的 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版本之间兼容。(这对于RngCoreSeedableRng尤为重要。)因此,一些crate发布是兼容性垫片,取决于下一个lib版本(例如,rand_core版本0.2.20.3.1)。这意味着,例如,rand_core_0_4_0::SeedableRngrand_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启用包含StdRngthread_rngrandom(后两个还需要启用std

可选地,可以启用以下依赖项

  • log通过log crate启用日志记录

此外,以下功能配置Rand

  • small_rng启用包含SmallRng PRNG
  • nightly包括一些需要nightly Rust的附加功能
  • simd_support(实验性)启用采样SIMD值(均匀随机的SIMD整数和浮点数),需要nightly Rust

请注意,夜间功能可能不稳定,因此并非所有库和编译器版本都兼容。这对于Rand的实验性simd_support功能尤其如此。

Rand在no_std模式下支持有限功能(通过default-features = false启用)。在这种情况下,OsRngfrom_entropy不可用(除非启用了getrandom),大部分seq不可用(除非启用了alloc),并且thread_rngrandom不可用。

WASM支持

在WASM目标wasm32-unknown-unknown上,从操作系统种子熵不被randgetrandom自动支持。如果您愿意手动种子生成器,可以禁用getrandom功能并使用SeedableRng特质的方法。要启用从操作系统种子,要么使用不同的目标,例如wasm32-wasi,要么添加对getrandom的直接依赖项并启用js功能(如果目标支持JavaScript)。参见getrandom#WebAssembly支持

许可

Rand以MIT许可和Apache许可(版本2.0)的条款分发。

请参阅LICENSE-APACHELICENSE-MITCOPYRIGHT以获取详细信息。

无运行时依赖