> On Sep 9, 2017, at 10:31 PM, Chris Lattner via swift-evolution
> <[email protected]> wrote:
>
> - I’d love to see several of the most common random kinds supported, and I
> agree it would be nice (but not required IMO) for the default to be
> cryptographically secure.
I would be very careful about choosing a "simple" solution. There is a log, sad
history of languages trying to provide a "simple" random number generator and
accidentally providing a powerful footgun instead. But:
> - We should avoid the temptation to nuke this mosquito with a heavy handed
> solution designed to solve all of the world’s problems: For example, the C++
> random number stuff is crazily over-general. The stdlib should aim to solve
> (e.g.) the top 3 most common cases, and let a more specialized external
> library solve the fully general problem (e.g. seed management, every
> distribution imaginable, etc).
That's not to say we need to have seven engines and twenty distributions like
C++ does. The standard library is not a statistics package; it exists to
provide basic abstractions and fundamental functionality. I don't think it
should worry itself with distributions at all. I think it needs to provide:
1. The abstraction used to plug in different random number generators
(i.e. an RNG protocol of some kind).
2. APIs on existing standard library types which perform basic
randomness-related functions correctly—essentially, encapsulating Knuth.
(Specifically, I think selecting a random element from a collection (which also
covers generating a random integer in a range), shuffling a mutable collection,
and generating a random float will do the trick.)
3. A default RNG with a conservative design that will sometimes be too
slow, but will never be insufficiently random.
If you want to pick elements with a Poisson distribution, go get a statistics
framework; if you want repeatable random numbers for testing, use a seedable
PRNG from XCTest or some other test tools package. These can leverage the
standard library's RNG protocol to work with existing random number generators
or random number consumers.
--
Brent Royal-Gordon
Architechies
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution