> On Sep 11, 2017, at 9:43 PM, Brent Royal-Gordon <[email protected]> > wrote: > >> On Sep 9, 2017, at 10:31 PM, Chris Lattner via swift-evolution >> <[email protected] <mailto:[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.
+1 to this general plan! -Chris
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
