<div><br><div class="gmail_quote"><div dir="auto">On Tue, Oct 17, 2017 at 11:01 Thorsten Seitz &lt;<a href="mailto:tseitz42@icloud.com">tseitz42@icloud.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div><div><br></div><div><br>Am 17.10.2017 um 14:46 schrieb Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt;:<br><br></div><blockquote type="cite"><div><div>On Tue, Oct 17, 2017 at 01:03 Thorsten Seitz &lt;<a href="mailto:tseitz42@icloud.com" target="_blank">tseitz42@icloud.com</a>&gt; wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div><div><br></div><div><br>Am 17.10.2017 um 01:43 schrieb Xiaodi Wu via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;:<br><br></div><blockquote type="cite"><div><div>On Mon, Oct 16, 2017 at 6:10 PM, Jonathan Hull <span>&lt;<a href="mailto:jhull@gbis.com" target="_blank">jhull@gbis.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><blockquote type="cite"><span><div>On Oct 16, 2017, at 1:05 PM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="m_4951309342097714030m_-3835515892194096367m_-1880088669012463808Apple-interchange-newline"></span><div><div><br><div class="gmail_quote"><span><div dir="auto">On Mon, Oct 16, 2017 at 10:49 Jonathan Hull &lt;<a href="mailto:jhull@gbis.com" target="_blank">jhull@gbis.com</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"><br><div><blockquote type="cite"><div>On Oct 16, 2017, at 7:20 AM, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:</div><br class="m_4951309342097714030m_-3835515892194096367m_-1880088669012463808m_-3004557228007923799Apple-interchange-newline"><div><blockquote class="gmail_quote" 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;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 style="word-wrap:break-word"><div>To start with, the one you gave as an example at the beginning of this discussion: Two sets with identical elements which have different internal storage and thus give different orderings as sequences.  You yourself have argued that the confusion around this is enough of a problem that we need to make a source-breaking change (renaming it) to warn people that the results of the ‘elementsEqual’ algorithm are undefined for sets and dictionaries.</div></div></blockquote><div dir="auto" 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"><br></div><div dir="auto" 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">No, I am arguing that the confusion about ‘elementsEqual’ is foremost a problem with its name; the result of this operation is not at all undefined for two sets but actually clearly defined: it returns true if two sets have the same elements in the same iteration order, which is a publicly observable behavior of sets (likewise dictionaries).</div></div></blockquote></div><br></div><div style="word-wrap:break-word"><div>But that iteration order is undefined and could easily change due to changes in the private/internal structure of sets/dictionaries.  Algorithms that rely on that “publicly observable behavior” (i.e. leaking of internals) will suddenly break.</div></div></blockquote><div dir="auto"><br></div></span><div dir="auto">And an algorithm in which such “sudden breakage” would occur is…?</div></div></div></div></blockquote><div><br></div><div>Here are a few off the top of my head:</div><div><br></div><div>func hasPrefix(Sequence)-&gt;Bool</div><div>func hasSuffix(Sequence)-&gt;Bool</div><div>func containsSubsequence(Sequence)-&gt;Bool</div><div><br></div><div>What do these methods mean with regards to Set’s “publicly observable behavior”?</div></div></div></blockquote><div><br></div><div>In what way do these algorithms break? They would continue to determine--correctly--whether an instance of Set, when iterated, begins with, ends with, or contains (respectively) a subsequence that matches the argument.</div></div></div></div>
</div></blockquote><div><br></div></div><div dir="auto">Why do you not answe the question, what these methods *mean* for a Set?<div>Still waiting for a use case.</div></div></blockquote><div dir="auto"><br></div><div dir="auto">The method means exactly what I just said: the iteration order of one set matches the iteration order of another sequence. I’ve given you one use case and others have given more.</div></div></div></div></blockquote><div><br></div></div><div dir="auto">Sorry, the use case you gave was just a clever trick instead of using `contains` and Float.isNaN. No one else has provided a use case for `elementsEqual` yet.</div></blockquote><div dir="auto"><br></div><div dir="auto">The purpose of protocols is to enable useful generic code. You cannot use isNaN in generic code that operates on Collection (or even Set where Element : Numeric) to prevent NaN from blowing up your sort. Comparing a value to itself is not a “clever trick” but a common and ordinary method of checking for NaN.</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 dir="auto"></div><div dir="auto"><div><br></div><div>-Thorsten</div></div><div dir="auto"><div><br></div><div><br><blockquote type="cite"><div><div><div class="gmail_quote"><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div></div></div><div dir="auto"><div><br></div><div>-Thorsten</div></div><div dir="auto"><div><br><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></div></div></blockquote></div></div>
</div></blockquote></div></div></blockquote></div></div>