On Tue, 17 Dec 2019 at 11:48, Paul Moore <p.f.moore@gmail.com> wrote:

On Tue, 17 Dec 2019 at 11:13, Larry Hastings <larry@hastings.org> wrote:

> I lack this strongly mathematical view of sets others have espoused; instead I view them more like "dicts without values". I'm therefore disgruntled by this inconsistency between what are I see as closely related data structures, and it makes sense to me that they'd maintain their insertion order the same way that dictionaries now do.

I'll admit to a mathematical background, which probably influences my

views. But I view sets as "collections" of values - values are "in"

the set or not. I don't see them operationally, in the sense that you

add and remove things from the set. Adding and removing are mechanisms

for changing the set, but they aren't fundamentally what sets are

about (which for me is membership). So insertion order on sets is

largely meaningless for me (it doesn't matter *how* it got there, what

matters is whether it's there now).

Having said that, I also see dictionaries as mappings from key to

value, so insertion order is mostly not something I care about for

dictionaries either. I can see the use cases for ordered dictionaries,

and now we have insertion order, it's useful occasionally, but it's

not something that was immediately obvious to me based on my

intuition. Similarly, I don't see sets as *needing* insertion order,

although I concede that there probably are use cases, similar to

dictionaries. The question for me, as with dictionaries, is whether

the cost (in terms of clear semantics, constraints on future

implementation choices, and actual performance now) is justified by

the additional capabilities (remembering that personally, I'd consider

insertion order preservation as very much a niche requirement).

As a random data point, I often see the pattern where one needs to remove duplicates

from the list while preserving the order of first appearance.

This is for example needed to get stability in various type-checking situations (like union items, type variables in base classes, type queries etc.)

One can write a four line helper to achieve this, but I can see that having order preserving set could be useful.

So again, it is "nice to have but not really critical".

--

Ivan