[swift-evolution] [Proposal] Random Unification
David Hart
david at hartbit.com
Tue Sep 12 17:51:38 CDT 2017
> On 12 Sep 2017, at 06:45, Brent Royal-Gordon via swift-evolution <swift-evolution at swift.org> wrote:
>
>> On Sep 9, 2017, at 10:31 PM, Chris Lattner via swift-evolution <swift-evolution at swift.org> 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
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170913/29ae0ff7/attachment.html>
More information about the swift-evolution
mailing list