Closed dhardy closed 1 month ago
I was intending to leave these changes until after rand
v0.9, but now think we should get these merged first: upgrading to 0.9 already brings many small breaking changes for users; rolling these into a single (larger) changeset should result in less work for those upgrading.
Some more thoughts:
thread_rng
→ rng
is an easy search+replace (no false positives likely). Is there a downside (e.g. the possibility of adding another RNG)? We've stuck with this rough design for several years now (but changing the algorithm, seeding, access control).Rng::gen_range
which uses Uniform
... weird but okay (though we could hypothetically rename to Rng::uniform
and add rand::uniform
).This PR no longer removes the rand::random
function (left to a future PR). Other changes of this PR I'd like to see merged, unless there's any issue I haven't spotted here. Ultimately I hope we can replace these inherent impls with native Rust support for inherent trait methods.
I want to agree, especially since these inherent impls will not work for any RNG outside of rand
. The objective was to ease usage (esp. for people new to Rust), but the result making this less consistent across RNGs does not help.
CHANGELOG.md
entrySummary
Make
Rng
methods inherent methods on RNGs, and more usability tweaks.Motivation and details
This follows arguments made in #989 and #1488. Specifically,
Rng::gen_iter
torandom_iter
since it is the iterable version ofRng::random
Rng
methods onStdRng
,SmallRng
,ThreadRng
andStepRng
We removeChange removed from this PR.rand::random
, favouring usage ofrand::thread_rng().random
instead. This is not necessary but is more in-line with otherRng
methods.I did consider publicly exporting
impl_rng_methods_as_inherent
, but realised a problem:rand_chacha
cannot use this sincerand
depends onrand_chacha
(and the macro cannot be moved torand_core
); some other RNG crates could use this but should not depend onrand
.Incomplete / questions
Do we want to rename
gen_range
to justrange
? What aboutgen_bool
,gen_ratio
?Do we want to remove
rand::random
? If not, do we want to addrandom_iter
,gen_range
etc. as free functions? (rand::random
is hardly used insiderand
itself. This GitHub search has 33k code hits but it's hard to tell how many are genuine matches.)@oconnor663 gave motivation to rename
thread_rng
to justrng
:We could do this. If this were a clean design then probably we should: it's an implementation detail that we use a thread-local generator and not, say, a mutex over a single (static) generator. But it's also rather widely used: approx 150 mentions in this repo and 176k code hits via GitHub search.