3.11 错误处理

原文链接: https://rust-random.github.io/book/guide-err.html

Rand 中的错误处理是在简单性与必要性之间的折中。大多数 RNG 和采样函数永远不会产生错误,若让这些函数能处理错误会显著增加开销(至少在代码复杂度和使用人体工程学方面,具体方案也可能影响性能)。

但外部 RNG 可能失败,能够处理这一点很重要。

因此决定大多数方法不返回 Result 类型,但有少数重要例外,即:

大多数消费随机值的函数不会尝试任何错误处理,而是归结为调用 RngCore 的「不会失败」的方法。由于大多数 RNG 本来就不会失败,这通常不是问题,但少数可能失败的生成器在此情况下可能被迫失败:

  • OsRng 是 getrandom 的封装。根据后者的文档:「一般而言,在支持的平台上,失败极不可能,但并非不可能。」OsRng 通过 RngCore::try_fill_bytes 转发错误,其他方法在出错时 panic。
  • rng 在首次使用时通过 OsRng 播种,并定期重新播种,因此可能失败,尽管可能性不大。若初始播种失败,将 panic。若在重新播种期间失败(可能性更小),RNG 继续运行而不重新播种;若启用了日志,会发出日志消息(警告)。
最后修改 August 23, 2026: 更新 (499855b16)