1# Changelog 2All notable changes to this project will be documented in this file. 3 4The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 5and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 6 7A [separate changelog is kept for rand_core](rand_core/CHANGELOG.md). 8 9You may also find the [Upgrade Guide](https://rust-random.github.io/book/update.html) useful. 10 11## [0.8.5] - 2021-08-20 12### Fixes 13- Fix build on non-32/64-bit architectures (#1144) 14- Fix "min_const_gen" feature for `no_std` (#1173) 15- Check `libc::pthread_atfork` return value with panic on error (#1178) 16- More robust reseeding in case `ReseedingRng` is used from a fork handler (#1178) 17- Fix nightly: remove unused `slice_partition_at_index` feature (#1215) 18- Fix nightly + `simd_support`: update `packed_simd` (#1216) 19 20### Rngs 21- `StdRng`: Switch from HC128 to ChaCha12 on emscripten (#1142). 22 We now use ChaCha12 on all platforms. 23 24### Documentation 25- Added docs about rand's use of const generics (#1150) 26- Better random chars example (#1157) 27 28 29## [0.8.4] - 2021-06-15 30### Additions 31- Use const-generics to support arrays of all sizes (#1104) 32- Implement `Clone` and `Copy` for `Alphanumeric` (#1126) 33- Add `Distribution::map` to derive a distribution using a closure (#1129) 34- Add `Slice` distribution (#1107) 35- Add `DistString` trait with impls for `Standard` and `Alphanumeric` (#1133) 36 37### Other 38- Reorder asserts in `Uniform` float distributions for easier debugging of non-finite arguments 39 (#1094, #1108) 40- Add range overflow check in `Uniform` float distributions (#1108) 41- Deprecate `rngs::adapter::ReadRng` (#1130) 42 43## [0.8.3] - 2021-01-25 44### Fixes 45- Fix `no-std` + `alloc` build by gating `choose_multiple_weighted` on `std` (#1088) 46 47## [0.8.2] - 2021-01-12 48### Fixes 49- Fix panic in `UniformInt::sample_single_inclusive` and `Rng::gen_range` when 50 providing a full integer range (eg `0..=MAX`) (#1087) 51 52## [0.8.1] - 2020-12-31 53### Other 54- Enable all stable features in the playground (#1081) 55 56## [0.8.0] - 2020-12-18 57### Platform support 58- The minimum supported Rust version is now 1.36 (#1011) 59- `getrandom` updated to v0.2 (#1041) 60- Remove `wasm-bindgen` and `stdweb` feature flags. For details of WASM support, 61 see the [getrandom documentation](https://docs.rs/getrandom/latest). (#948) 62- `ReadRng::next_u32` and `next_u64` now use little-Endian conversion instead 63 of native-Endian, affecting results on Big-Endian platforms (#1061) 64- The `nightly` feature no longer implies the `simd_support` feature (#1048) 65- Fix `simd_support` feature to work on current nightlies (#1056) 66 67### Rngs 68- `ThreadRng` is no longer `Copy` to enable safe usage within thread-local destructors (#1035) 69- `gen_range(a, b)` was replaced with `gen_range(a..b)`. `gen_range(a..=b)` is 70 also supported. Note that `a` and `b` can no longer be references or SIMD types. (#744, #1003) 71- Replace `AsByteSliceMut` with `Fill` and add support for `[bool], [char], [f32], [f64]` (#940) 72- Restrict `rand::rngs::adapter` to `std` (#1027; see also #928) 73- `StdRng`: add new `std_rng` feature flag (enabled by default, but might need 74 to be used if disabling default crate features) (#948) 75- `StdRng`: Switch from ChaCha20 to ChaCha12 for better performance (#1028) 76- `SmallRng`: Replace PCG algorithm with xoshiro{128,256}++ (#1038) 77 78### Sequences 79- Add `IteratorRandom::choose_stable` as an alternative to `choose` which does 80 not depend on size hints (#1057) 81- Improve accuracy and performance of `IteratorRandom::choose` (#1059) 82- Implement `IntoIterator` for `IndexVec`, replacing the `into_iter` method (#1007) 83- Add value stability tests for `seq` module (#933) 84 85### Misc 86- Support `PartialEq` and `Eq` for `StdRng`, `SmallRng` and `StepRng` (#979) 87- Added a `serde1` feature and added Serialize/Deserialize to `UniformInt` and `WeightedIndex` (#974) 88- Drop some unsafe code (#962, #963, #1011) 89- Reduce packaged crate size (#983) 90- Migrate to GitHub Actions from Travis+AppVeyor (#1073) 91 92### Distributions 93- `Alphanumeric` samples bytes instead of chars (#935) 94- `Uniform` now supports `char`, enabling `rng.gen_range('A'..='Z')` (#1068) 95- Add `UniformSampler::sample_single_inclusive` (#1003) 96 97#### Weighted sampling 98- Implement weighted sampling without replacement (#976, #1013) 99- `rand::distributions::alias_method::WeightedIndex` was moved to `rand_distr::WeightedAliasIndex`. 100 The simpler alternative `rand::distribution::WeightedIndex` remains. (#945) 101- Improve treatment of rounding errors in `WeightedIndex::update_weights` (#956) 102- `WeightedIndex`: return error on NaN instead of panic (#1005) 103 104### Documentation 105- Document types supported by `random` (#994) 106- Document notes on password generation (#995) 107- Note that `SmallRng` may not be the best choice for performance and in some 108 other cases (#1038) 109- Use `doc(cfg)` to annotate feature-gated items (#1019) 110- Adjust README (#1065) 111 112## [0.7.3] - 2020-01-10 113### Fixes 114- The `Bernoulli` distribution constructors now reports an error on NaN and on 115 `denominator == 0`. (#925) 116- Use `std::sync::Once` to register fork handler, avoiding possible atomicity violation (#928) 117- Fix documentation on the precision of generated floating-point values 118 119### Changes 120- Unix: make libc dependency optional; only use fork protection with std feature (#928) 121 122### Additions 123- Implement `std::error::Error` for `BernoulliError` (#919) 124 125## [0.7.2] - 2019-09-16 126### Fixes 127- Fix dependency on `rand_core` 0.5.1 (#890) 128 129### Additions 130- Unit tests for value stability of distributions added (#888) 131 132## [0.7.1] - 2019-09-13 133### Yanked 134This release was yanked since it depends on `rand_core::OsRng` added in 0.5.1 135but specifies a dependency on version 0.5.0 (#890), causing a broken builds 136when updating from `rand 0.7.0` without also updating `rand_core`. 137 138### Fixes 139- Fix `no_std` behaviour, appropriately enable c2-chacha's `std` feature (#844) 140- `alloc` feature in `no_std` is available since Rust 1.36 (#856) 141- Fix or squelch issues from Clippy lints (#840) 142 143### Additions 144- Add a `no_std` target to CI to continuously evaluate `no_std` status (#844) 145- `WeightedIndex`: allow adjusting a sub-set of weights (#866) 146 147## [0.7.0] - 2019-06-28 148 149### Fixes 150- Fix incorrect pointer usages revealed by Miri testing (#780, #781) 151- Fix (tiny!) bias in `Uniform` for 8- and 16-bit ints (#809) 152 153### Crate 154- Bumped MSRV (min supported Rust version) to 1.32.0 155- Updated to Rust Edition 2018 (#823, #824) 156- Removed dependence on `rand_xorshift`, `rand_isaac`, `rand_jitter` crates (#759, #765) 157- Remove dependency on `winapi` (#724) 158- Removed all `build.rs` files (#824) 159- Removed code already deprecated in version 0.6 (#757) 160- Removed the serde1 feature (It's still available for backwards compatibility, but it does not do anything. #830) 161- Many documentation changes 162 163### rand_core 164- Updated to `rand_core` 0.5.0 165- `Error` type redesigned with new API (#800) 166- Move `from_entropy` method to `SeedableRng` and remove `FromEntropy` (#800) 167- `SeedableRng::from_rng` is now expected to be value-stable (#815) 168 169### Standard RNGs 170- OS interface moved from `rand_os` to new `getrandom` crate (#765, [getrandom](https://github.com/rust-random/getrandom)) 171- Use ChaCha for `StdRng` and `ThreadRng` (#792) 172- Feature-gate `SmallRng` (#792) 173- `ThreadRng` now supports `Copy` (#758) 174- Deprecated `EntropyRng` (#765) 175- Enable fork protection of ReseedingRng without `std` (#724) 176 177### Distributions 178- Many distributions have been moved to `rand_distr` (#761) 179- `Bernoulli::new` constructor now returns a `Result` (#803) 180- `Distribution::sample_iter` adjusted for more flexibility (#758) 181- Added `distributions::weighted::alias_method::WeightedIndex` for `O(1)` sampling (#692) 182- Support sampling `NonZeroU*` types with the `Standard` distribution (#728) 183- Optimised `Binomial` distribution sampling (#735, #740, #752) 184- Optimised SIMD float sampling (#739) 185 186### Sequences 187- Make results portable across 32- and 64-bit by using `u32` samples for `usize` where possible (#809) 188 189## [0.6.5] - 2019-01-28 190### Crates 191- Update `rand_core` to 0.4 (#703) 192- Move `JitterRng` to its own crate (#685) 193- Add a wasm-bindgen test crate (#696) 194 195### Platforms 196- Fuchsia: Replaced fuchsia-zircon with fuchsia-cprng 197 198### Doc 199- Use RFC 1946 for doc links (#691) 200- Fix some doc links and notes (#711) 201 202## [0.6.4] - 2019-01-08 203### Fixes 204- Move wasm-bindgen shims to correct crate (#686) 205- Make `wasm32-unknown-unknown` compile but fail at run-time if missing bindingsg (#686) 206 207## [0.6.3] - 2019-01-04 208### Fixes 209- Make the `std` feature require the optional `rand_os` dependency (#675) 210- Re-export the optional WASM dependencies of `rand_os` from `rand` to avoid breakage (#674) 211 212## [0.6.2] - 2019-01-04 213### Additions 214- Add `Default` for `ThreadRng` (#657) 215- Move `rngs::OsRng` to `rand_os` sub-crate; clean up code; use as dependency (#643) ##BLOCKER## 216- Add `rand_xoshiro` sub-crate, plus benchmarks (#642, #668) 217 218### Fixes 219- Fix bias in `UniformInt::sample_single` (#662) 220- Use `autocfg` instead of `rustc_version` for rustc version detection (#664) 221- Disable `i128` and `u128` if the `target_os` is `emscripten` (#671: work-around Emscripten limitation) 222- CI fixes (#660, #671) 223 224### Optimisations 225- Optimise memory usage of `UnitCircle` and `UnitSphereSurface` distributions (no PR) 226 227## [0.6.1] - 2018-11-22 228- Support sampling `Duration` also for `no_std` (only since Rust 1.25) (#649) 229- Disable default features of `libc` (#647) 230 231## [0.6.0] - 2018-11-14 232 233### Project organisation 234- Rand has moved from [rust-lang-nursery](https://github.com/rust-lang-nursery/rand) 235 to [rust-random](https://github.com/rust-random/rand)! (#578) 236- Created [The Rust Random Book](https://rust-random.github.io/book/) 237 ([source](https://github.com/rust-random/book)) 238- Update copyright and licence notices (#591, #611) 239- Migrate policy documentation from the wiki (#544) 240 241### Platforms 242- Add fork protection on Unix (#466) 243- Added support for wasm-bindgen. (#541, #559, #562, #600) 244- Enable `OsRng` for powerpc64, sparc and sparc64 (#609) 245- Use `syscall` from `libc` on Linux instead of redefining it (#629) 246 247### RNGs 248- Switch `SmallRng` to use PCG (#623) 249- Implement `Pcg32` and `Pcg64Mcg` generators (#632) 250- Move ISAAC RNGs to a dedicated crate (#551) 251- Move Xorshift RNG to its own crate (#557) 252- Move ChaCha and HC128 RNGs to dedicated crates (#607, #636) 253- Remove usage of `Rc` from `ThreadRng` (#615) 254 255### Sampling and distributions 256- Implement `Rng.gen_ratio()` and `Bernoulli::new_ratio()` (#491) 257- Make `Uniform` strictly respect `f32` / `f64` high/low bounds (#477) 258- Allow `gen_range` and `Uniform` to work on non-`Copy` types (#506) 259- `Uniform` supports inclusive ranges: `Uniform::from(a..=b)`. This is 260 automatically enabled for Rust >= 1.27. (#566) 261- Implement `TrustedLen` and `FusedIterator` for `DistIter` (#620) 262 263#### New distributions 264- Add the `Dirichlet` distribution (#485) 265- Added sampling from the unit sphere and circle. (#567) 266- Implement the triangular distribution (#575) 267- Implement the Weibull distribution (#576) 268- Implement the Beta distribution (#574) 269 270#### Optimisations 271 272- Optimise `Bernoulli::new` (#500) 273- Optimise `char` sampling (#519) 274- Optimise sampling of `std::time::Duration` (#583) 275 276### Sequences 277- Redesign the `seq` module (#483, #515) 278- Add `WeightedIndex` and `choose_weighted` (#518, #547) 279- Optimised and changed return type of the `sample_indices` function. (#479) 280- Use `Iterator::size_hint()` to speed up `IteratorRandom::choose` (#593) 281 282### SIMD 283- Support for generating SIMD types (#523, #542, #561, #630) 284 285### Other 286- Revise CI scripts (#632, #635) 287- Remove functionality already deprecated in 0.5 (#499) 288- Support for `i128` and `u128` is automatically enabled for Rust >= 1.26. This 289 renders the `i128_support` feature obsolete. It still exists for backwards 290 compatibility but does not have any effect. This breaks programs using Rand 291 with `i128_support` on nightlies older than Rust 1.26. (#571) 292 293 294## [0.5.5] - 2018-08-07 295### Documentation 296- Fix links in documentation (#582) 297 298 299## [0.5.4] - 2018-07-11 300### Platform support 301- Make `OsRng` work via WASM/stdweb for WebWorkers 302 303 304## [0.5.3] - 2018-06-26 305### Platform support 306- OpenBSD, Bitrig: fix compilation (broken in 0.5.1) (#530) 307 308 309## [0.5.2] - 2018-06-18 310### Platform support 311- Hide `OsRng` and `JitterRng` on unsupported platforms (#512; fixes #503). 312 313 314## [0.5.1] - 2018-06-08 315 316### New distributions 317- Added Cauchy distribution. (#474, #486) 318- Added Pareto distribution. (#495) 319 320### Platform support and `OsRng` 321- Remove blanket Unix implementation. (#484) 322- Remove Wasm unimplemented stub. (#484) 323- Dragonfly BSD: read from `/dev/random`. (#484) 324- Bitrig: use `getentropy` like OpenBSD. (#484) 325- Solaris: (untested) use `getrandom` if available, otherwise `/dev/random`. (#484) 326- Emscripten, `stdweb`: split the read up in chunks. (#484) 327- Emscripten, Haiku: don't do an extra blocking read from `/dev/random`. (#484) 328- Linux, NetBSD, Solaris: read in blocking mode on first use in `fill_bytes`. (#484) 329- Fuchsia, CloudABI: fix compilation (broken in Rand 0.5). (#484) 330 331 332## [0.5.0] - 2018-05-21 333 334### Crate features and organisation 335- Minimum Rust version update: 1.22.0. (#239) 336- Create a separate `rand_core` crate. (#288) 337- Deprecate `rand_derive`. (#256) 338- Add `prelude` (and module reorganisation). (#435) 339- Add `log` feature. Logging is now available in `JitterRng`, `OsRng`, `EntropyRng` and `ReseedingRng`. (#246) 340- Add `serde1` feature for some PRNGs. (#189) 341- `stdweb` feature for `OsRng` support on WASM via stdweb. (#272, #336) 342 343### `Rng` trait 344- Split `Rng` in `RngCore` and `Rng` extension trait. 345 `next_u32`, `next_u64` and `fill_bytes` are now part of `RngCore`. (#265) 346- Add `Rng::sample`. (#256) 347- Deprecate `Rng::gen_weighted_bool`. (#308) 348- Add `Rng::gen_bool`. (#308) 349- Remove `Rng::next_f32` and `Rng::next_f64`. (#273) 350- Add optimized `Rng::fill` and `Rng::try_fill` methods. (#247) 351- Deprecate `Rng::gen_iter`. (#286) 352- Deprecate `Rng::gen_ascii_chars`. (#279) 353 354### `rand_core` crate 355- `rand` now depends on new `rand_core` crate (#288) 356- `RngCore` and `SeedableRng` are now part of `rand_core`. (#288) 357- Add modules to help implementing RNGs `impl` and `le`. (#209, #228) 358- Add `Error` and `ErrorKind`. (#225) 359- Add `CryptoRng` marker trait. (#273) 360- Add `BlockRngCore` trait. (#281) 361- Add `BlockRng` and `BlockRng64` wrappers to help implementations. (#281, #325) 362- Revise the `SeedableRng` trait. (#233) 363- Remove default implementations for `RngCore::next_u64` and `RngCore::fill_bytes`. (#288) 364- Add `RngCore::try_fill_bytes`. (#225) 365 366### Other traits and types 367- Add `FromEntropy` trait. (#233, #375) 368- Add `SmallRng` wrapper. (#296) 369- Rewrite `ReseedingRng` to only work with `BlockRngCore` (substantial performance improvement). (#281) 370- Deprecate `weak_rng`. Use `SmallRng` instead. (#296) 371- Deprecate `AsciiGenerator`. (#279) 372 373### Random number generators 374- Switch `StdRng` and `thread_rng` to HC-128. (#277) 375- `StdRng` must now be created with `from_entropy` instead of `new` 376- Change `thread_rng` reseeding threshold to 32 MiB. (#277) 377- PRNGs no longer implement `Copy`. (#209) 378- `Debug` implementations no longer show internals. (#209) 379- Implement `Clone` for `ReseedingRng`, `JitterRng`, OsRng`. (#383, #384) 380- Implement serialization for `XorShiftRng`, `IsaacRng` and `Isaac64Rng` under the `serde1` feature. (#189) 381- Implement `BlockRngCore` for `ChaChaCore` and `Hc128Core`. (#281) 382- All PRNGs are now portable across big- and little-endian architectures. (#209) 383- `Isaac64Rng::next_u32` no longer throws away half the results. (#209) 384- Add `IsaacRng::new_from_u64` and `Isaac64Rng::new_from_u64`. (#209) 385- Add the HC-128 CSPRNG `Hc128Rng`. (#210) 386- Change ChaCha20 to have 64-bit counter and 64-bit stream. (#349) 387- Changes to `JitterRng` to get its size down from 2112 to 24 bytes. (#251) 388- Various performance improvements to all PRNGs. 389 390### Platform support and `OsRng` 391- Add support for CloudABI. (#224) 392- Remove support for NaCl. (#225) 393- WASM support for `OsRng` via stdweb, behind the `stdweb` feature. (#272, #336) 394- Use `getrandom` on more platforms for Linux, and on Android. (#338) 395- Use the `SecRandomCopyBytes` interface on macOS. (#322) 396- On systems that do not have a syscall interface, only keep a single file descriptor open for `OsRng`. (#239) 397- On Unix, first try a single read from `/dev/random`, then `/dev/urandom`. (#338) 398- Better error handling and reporting in `OsRng` (using new error type). (#225) 399- `OsRng` now uses non-blocking when available. (#225) 400- Add `EntropyRng`, which provides `OsRng`, but has `JitterRng` as a fallback. (#235) 401 402### Distributions 403- New `Distribution` trait. (#256) 404- Add `Distribution::sample_iter` and `Rng::::sample_iter`. (#361) 405- Deprecate `Rand`, `Sample` and `IndependentSample` traits. (#256) 406- Add a `Standard` distribution (replaces most `Rand` implementations). (#256) 407- Add `Binomial` and `Poisson` distributions. (#96) 408- Add `Bernoulli` dsitribution. (#411) 409- Add `Alphanumeric` distribution. (#279) 410- Remove `Closed01` distribution, add `OpenClosed01`. (#274, #420) 411- Rework `Range` type, making it possible to implement it for user types. (#274) 412- Rename `Range` to `Uniform`. (#395) 413- Add `Uniform::new_inclusive` for inclusive ranges. (#274) 414- Use widening multiply method for much faster integer range reduction. (#274) 415- `Standard` distribution for `char` uses `Uniform` internally. (#274) 416- `Standard` distribution for `bool` uses sign test. (#274) 417- Implement `Standard` distribution for `Wrapping<T>`. (#436) 418- Implement `Uniform` distribution for `Duration`. (#427) 419 420 421## [0.4.3] - 2018-08-16 422### Fixed 423- Use correct syscall number for PowerPC (#589) 424 425 426## [0.4.2] - 2018-01-06 427### Changed 428- Use `winapi` on Windows 429- Update for Fuchsia OS 430- Remove dev-dependency on `log` 431 432 433## [0.4.1] - 2017-12-17 434### Added 435- `no_std` support 436 437 438## [0.4.0-pre.0] - 2017-12-11 439### Added 440- `JitterRng` added as a high-quality alternative entropy source using the 441 system timer 442- new `seq` module with `sample_iter`, `sample_slice`, etc. 443- WASM support via dummy implementations (fail at run-time) 444- Additional benchmarks, covering generators and new seq code 445 446### Changed 447- `thread_rng` uses `JitterRng` if seeding from system time fails 448 (slower but more secure than previous method) 449 450### Deprecated 451 - `sample` function deprecated (replaced by `sample_iter`) 452 453 454## [0.3.20] - 2018-01-06 455### Changed 456- Remove dev-dependency on `log` 457- Update `fuchsia-zircon` dependency to 0.3.2 458 459 460## [0.3.19] - 2017-12-27 461### Changed 462- Require `log <= 0.3.8` for dev builds 463- Update `fuchsia-zircon` dependency to 0.3 464- Fix broken links in docs (to unblock compiler docs testing CI) 465 466 467## [0.3.18] - 2017-11-06 468### Changed 469- `thread_rng` is seeded from the system time if `OsRng` fails 470- `weak_rng` now uses `thread_rng` internally 471 472 473## [0.3.17] - 2017-10-07 474### Changed 475 - Fuchsia: Magenta was renamed Zircon 476 477## [0.3.16] - 2017-07-27 478### Added 479- Implement Debug for mote non-public types 480- implement `Rand` for (i|u)i128 481- Support for Fuchsia 482 483### Changed 484- Add inline attribute to SampleRange::construct_range. 485 This improves the benchmark for sample in 11% and for shuffle in 16%. 486- Use `RtlGenRandom` instead of `CryptGenRandom` 487 488 489## [0.3.15] - 2016-11-26 490### Added 491- Add `Rng` trait method `choose_mut` 492- Redox support 493 494### Changed 495- Use `arc4rand` for `OsRng` on FreeBSD. 496- Use `arc4random(3)` for `OsRng` on OpenBSD. 497 498### Fixed 499- Fix filling buffers 4 GiB or larger with `OsRng::fill_bytes` on Windows 500 501 502## [0.3.14] - 2016-02-13 503### Fixed 504- Inline definitions from winapi/advapi32, which decreases build times 505 506 507## [0.3.13] - 2016-01-09 508### Fixed 509- Compatible with Rust 1.7.0-nightly (needed some extra type annotations) 510 511 512## [0.3.12] - 2015-11-09 513### Changed 514- Replaced the methods in `next_f32` and `next_f64` with the technique described 515 Saito & Matsumoto at MCQMC'08. The new method should exhibit a slightly more 516 uniform distribution. 517- Depend on libc 0.2 518 519### Fixed 520- Fix iterator protocol issue in `rand::sample` 521 522 523## [0.3.11] - 2015-08-31 524### Added 525- Implement `Rand` for arrays with n <= 32 526 527 528## [0.3.10] - 2015-08-17 529### Added 530- Support for NaCl platforms 531 532### Changed 533- Allow `Rng` to be `?Sized`, impl for `&mut R` and `Box<R>` where `R: ?Sized + Rng` 534 535 536## [0.3.9] - 2015-06-18 537### Changed 538- Use `winapi` for Windows API things 539 540### Fixed 541- Fixed test on stable/nightly 542- Fix `getrandom` syscall number for aarch64-unknown-linux-gnu 543 544 545## [0.3.8] - 2015-04-23 546### Changed 547- `log` is a dev dependency 548 549### Fixed 550- Fix race condition of atomics in `is_getrandom_available` 551 552 553## [0.3.7] - 2015-04-03 554### Fixed 555- Derive Copy/Clone changes 556 557 558## [0.3.6] - 2015-04-02 559### Changed 560- Move to stable Rust! 561 562 563## [0.3.5] - 2015-04-01 564### Fixed 565- Compatible with Rust master 566 567 568## [0.3.4] - 2015-03-31 569### Added 570- Implement Clone for `Weighted` 571 572### Fixed 573- Compatible with Rust master 574 575 576## [0.3.3] - 2015-03-26 577### Fixed 578- Fix compile on Windows 579 580 581## [0.3.2] - 2015-03-26 582 583 584## [0.3.1] - 2015-03-26 585### Fixed 586- Fix compile on Windows 587 588 589## [0.3.0] - 2015-03-25 590### Changed 591- Update to use log version 0.3.x 592 593 594## [0.2.1] - 2015-03-22 595### Fixed 596- Compatible with Rust master 597- Fixed iOS compilation 598 599 600## [0.2.0] - 2015-03-06 601### Fixed 602- Compatible with Rust master (move from `old_io` to `std::io`) 603 604 605## [0.1.4] - 2015-03-04 606### Fixed 607- Compatible with Rust master (use wrapping ops) 608 609 610## [0.1.3] - 2015-02-20 611### Fixed 612- Compatible with Rust master 613 614### Removed 615- Removed Copy implementations from RNGs 616 617 618## [0.1.2] - 2015-02-03 619### Added 620- Imported functionality from `std::rand`, including: 621 - `StdRng`, `SeedableRng`, `TreadRng`, `weak_rng()` 622 - `ReaderRng`: A wrapper around any Reader to treat it as an RNG. 623- Imported documentation from `std::rand` 624- Imported tests from `std::rand` 625 626 627## [0.1.1] - 2015-02-03 628### Added 629- Migrate to a cargo-compatible directory structure. 630 631### Fixed 632- Do not use entropy during `gen_weighted_bool(1)` 633 634 635## [Rust 0.12.0] - 2014-10-09 636### Added 637- Impl Rand for tuples of arity 11 and 12 638- Include ChaCha pseudorandom generator 639- Add `next_f64` and `next_f32` to Rng 640- Implement Clone for PRNGs 641 642### Changed 643- Rename `TaskRng` to `ThreadRng` and `task_rng` to `thread_rng` (since a 644 runtime is removed from Rust). 645 646### Fixed 647- Improved performance of ISAAC and ISAAC64 by 30% and 12 % respectively, by 648 informing the optimiser that indexing is never out-of-bounds. 649 650### Removed 651- Removed the Deprecated `choose_option` 652 653 654## [Rust 0.11.0] - 2014-07-02 655### Added 656- document when to use `OSRng` in cryptographic context, and explain why we use `/dev/urandom` instead of `/dev/random` 657- `Rng::gen_iter()` which will return an infinite stream of random values 658- `Rng::gen_ascii_chars()` which will return an infinite stream of random ascii characters 659 660### Changed 661- Now only depends on libcore! 662- Remove `Rng.choose()`, rename `Rng.choose_option()` to `.choose()` 663- Rename OSRng to OsRng 664- The WeightedChoice structure is no longer built with a `Vec<Weighted<T>>`, 665 but rather a `&mut [Weighted<T>]`. This means that the WeightedChoice 666 structure now has a lifetime associated with it. 667- The `sample` method on `Rng` has been moved to a top-level function in the 668 `rand` module due to its dependence on `Vec`. 669 670### Removed 671- `Rng::gen_vec()` was removed. Previous behavior can be regained with 672 `rng.gen_iter().take(n).collect()` 673- `Rng::gen_ascii_str()` was removed. Previous behavior can be regained with 674 `rng.gen_ascii_chars().take(n).collect()` 675- {IsaacRng, Isaac64Rng, XorShiftRng}::new() have all been removed. These all 676 relied on being able to use an OSRng for seeding, but this is no longer 677 available in librand (where these types are defined). To retain the same 678 functionality, these types now implement the `Rand` trait so they can be 679 generated with a random seed from another random number generator. This allows 680 the stdlib to use an OSRng to create seeded instances of these RNGs. 681- Rand implementations for `Box<T>` and `@T` were removed. These seemed to be 682 pretty rare in the codebase, and it allows for librand to not depend on 683 liballoc. Additionally, other pointer types like Rc<T> and Arc<T> were not 684 supported. 685- Remove a slew of old deprecated functions 686 687 688## [Rust 0.10] - 2014-04-03 689### Changed 690- replace `Rng.shuffle's` functionality with `.shuffle_mut` 691- bubble up IO errors when creating an OSRng 692 693### Fixed 694- Use `fill()` instead of `read()` 695- Rewrite OsRng in Rust for windows 696 697## [0.10-pre] - 2014-03-02 698### Added 699- Separate `rand` out of the standard library 700