<div><br><div class="gmail_quote"><div dir="auto">On Mon, Oct 16, 2017 at 14:55 Kevin Nattinger via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><blockquote type="cite"><div>On Oct 16, 2017, at 11:23 AM, David Sweeris via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br class="m_4752731825847638674Apple-interchange-newline"><div><div dir="auto"><div><span></span></div><div><br><div>On Oct 16, 2017, at 10:42, BJ Homer via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><blockquote type="cite">On Oct 16, 2017, at 8:20 AM, Thorsten Seitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</blockquote><div><blockquote type="cite"><div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div><br><blockquote type="cite">Am 16.10.2017 um 07:19 schrieb Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;:</blockquote></div><div><blockquote type="cite"><div><div><div class="gmail_extra"><div class="gmail_quote"><div>What useful generic algorithms would this protocol support that are not already possible?</div></div></div></div></div></blockquote><div><br></div>It would allow expressing generic algorithms depending on an order.</div><div><br></div><div>-Thorsten</div></div></div></blockquote></div><br><div>We can already express generic algorithms that depend on an order—any generic algorithm that works on a <font face="Courier">Sequence</font> works on something that is ordered. A Swift <font face="Courier">Set</font> has an undefined order right now, but a generic algorithm working on any arbitrary Sequence likely doesn’t care about <i>what</i> the order, just that an order exists. And a Swift <font face="Courier">Set</font> does indeed have an order. If you have a generic algorithm that only works on inputs sorted in a particular manner, then you’ve likely either documented that or added a “sortedBy” parameter. Otherwise, you probably just want to be able to iterate through everything.</div><div><br></div><div>Let’s assume, though, that you wanted to write an algorithm that works only on <font face="Courier">MeaningfullyOrdered</font> inputs. </div><div><br></div><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255);color:rgb(186,45,162)">func</span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255)"> extractInfo&lt;T: </span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255);color:rgb(112,61,170)">MeaningfullyOrdered</span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255)">&gt;(</span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255);color:rgb(186,45,162)">_</span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255)"> input: </span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255);color:rgb(79,129,135)">T</span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255)">) {</span><span style="background-color:rgb(255,255,255)"> </span><span style="font-family:Menlo;font-size:11px;background-color:rgb(255,255,255)">}</span><div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(49,89,93);background-color:rgb(255,255,255)">extractInfo<span>(someArray)</span></div></div><div><br></div><div>What stops the caller from simply wrapping the Set in an Array?</div><div><br></div><div><div style="margin:0px;font-stretch:normal;font-size:11px;line-height:normal;font-family:Menlo;color:rgb(49,89,93);background-color:rgb(255,255,255)">extractInfo<span>(</span><span style="color:#703daa">Array</span><span>(someSet))</span></div></div><div><br></div><div>The Array constructed here is going to reflect the arbitrary ordering provided by Set, but as far as the type system is concerned, the input is an Array, which is certainly meaningfully-ordered. Have we gained anything by requiring the caller to wrap the input in an array? We’ve made the call site a bit more awkward, and we’ve lost a bit of performance. We certainly need to be able to convert Sets in to Arrays; to eliminate that would be massively source-breaking, and it’s not clear that allowing that conversion is actively harmful, so it’s unlikely to change in Swift 5.</div></div></blockquote><div><br></div><div>Should/could we just rename `Set` to `UniquedArray` or something like that? This is starting to feel a bit like the access control debate.</div></div></div></div></blockquote><div><br></div></div></div><div style="word-wrap:break-word"><div><div>So essentially convert Set to OrderedSet and not offer a theoretical unordered Set? I think that would be acceptable (if we apply it to dictionaries as well), BUT that doesn&#39;t address the more general case of other, potentially custom unordered Sequences.</div></div></div><div style="word-wrap:break-word"><div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">Think of it this way: all Swift stdlib types that model unordered sequences are in fact ordered—no attempt is made to support the modeling of unordered sequences as unordered Swift types, custom or built-in.</div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br><blockquote type="cite"><div><div dir="auto"><div><div><br></div><div>- Dave Sweeris</div></div></div>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></blockquote></div></div>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div></div>