5.2 范围

原文链接: https://rust-random.github.io/book/contrib-scope.html

随着时间的推移,项目范围不断扩大,Rand 从使用单体 crate 转变为使用「主」crate 加上多个单一用途 crate。对于新功能,必须考虑它是否适合 Rand 项目,以及适合放在何处。

小型、专注的 crate 可能出于多种原因使用,但我们不旨在将功能最大限度地拆分为小型 crate。因此,为某项功能使用独立 crate 的合理理由包括:

  • 允许清晰的依赖层次(rand_core)
  • 使功能可以独立使用(例如 getrandom)
  • 从广泛使用的 crate 中移除使用较少但代码量不小的功能(例如 rand_jitter 和 rand_distr 都从 rand 中提取了功能)
  • 允许选择,既不为所有用户包含大量未使用的代码,也不产生大量新 crate(RNG 家族 crate,如 rand_xoshiro 和 rand_isaac)

Trait、基础与用户界面

Rand 项目的主要用户界面仍然是核心的 rand crate。该 crate 的目标包括:

  • 易于使用
  • 在单一位置暴露常用功能
  • 允许使用额外的随机源和分布采样器

为更好地实现模块化,核心 trait 已移至 rand_core crate。该 crate 的目标包括:

  • 以最少依赖暴露核心 trait
  • 提供实现各种随机源所需的通用工具

外部随机源

主要(且通常唯一)的外部随机源是操作系统,通过 getrandom crate 接口。该 crate 还支持在少数 no_std 目标上使用 RDRAND。

对其他 no_std 目标的支持已被讨论,但实际实现工作很少。参见 getrandom#4。

rand_jitter crate 提供了 CPU Jitter 熵收集器的实现,仅因历史原因包含在 Rand 中。

伪随机生成器

Rand 库包含多个伪随机数生成器,原因如下:

  • 实现 StdRng 和 SmallRng 生成器
  • 提供几种高质量替代生成器
  • 历史使用

这些在「家族」crate 中实现,例如 chacha20、rand_pcg、rand_xoshiro。

我们收到了将新算法纳入库的多个请求;评估此类请求时,我们必须考虑以下几点:

  • 纳入 Rand 的目的
  • PRNG 是否密码学安全,如果是,此类声明的可信度如何
  • 输出的统计质量
  • 生成器的性能和特性
  • 算法的接受度和第三方审查

分布

Distribution trait 由 Rand 提供,同时提供常用分布(主要是线性分布)。

额外分布打包在 rand_distr crate 中,该 crate 依赖 rand 并重新导出其所有分布。

最后修改 August 23, 2026: 更新 (499855b16)