4.3 升级到 0.7

原文链接: https://rust-random.github.io/book/update-0.7.html

自 0.6 发布以来,rust-random 获得了 logo 和一个新 crate:getrandom!

依赖

Rand crate 现在需要 rustc 版本 1.32.0 或更高。 这使我们能够移除所有 build.rs 文件以加快编译。

Rand crate 现在总体依赖更少,尽管有一些新的依赖。

Getrandom

如上所述,我们有了新 crate:getrandom,提供围绕平台无关的新鲜熵访问的最小 API。这取代了之前在 OsRng 中的实现,后者现在仅仅是一个包装器。

核心特性

FromEntropy trait 现已移除。不过别担心,其 from_entropy 方法继续在 SeedableRng trait 的新位置提供从熵轻松初始化(这需要 rand_core 启用 std 或 getrandom 特性):

1
2
3
# extern crate rand_0_7 as rand;
use rand::{SeedableRng, rngs::StdRng};
let mut rng = StdRng::from_entropy();

SeedableRng::from_rng 方法现在被视为值稳定:实现应具有可移植的结果。

rand_core 和 rand 的 Error 类型经历了重大重新设计;直接使用此类型可能需要调整。

PRNG

相比上一版本变化较小,但值得注意的是:

分布

对于最广泛使用的分布(Standard 和 Uniform),没有重大变化。但对于大多数其余分布……

  • 我们添加了新 crate rand_distr,容纳所有分布(包括重新导出仍在 rand::distributions 中的那些)。如果你之前使用 rand::distributions::Normal,现在使用 rand_distr::Normal。
  • 许多分布的构造函数已更改,以便在错误时返回 Result 而非 panic。
  • 许多分布现在对其参数类型泛型(在大多数情况下支持 f32 和 f64)。这有助于在泛型代码中使用,并允许减小参数化分布的大小。目前更复杂的算法内部始终使用 f64。
  • Standard 现在可以采样 NonZeroU* 值

我们还添加了几个分布:

序列

为帮助可移植性,当上限小于 u32::MAX 时,所有 usize 类型的随机采样现在改为采样 u32 值。这意味着升级到 0.7 对 seq 功能的使用是值破坏性更改,但升级到 0.7 后结果应在 CPU 架构之间保持一致。

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