4.3 升级到 0.7
2 分钟阅读
自 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 特性):
| |
SeedableRng::from_rng 方法现在被视为值稳定:实现应具有可移植的结果。
rand_core 和 rand 的 Error 类型经历了重大重新设计;直接使用此类型可能需要调整。
PRNG
相比上一版本变化较小,但值得注意的是:
rand_chacha已重写以获得更好的性能(通过 SIMD 指令)StdRng和ThreadRng现在使用 ChaCha 算法。这对StdRng是值破坏性更改。SmallRng现在由small_rng特性标志控制。xoshirocrate 现在是rand_xoshiro。rand_pcg现在包含Pcg64。
分布
对于最广泛使用的分布(Standard 和 Uniform),没有重大变化。但对于大多数其余分布……
- 我们添加了新 crate
rand_distr,容纳所有分布(包括重新导出仍在rand::distributions中的那些)。如果你之前使用rand::distributions::Normal,现在使用rand_distr::Normal。 - 许多分布的构造函数已更改,以便在错误时返回
Result而非 panic。 - 许多分布现在对其参数类型泛型(在大多数情况下支持
f32和f64)。这有助于在泛型代码中使用,并允许减小参数化分布的大小。目前更复杂的算法内部始终使用f64。 Standard现在可以采样NonZeroU*值
我们还添加了几个分布:
rand::distributions::weighted::alias_method::WeightedIndexrand_distr::Pertrand_distr::Triangularrand_distr::UnitBallrand_distr::UnitDiscrand_distr::UnitSphere(此前名为rand::distributions::UnitSphereSurface)
序列
为帮助可移植性,当上限小于 u32::MAX 时,所有 usize 类型的随机采样现在改为采样 u32 值。这意味着升级到 0.7 对 seq 功能的使用是值破坏性更改,但升级到 0.7 后结果应在 CPU 架构之间保持一致。