> On 12 Sep 2017, at 06:45, Brent Royal-Gordon via swift-evolution > <[email protected]> wrote: > >> 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.
I wholeheartedly agree with that plan. The mix of protocol + simple out of the box implementation that is a good default provides both simplicity and flexibility. PS: still wish it was the same for the Standard Library hashing mechanism. > -- > Brent Royal-Gordon > Architechies > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
