Make PRNGs implement Clone instead of Copy #20199
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Remove derivations of
Copy
trait fromChaChaRng
,IsaacRng
,Isaac64Rng
and
StdRng
and implement theClone
trait instead.Copying is an implicit operation and the copy shares its internal state with
the original generator. This means the the two generators will yield exactly
the same sequence of values. This behaviour is considerably easy to trigger
by, for example, passing the generator by value to a function.
Clone
trait, on the other hand, does no implicit copying. The user will onlybe able to either move the generator or ask for a copy explicitly, via the
clone
method.The only downside to this patch is the fact that the implementations of
Clone::clone
methods do not optimise down to a single memcpy, like thederived
Copy
implementations did.Although the
Copy
implementations of these random number generators aresuspected to not be used much, this is a [breaking-change].
Fixes #20170.