Even worse, Set([5,4,3,2,1]) will probably return false although it contains the same elements.
-Thorsten > Am 17.10.2017 um 01:40 schrieb Jonathan Hull via swift-evolution > <swift-evolution@swift.org>: > > To expand on this, Set([1,2,3,4,5]).hasPrefix([1,2,3]) currently returns > true. But let’s say a year from now, we change Set to return an ordering > based on hash values (which is entirely reasonable). Suddenly the same code > may return true or false. > > No guarantees will be broken by doing that, but the result has still changed > because we are building on top of undefined behavior. Collection says nothing > about the ordering over different builds of a program. > > Thanks, > Jon > >>> On Oct 16, 2017, at 4:11 PM, Jonathan Hull via swift-evolution >>> <swift-evolution@swift.org> wrote: >>> >>> >>> On Oct 16, 2017, at 1:05 PM, Xiaodi Wu <xiaodi...@gmail.com> wrote: >>> >>> >>>> On Mon, Oct 16, 2017 at 10:49 Jonathan Hull <jh...@gbis.com> wrote: >>>> >>>>>> On Oct 16, 2017, at 7:20 AM, Xiaodi Wu <xiaodi...@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 dictionaries. >>>>> >>>>> 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 >> behavior”? >> >>> >>>> You keep claiming that this bug is a feature because it is the current >>>> behavior… but that is tautological reasoning. >>>> >>>> Thanks, >>>> Jon >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org >> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution