Why Casper forked Rust's rand crate
5 hours ago
- 作者分叉了 Rust 的 'rand' crate 以创建 'urandom',旨在减少小问题并提高日常操作的可发现性。
- 'urandom' 将高级消费者 API 放在单个 'Random' 包装结构体上,消除了为常见操作(如随机范围、选择和洗牌)导入多个 trait 的需要。
- 'urandom' 封闭了其底层 'Rng' trait,阻止外部生成器,并允许 crate 针对特定输出(如 f32 和 f64)优化算法(例如 Xoshiro),在基准测试中实现了高达 31% 的吞吐量提升。
- 'urandom' 中的均匀采样使用统一、无偏的惰性阈值计算,这比 'rand' 的分开有偏和无偏路径的分拆方法更简单且通常更快。
- 'urandom' 保证确定性生成器在不同架构和 SemVer 兼容版本之间的可重复性,而 'rand' 可能在次要更新中改变输出。
- 'urandom' 的权衡是灵活性较低(没有任意生成器)和生态系统较小,但与 'rand' 相比,它在常见任务上提供了改进的性能和易用性。