#random #distribution #numbers #generator #traits #generation

已删除 fake-rand-test

随机数生成器和其他随机功能

使用旧 Rust 2015

0.6.4 2019年1月10日

#116 in #rng

MIT/Apache

520KB
8K SLoC

Rand

Build Status Build Status Crate Book API API Minimum rustc version

Rand 是一个用于随机数生成的 Rust 库。

Rand 提供生成随机数、将它们转换为有用的类型和分布以及一些随机相关算法的实用工具。

Rand 的核心随机数生成特性位于 rand_core 包中,但也在此处公开;RNG 实现应优先使用 rand_core,而大多数其他用户应依赖 rand

文档

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
rand = "0.6"

要开始使用 Rand,请参阅 书籍

版本

Rand 库尚不稳定,但我们小心地限制了破坏性更改,并在可能的情况下通过弃用进行警告。补丁版本从不引入破坏性更改。以下为支持的次要版本

  • 0.6 版本于 2018 年 11 月发布,重新设计了 seq 模块,将大多数 PRNG 移动到外部包中,以及许多小更改。
  • 0.5 版本于 2018 年 5 月发布,作为一次重大重组(引入了 RngCorerand_core,并弃用了 Rand 以及之前的分布特性)。
  • 0.4 版本于 2017 年 12 月发布,但与 0.3 系列相比几乎没有破坏性更改。

有关详细信息,请参阅 变更日志

当升级到下一个次要系列(尤其是 0.4 → 0.5)时,我们建议阅读 升级指南

Rust 版本要求

自 0.5 版本以来,Rand 需要 Rustc 版本 1.22 或更高版本。Rand 0.4 和 0.3(自大约 2017 年 6 月以来)需要 Rustc 版本 1.15 或更高版本。Rand 代码的子集可能与旧版本的 Rust 一起工作,但这不受支持。

Travis CI 始终有一个使用固定版本 Rustc 的构建版本,以匹配支持的最老 Rust 版本。当前政策是在必要时可以更新任何 Rand 版本,但必须在变更日志中记录更改。

为了避免不必要地更改所需版本,我们使用一个build.rs脚本来自动检测编译器版本,并自动启用某些功能或更改代码路径。由于这会使得无意中使用需要较新Rust版本的特性变得容易,如果您需要与特定版本兼容,我们建议使用固定的Rustc版本进行测试。

包功能

Rand默认启用stdrand_os功能

  • std启用依赖于std库的功能,并隐含allocrand_os
  • rand_os启用rand_os包,rngs::OsRng并启用其使用;该功能的持续存在不能保证,因此建议用户指定std

以下为可选功能

  • 可以使用alloc代替std以提供VecBox
  • log通过log包启用一些日志记录。
  • nightly启用所有不稳定特性(simd_support)。
  • serde1通过Serde版本1启用一些类型的序列化。
  • simd_support启用SIMD类型(整数和浮点数)的统一抽样。
  • stdweb通过结合stdwebcargo-web,在wasm32-unknown-unknown上启用对OsRng的支持。
  • wasm-bindgen通过wasm-bindgenwasm32-unknown-unknown上启用对OsRng的支持。

通过设置default-features = false激活no_std模式;这会移除依赖于std的功能

  • thread_rng()random()不可用,因为它们需要线程局部存储和熵源。
  • OsRngEntropyRng不可用。
  • JitterRng代码仍然存在,但必须通过JitterRng::new_with_timer提供纳秒级定时器
  • 由于没有外部熵可用,无法使用FromEntropy特质(用户必须提供种子)创建带有新鲜种子的生成器。
  • 由于在core中没有提供explog函数,因此某些非线性分布不可用。
  • 除非使用alloc功能,否则seq-uence模块的大部分功能不可用(许多API和实现需要Vec)。

许可

Rand在MIT许可和Apache许可(版本2.0)的条款下分发。

有关详细信息,请参阅LICENSE-APACHELICENSE-MITCOPYRIGHT

依赖关系

~0–1MB
~18K SLoC