16 个版本 (9 个破坏性版本)

0.10.1 2024年2月24日
0.10.0 2023年2月7日
0.9.0 2023年1月19日
0.8.3 2022年12月20日
0.5.1 2022年7月13日

#136 in 算法

Download history 315/week @ 2024-04-28 284/week @ 2024-05-05 366/week @ 2024-05-12 469/week @ 2024-05-19 634/week @ 2024-05-26 355/week @ 2024-06-02 203/week @ 2024-06-09 276/week @ 2024-06-16 230/week @ 2024-06-23 276/week @ 2024-06-30 279/week @ 2024-07-07 486/week @ 2024-07-14 423/week @ 2024-07-21 359/week @ 2024-07-28 357/week @ 2024-08-04 416/week @ 2024-08-11

每月下载量:1,608
用于 11 个crate(3 个直接使用)

Apache-2.0 OR MIT

220KB
2.5K SLoC

turborand

CI License Cargo Documentation

快速随机数生成器。

turborand 的内部实现使用了 Wyrand,一个简单快速的生成器但 不是 密码学安全的,还使用了 ChaCha8,这是一个密码学安全的生成器,针对 ChaCha 算法的 8 轮进行了优化,以显著提高吞吐量,同时不会牺牲太多安全性,正如在 Too Much Crypto 论文中提出的建议。

示例

use turborand::prelude::*;

let rand = Rng::new();

if rand.bool() {
    println!("Success! :D");
} else {
    println!("Failure... :(");
}

从列表中采样值

use turborand::prelude::*;

let rand = Rng::new();

let values = [1, 2, 3, 4, 5];

let value = rand.sample(&values);

生成具有随机值的向量

use turborand::prelude::*;
use std::iter::repeat_with;

let rand = Rng::new();

let values: Vec<_> = repeat_with(|| rand.f32()).take(10).collect();

无 std 兼容性

turborand 可以用于 无 std 环境,但功能和特性将有所减少。不会有 Default 实现,也没有 new() 构造函数,因此 Rng/ChaChaRng 种子必须由用户从平台上的任何可用来源提供。除非启用 alloc 功能,否则某些 TurboRand 方法将不可用,这需要有一个全局分配器。

为 WASM 编译

为了支持 WASM 构建,您需要在您的 Cargo.toml 中添加以下内容

[target.'cfg(target_arch = "wasm32")'.dependencies]
instant = { version = "0.1", features = ["wasm-bindgen"] }

instant 需要 wasm-bindgenstdweb 功能在 WASM 上激活,以便编译。然而,stdweb 已不再维护,但为了支持未来的替代方案和功能,切换 WASM 支持留给了此 crate 的用户。

性能

Wyrand 是一个相当快的 PRNG,在需要速度的同时仍具有不错的统计特性时是一个不错的选择。目前,turborand 实现与类似的 rand 算法相比表现极佳。以下是 fill_bytes 方法性能的图表,在 Windows 10 x64 上测试,AMD Ryzen 1700,主频 3.7GHz,32GB RAM,频率 3066MHz。

fill_bytes benchmark

对于填充2048字节的数组缓冲区,turborandRng大约需要170-180纳秒来完成,而SmallRng则需要260-268纳秒,而最快的64位系统上的PCG实现Pcg64Mcg则需要305-312纳秒。

u64 gen benchmark

对于生成无界的u64值,turborandfastrand在性能上是相等的,这是预期的,因为它们都实现了Wyrand算法,并且一致地在生成一个u64值时执行大约820-830皮秒。SmallRng的性能大约是1.16纳秒,而Pcg64Mcg是1.35纳秒。

版本迁移

查看MIGRATION.md以获取迁移到turborand主要版本所需的所有说明。

许可证

根据您的选择,许可如下

依赖项

~0–485KB