Description
I am no longer happy about depending on the rand
crates. There is too much churn, too many crates, and IMO, worst of all, there is no desire to add a minimal version check to their CI. Which means anything that depends on quickcheck
in turn cannot reliably have its own minimal version check.
Because I am tired of depending on rand
, I have started removing it completely where possible. For example, in walkdir
, I've removed quickcheck as a dependency. In ripgrep, I've removed tempfile
as a dependency, because it in turn was the only thing bringing rand
into ripgrep's dependency tree.
I don't see any other path forward here. I can either continue to grin and bear rand
, drop everything that depends on randomness, or figure out how to generate randomness without rand
. Specifically, I'd very much like to add a minimal version check back to the regex
crate, which catches bugs that happen in practice. (See here and here.) My sense is that there is some design space in the ecosystem for a simple source of randomness that doesn't need to be cryptographically secure, and an API that does not experience significant churn. Certainly, quickcheck does not need a cryptographic random number generator.
With that said, there is some infrastructure in the rand
API that is incredibly useful. For example, quickcheck makes heavy use of the Rng::gen
method for generating values based on type.
So it seems like if we have something like the Rng
trait with with a non-cryptographic RNG, then we'd be probably good to go.
Are there other avenues here? What have I missed? My experience in building infrastructure for randomness is pretty limited, so am I underestimating the difficulty involved here?
Another side to this question is whether any users of quickcheck are leveraging parts of the rand
ecosystem that would be difficult or impossible to do if we broke ties with rand
.