[swift-evolution] [Draft] Rename Sequence.elementsEqual
xiaodi.wu at gmail.com
Tue Oct 17 07:46:56 CDT 2017
On Tue, Oct 17, 2017 at 01:03 Thorsten Seitz <tseitz42 at icloud.com> wrote:
> Am 17.10.2017 um 01:43 schrieb Xiaodi Wu via swift-evolution <
> swift-evolution at swift.org>:
> On Mon, Oct 16, 2017 at 6:10 PM, Jonathan Hull <jhull at gbis.com> wrote:
>> On Oct 16, 2017, at 1:05 PM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
>> On Mon, Oct 16, 2017 at 10:49 Jonathan Hull <jhull at gbis.com> wrote:
>>> On Oct 16, 2017, at 7:20 AM, Xiaodi Wu <xiaodi.wu at gmail.com> wrote:
>>> 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
>>> 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).
>>> 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.
>> And an algorithm in which such “sudden breakage” would occur is…?
>> Here are a few off the top of my head:
>> func hasPrefix(Sequence)->Bool
>> func hasSuffix(Sequence)->Bool
>> func containsSubsequence(Sequence)->Bool
>> What do these methods mean with regards to Set’s “publicly observable
> 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
> Why do you not answe the question, what these methods *mean* for a Set?
> Still waiting for a use case.
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.
> swift-evolution mailing list
> swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution