<div dir="ltr">On Tue, Jan 2, 2018 at 2:35 AM, Alejandro Alonso via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">




<div>
<div name="messageBodySection" style="font-size:14px;font-family:-apple-system,BlinkMacSystemFont,sans-serif">
Hello swift evolution once again, I’ve been hard at work considering every email and revising the proposal. I’ve made lots of changes and additions to the proposal to discuss some problems we’ve had (T.random), and walks through detailed design. You can see
 the proposal here: <a href="https://github.com/apple/swift-evolution/pull/760" target="_blank">https://github.com/<wbr>apple/swift-evolution/pull/760</a><wbr> .
<div><br>
</div>
<div>A big issue that lots of people pointed out was `T.random %` and to remove it completely from the API. To give a gist of why I continue to support T.random:</div>
<div><br>
</div>
<div>1. Modulo bias misuse is only a problem to types that conform to `BinaryInteger`. Why remove this functionality if only a portion of the types have the ability of misuse. `Double.random % 10` is a good example of where modulo isn’t implemented here as
 it produces the error, “&#39;%&#39; is unavailable: Use truncatingRemainder instead”.</div>
<div><br>
</div>
<div>2. `Int.random(in: Int.min … Int.max)` doesn’t work. For developers that actually rely on this functionality, the work around that was discussed earlier simply doesn’t work. `Int.min … Int.max`’s count property exceeds that of `Int`’s numerical range.
 A working work around would be something along the lines of `Int(truncatingIfNeeded: Random.default.next(UInt.self)<wbr>)` which creates a pain point for those developers. As the goal of this proposal to remove pain points regarding random, this change does the
 opposite.</div>
<div><br>
</div>
<div>I’m interested to hear if anymore discussion around this, or any other issues come up.</div></div></div></blockquote><div><br></div><div>There is no reason why `(Int.min...Int.max).random` (as I believe the consensus suggestion was) &quot;doesn&#39;t work.&quot; Certainly, it doesn&#39;t work if you write only a default implementation on Collection. But `Range where Bound : FixedWidthInteger &amp; SignedInteger` should have its own implementation of `random` anyway (for performance reasons, if nothing else) and there is no impediment to a working implementation.<br></div><div><br></div><div>As to your first point: as evidenced by concrete data given by others above, the overwhelming majority of uses of `random %` appear to be erroneous, and of course the great majority of uses of `T.random` will be on types that conform to `BinaryInteger`. Again, I repeat my concern that you are naming multiple distinct things &quot;random&quot;, which is making it difficult to carry on this discussion. `BinaryInteger.random` is distinct in its semantics, and this is precisely the method that is often used and often misused. There is no reason why other things that you name &quot;random&quot; shouldn&#39;t exist just because `BinaryInteger` shouldn&#39;t have a method named `random`, and it&#39;s spurious to say &quot;why remove this functionality if only a portion of the types have the ability of misuse,&quot; when this _functionality_ and its misuse are specific to `BinaryInteger`.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div><div name="messageReplySection" style="font-size:14px;font-family:-apple-system,BlinkMacSystemFont,sans-serif">
On Sep 8, 2017, 11:52 AM -0500, Alejandro Alonso via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;, wrote:<br>
<blockquote type="cite" style="margin:5px;padding-left:10px;border-left-width:thin;border-left-style:solid;border-left-color:rgb(26,188,156)">
<div name="messageBodySection" style="font-size:14px;font-family:-apple-system,BlinkMacSystemFont,sans-serif">
Hello swift evolution, I would like to propose a unified approach to `random()` in Swift. I have a simple implementation here <a href="https://gist.github.com/Azoy/5d294148c8b97d20b96ee64f434bb4f5" target="_blank">https://gist.github.com/<wbr>Azoy/<wbr>5d294148c8b97d20b96ee64f434bb4<wbr>f5</a>.
 This implementation is a simple wrapper over existing random functions so existing code bases will not be affected. Also, this approach introduces a new random feature for Linux users that give them access to upper bounds, as well as a lower bound for both
 Glibc and Darwin users. This change would be implemented within Foundation.
<div><br>
</div>
<div>I believe this simple change could have a very positive impact on new developers learning Swift and experienced developers being able to write single random declarations.</div>
<div><br>
</div>
<div>I’d like to hear about your ideas on this proposal, or any implementation changes if need be.</div>
<div><br>
</div>
<div>- Alejando</div>
</div>
<div name="messageReplySection" style="font-size:14px;font-family:-apple-system,BlinkMacSystemFont,sans-serif">
<br>
<div></div>
</div>
</blockquote>
</div>
</div>

<br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br></blockquote></div><br></div></div>