Unfortunately, it wasn’t my only worry. The simplifications from dropping 
Randomizable and random(in: ) are also very welcome for me.

> On 8 Jan 2018, at 23:08, Alejandro Alonso <aalonso...@outlook.com> wrote:
> 
> I made changes last night that uses methods rather than properties if that’s 
> all you’re worried about.
> 
> Sent from my iPhone
> 
> On Jan 8, 2018, at 15:27, David Hart via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> 
>> I much prefer the API from Nate Cook compared to the previous proposal. Its 
>> simpler, while still very powerful, and closer to Swift conventions (method 
>> instead of property).
>> 
>>> On 8 Jan 2018, at 20:02, Nate Cook via swift-evolution 
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> I created a playground to explore this question, starting with a minimal 
>>> subset of the proposal’s additions and building from there. The attached 
>>> playground demonstrates what’s possible with this subset on the first page, 
>>> then uses subsequent pages to explore how the main random facilities of the 
>>> C++ STL work under this model. (In my opinion, they work pretty well!)
>>> 
>>> The subset in the playground has three main differences from the proposal:
>>>  - It doesn't include a Randomizable protocol or a random property on 
>>> numeric types.
>>>  - It doesn't include the static random(in:) methods on numeric types, 
>>> either.
>>>  - The RandomNumberGenerator protocol doesn't have an associated type. 
>>> Instead, it requires all conforming types to produce UInt64 values.
>>> 
>>> I’ve tried to include a bit of real-world usage in the playground to 
>>> demonstrate what writing code would look like with these additions. Please 
>>> take a look!
>>> 
>>> Nate
>>> 
>>> <Random.playground.zip>
>>> 
>>>> On Dec 2, 2017, at 9:50 PM, Dave Abrahams via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>> I don’t have much to say about this other than that I think the discussion 
>>>> seems way too narrow, focusing on spelling rather than on functionality 
>>>> and composability.  I consider the “generic random number library” design 
>>>> to be a mostly-solved problem, in the C++ standard library 
>>>> (http://en.cppreference.com/w/cpp/numeric/random 
>>>> <http://en.cppreference.com/w/cpp/numeric/random>).  Whatever goes into 
>>>> the Swift standard library does not need to have all those features right 
>>>> away, but should support being extended into something having the same 
>>>> general shape. IMO the right design strategy is to implement and use a 
>>>> Swift version of C++’s facilities and only then consider proposing 
>>>> [perhaps a subset of] that design for standardization in Swift.
>>>> 
>>>> Sent from my iPad
>>>> 
>>>> On Dec 2, 2017, at 5:12 PM, Kyle Murray via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>>> 
>>>>>> On Dec 2, 2017, at 6:02 PM, Xiaodi Wu via swift-evolution 
>>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>>> 
>>>>>> Instead, we ought to make clear to users both the features and the 
>>>>>> limitations of this API, to encourage use where suitable and to 
>>>>>> discourage use where unsuitable.
>>>>> 
>>>>> I like that you're considering the balance here. I've been lightly 
>>>>> following this thread and want to add my thoughts on keeping crypto and 
>>>>> pseudorandomness out of the name of at least one random API intended for 
>>>>> general use.
>>>>> 
>>>>> For someone who doesn't know or care about the subtleties of insecure or 
>>>>> pseudorandom numbers, I'm not sure that the name insecureRandom is 
>>>>> effectively much different than badRandom, at least in terms of the 
>>>>> information it conveys to non-experts. To Greg's point, that's the 
>>>>> opposite of the signal that the API name should suggest because it's what 
>>>>> most people should use most of the time. As you  say, this API is being 
>>>>> designed for general use.
>>>>> 
>>>>> There's a cost to adding extra complexity to names, too. I don't think 
>>>>> it's far-fetched to suspect that people who find insecureRandom in an 
>>>>> autocomplete listing or search will think "Where's the plain random 
>>>>> function?"... and then go looking for a community extension that will 
>>>>> inevitably provide a trivial alias: func random() { return 
>>>>> insecureRandom() }. That's the sort of adoption I'd expect from something 
>>>>> for new programmers, like Swift Playgrounds. Someone's introduction to 
>>>>> randomness in programming should probably involve no more than a 
>>>>> straightforward mapping from the elementary definition, rather than 
>>>>> forcing a teaching moment from more advanced math.
>>>>> 
>>>>> I think there are better places for caveat information than in the API 
>>>>> names themselves; documentation being one clear destination. This is in 
>>>>> contrast with Unsafe*Pointer, where the safety element is critical enough 
>>>>> to be elevated to be more than caveat-level information. You can go 
>>>>> really far and create really cool things before these caveats start to 
>>>>> apply. Using randomness as a black box in an intro programming 
>>>>> environment seems like a much more common scenario than someone 
>>>>> attempting to roll their first crypto by only reading API names and 
>>>>> hoping for the best.
>>>>> 
>>>>> -Kyle
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>> 
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to