> 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

Reply via email to