Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Persistent collections updates (part 4) #177

Conversation

lorentey
Copy link
Member

@lorentey lorentey commented Sep 14, 2022

This is the first in a series of subsequent PRs with large-scale logic changes. This first one concentrates on the representation of node storage, and the patterns of accessing it:

  • Switch to using ManagedBuffer to represent node storage. This has useful performance benefits, but it significantly complicates access to node data. We no longer have direct access to the underlying raw storage: everything needs to go through closures passed to ManagedBuffer.withUnsafeMutablePointers.
  • Introduce struct _Node and struct _Node.UnsafeHandle to represent a (strong) reference to a hash tree node, and a convenient handle for node storage, respectively. Use these instead of directly accessing the ManagedBuffer object, whenever feasible. (_Node holds the implementation of all the actual tree operations -- it provides mutating methods to manipulate a (sub)tree, providing a workable illusion of value semantics on the level of individual subtrees. UnsafeHandle provides both read-only and mutable views into storage inside a node -- mutating operations require (and assume) that the corresponding _Node holds a uniquely held reference to the storage object.)
  • Implement separate paths for in-place mutations vs copy-on-write operation, optimizing both flavors.
  • Go to great lengths to eliminate unnecessary retain-release traffic, whenever possible.
  • Push subtree counts into parent nodes by moving the corresponding field from the node header into the _Node struct. (This results in a cool ~20x speedup for jumping around in the tree by integer offsets.)
  • Implement a type-punned empty root singleton, to allow creating empty trees without allocating anything.

The implementation of dictionary operations remain conceptually unchanged for now (although the details look superficially different now) -- future updates will start tweaking things in earnest.

Checklist

  • I've read the Contribution Guidelines
  • My contributions are licensed under the Swift license.
  • I've followed the coding style of the rest of the project.
  • I've added tests covering all new code paths my change adds to the project (if appropriate).
  • I've added benchmarks covering new functionality (if appropriate).
  • I've verified that my change does not break any existing tests or introduce unexplained benchmark regressions.
  • I've updated the documentation if necessary.

- Switch to using `ManagedBuffer` to represent node storage. This has
  useful performance benefits, but it significantly complicates access
  to node data. We no longer have direct access to the underlying raw
  storage: everything needs to go through closures passed to
  `ManagedBuffer.withUnsafeMutablePointers`.

- Introduce `struct _Node` and `struct _Node.UnsafeHandle` to
  represent a (strong) reference to a hash tree node, and a
  convenient handle for node storage, respectively. Use these instead
  of directly accessing the ManagedBuffer object, whenever feasible.

- Implement separate paths for in-place mutations vs copy-on-write
  operation, optimizing both flavors.

- Go to great lengths to eliminate unnecessary retain-release traffic,
  whenever possible.

- Push subtree counts into parent nodes by moving the corresponding
  field from the node header into the `_Node` struct. (This results in
  a cool ~20x speedup for jumping around in the tree by integer
  offsets.)

- Implement a type-punned empty root singleton, to allow creating
  empty trees without allocating anything.
@lorentey
Copy link
Member Author

Tasks with difference scores larger than 1.05:
  Score   Sum     Improvements Regressions  Name
  23.10   23.10   23.10(#76)   1.000(#0)    PersistentDictionary<Int, Int> sequential iteration, indices (*)
  21.88   21.88   21.88(#76)   1.000(#0)    PersistentDictionary<Int, Int> indexing subscript (*)
  21.36   21.36   21.36(#76)   1.000(#0)    PersistentDictionary<Int, Int>.Keys sequential iteration (*)
  21.34   21.34   21.34(#76)   1.000(#0)    PersistentDictionary<Int, Int>.Values sequential iteration (*)
  8.054   8.054   8.054(#76)   1.000(#0)    PersistentDictionary<Int, Int> unsuccessful index(forKey:) (*)
  5.866   5.866   5.866(#76)   1.000(#0)    PersistentDictionary<Int, Int> successful index(forKey:) (*)
  1.821   1.821   1.821(#76)   1.000(#0)    PersistentDictionary<Int, Int> random removals (missing keys) (*)
  1.817   1.817   1.817(#76)   1.000(#0)    PersistentDictionary<Int, Int> subscript, noop setter (*)
  1.798   1.798   1.798(#76)   1.000(#0)    PersistentDictionary<Int, Int> subscript, remove missing (*)
  1.751   1.751   1.751(#76)   1.000(#0)    PersistentDictionary<Int, Int> updateValue(_:forKey:), existing (*)
  1.736   1.736   1.736(#76)   1.000(#0)    PersistentDictionary<Int, Int> subscript, remove existing, unique (*)
  1.732   1.732   1.732(#76)   1.000(#0)    PersistentDictionary<Int, Int> random removals (existing keys) (*)
  1.720   1.720   1.720(#76)   1.000(#0)    PersistentDictionary<Int, Int> subscript, set existing (*)
  1.554   1.554   1.554(#76)   1.000(#0)    PersistentDictionary<Int, Int> subscript, _modify (*)
  1.538   1.538   1.538(#76)   1.000(#0)    PersistentDictionary<Int, Int> defaulted subscript, _modify existing (*)
  1.481   1.481   1.496(#74)   0.9846(#2)   PersistentDictionary<Int, Int> defaulted subscript, _modify missing (*)
  1.458   1.458   1.471(#74)   0.9867(#2)   PersistentDictionary<Int, Int> updateValue(_:forKey:), insert (*)
  1.240   1.240   1.240(#76)   1.000(#0)    PersistentDictionary<Int, Int> sequential iteration (*)
  1.186   1.186   1.187(#74)   0.9987(#2)   PersistentDictionary<Int, Int> defaulted subscript, unsuccessful lookups (*)
  1.172   1.172   1.175(#75)   0.9966(#1)   PersistentDictionary<Int, Int> defaulted subscript, successful lookups (*)
  1.172   1.172   1.172(#75)   0.9996(#1)   PersistentDictionary<Int, Int> subscript, unsuccessful lookups (*)
  1.162   1.162   1.162(#76)   1.000(#0)    PersistentDictionary<Int, Int> subscript, successful lookups (*)
  1.138   1.138   1.179(#64)   0.9590(#12)  PersistentDictionary<Int, Int> init(uniqueKeysWithValues:) (*)
  1.137   1.137   1.177(#64)   0.9595(#12)  PersistentDictionary<Int, Int> subscript, insert, unique (*)
  1.114   1.114   1.122(#54)   0.9921(#22)  PersistentDictionary<Int, Int> subscript, insert, shared (*)

@lorentey
Copy link
Member Author

Performance highight: indexing operations benefit greatly from moving subtree counts into parent nodes:

01 PersistentDictionary Int, Int  sequential iteration, indices

02 PersistentDictionary Int, Int  indexing subscript

05 PersistentDictionary Int, Int  unsuccessful index(forKey:)

06 PersistentDictionary Int, Int  successful index(forKey:)

@lorentey
Copy link
Member Author

The iterator is largely unchanged (I expect I'll have to soon slow it down somewhat, as the current implementation isn't legal Swift) -- but for some reason the current (dummy) Keys and Values implementations got a remarkable improvement.

03 PersistentDictionary Int, Int Keys sequential iteration

04 PersistentDictionary Int, Int Values sequential iteration

18 PersistentDictionary Int, Int  sequential iteration

@lorentey
Copy link
Member Author

Removals and updates got a 1.5x-1.7x speed boost from the storage layout & access improvements:

07 PersistentDictionary Int, Int  random removals (missing keys)

08 PersistentDictionary Int, Int  subscript, noop setter

09 PersistentDictionary Int, Int  subscript, remove missing

10 PersistentDictionary Int, Int  updateValue(_:forKey:), existing

11 PersistentDictionary Int, Int  subscript, remove existing, unique

12 PersistentDictionary Int, Int  random removals (existing keys)

13 PersistentDictionary Int, Int  subscript, set existing

14 PersistentDictionary Int, Int  subscript, _modify

15 PersistentDictionary Int, Int  defaulted subscript, _modify existing

@lorentey
Copy link
Member Author

lorentey commented Sep 14, 2022

Insertions to unique storage exhibit some unusual changes, resulting in some rather unique charts. Explaining this is a fun puzzle -- what I think is happening is that the new code has better allocation/resizing behavior.

The repeating pattern at 32x size increments is simply due to the size of each node (32 buckets) -- each time we increase the input size by 32x, we are effectively adding a new layer of nodes to the hash tree.

The old code used to have two separate buffers for items & children, so when a collision happened, upgrading an item to a child node sometimes required a bunch of reallocations to resize them. The new code uses a shared buffer for both regions, and the new child can simply make use of the space that was previously occupied by the old item, eliminating most of these. This probably explains why the humps in the before curve turn into valleys on after -- I suspect these humps/valleys might correspond to sizes at which the tree is busy introducing new nodes. If so, the stable spots in between are probably periods where the tree tends to just add new items to preexisting nodes.

A closer analysis would probably be interesting here, but for now I'm happy with these results.

16 PersistentDictionary Int, Int  defaulted subscript, _modify missing

17 PersistentDictionary Int, Int  updateValue(_:forKey:), insert

24 PersistentDictionary Int, Int  subscript, insert, unique

23 PersistentDictionary Int, Int  init(uniqueKeysWithValues:)

@lorentey
Copy link
Member Author

Simple key lookups were already quite fast, so they only see (relatively) minor 16-18% improvements, perhaps due to reduced retain/release traffic. (The new code is quite careful to avoid copying node references.)

I feel this is getting close to optimal, although perhaps there is still some room for marginal improvements by rolling find back into the lookup implementation.

19 PersistentDictionary Int, Int  defaulted subscript, unsuccessful lookups

20 PersistentDictionary Int, Int  defaulted subscript, successful lookups

21 PersistentDictionary Int, Int  subscript, unsuccessful lookups

22 PersistentDictionary Int, Int  subscript, successful lookups

@lorentey
Copy link
Member Author

Finally, insertions/removals into shared nodes are somewhat of a mixed bag -- we have minor 1-5% slowdowns at low sizes, but quite significant wins at the high end.

26 PersistentDictionary Int, Int  subscript, remove existing, shared

25 PersistentDictionary Int, Int  subscript, insert, shared

@lorentey
Copy link
Member Author

lorentey commented Sep 14, 2022

(These charts need to be taken with a grain of salt -- the new results have far greater variance because I finally remembered to re-run them several times to get new hash seeds. I collected the old results over (maybe) one or two separate runs, so they mostly ended up creating and re-creating the exact same tree. I don't think it matters much, though: the effects of the random hash seeds only seem to be significant up to about 64 or so items -- beyond that the volume of data tends to smooth out the noise. (Until around 128k-256k items, when some caching or context switching artifacts start to (consistently) destabilize measurements again.)

@pyrtsa
Copy link

pyrtsa commented Sep 14, 2022

Out of curiosity, how do these charts compare to the corresponding non-persistent Swift collections?

Additionally, are you ultimately going to add or update the recorded benchmark charts under Documentation (such as here)?

Copy link
Contributor

@msteindorfer msteindorfer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Comment on lines +118 to +120
var copy = self
copy.updateValue(value, forKey: key)
return copy
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice pattern for the fluid interfaces 🎉

@lorentey
Copy link
Member Author

lorentey commented Sep 14, 2022

Out of curiosity, how do these charts compare to the corresponding non-persistent Swift collections?

It's a bit too early to advertise such comparisons at this point, or to draw huge conclusions from them. These will be more meaningful when we've fleshed out the implementation a bit more.

(If you're eager to get a picture of the current state, the benchmark library named PersistentDictionary generates such reference comparisons, so you can get such data. You just need to run ./Utils/run-benchmarks.sh library run --library "./Benchmarks/Libraries/PeristentDictionary.json" results.json, then render them with the library render command).

Additionally, are you ultimately going to add or update the recorded benchmark charts under Documentation (such as here)?

Yes, I expect we'll have a similar arrangement for these new types. It would also be nice to integrate these into the API docs to a certain extent at least -- DocC integration would let us do that (and more).

@lorentey
Copy link
Member Author

Insertions to unique storage exhibit some unusual changes, resulting in some rather unique charts. Explaining this is a fun puzzle -- what I think is happening is that the new code has better allocation/resizing behavior.

<some long-winded hare-brained hypotheses>

@msteindorfer kindly noted that the behavior is for more plausibly explained by the allocation behavior getting horizontally shifted across the two implementations (plus a 1.5-2x general speedup). That makes far more sense! 😅

@lorentey
Copy link
Member Author

lorentey commented Sep 14, 2022

The iterator is largely unchanged (I expect I'll have to soon slow it down somewhat, as the current implementation isn't legal Swift) -- but for some reason the current (dummy) Keys and Values implementations got a remarkable improvement.

Huh, TIL the stdlib defines a custom map implementation for Collection that uses indexing instead of the iterator. That's rather silly!

This makes it more explicit that they are assumed to be layout-compatible.
Don’t force the caller to clean up any of the edge cases.
@lorentey
Copy link
Member Author

Latest commits apply some improvements uncovered during code review.

@swift-ci test

@lorentey lorentey merged commit a205397 into apple:feature/PersistentCollections Sep 16, 2022
@lorentey lorentey added this to the 1.1.0 milestone Oct 10, 2022
@lorentey lorentey added the HashTreeCollections Hash-array mapped prefix tree implementations label Nov 15, 2022
cgrindel-self-hosted-renovate bot referenced this pull request in cgrindel/rules_swift_package_manager Feb 8, 2024
…v1.1.0 (#906)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[com_github_apple_swift_collections](https://togithub.com/apple/swift-collections)
| http_archive | minor | `1.0.6` -> `1.1.0` |

---

### Release Notes

<details>
<summary>apple/swift-collections
(com_github_apple_swift_collections)</summary>

###
[`v1.1.0`](https://togithub.com/apple/swift-collections/releases/tag/1.1.0):
Swift Collections 1.1.0

[Compare
Source](https://togithub.com/apple/swift-collections/compare/1.0.6...1.1.0)

This feature release adds a number of new data structure
implementations, along with minor changes to existing constructs.

##### New Data Structures

- `Heap` implements a min-max heap, backed by a native array.
(Contributed by [@&#8203;AquaGeek](https://togithub.com/AquaGeek))
- `BitSet` and `BitArray` are two alternate representations of a bitmap
type, backed by dynamically allocated storage. (Contributed by
[@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah))
- `TreeSet` and `TreeDictionary` are hashed collections implementing
Compressed Hash-Array Mapped Prefix Trees (CHAMP). They provide similar
API as `Set`/`Dictionary` in the Standard Library, but as persistent
data structures, supporting incremental mutations of shared instances
and efficient structural diffing. (Contributed by
[@&#8203;msteindorfer](https://togithub.com/msteindorfer))

##### Other Changes

- This version of the package can only be built using Swift 5.7 or
later.
- New methods: the `OrderedSet.isEqualSet` family of functions provide a
way to test that two containers contain the same members, ignoring the
order of elements.
([https://github.com/apple/swift-collections/issues/183](https://togithub.com/apple/swift-collections/issues/183),
[https://github.com/apple/swift-collections/pull/234](https://togithub.com/apple/swift-collections/pull/234))
- New method: `OrderedSet.filter` implements a version of the standard
filter operation that returns an `OrderedSet` instead of an `Array`.
([https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159))
- `debugDescription` implementations have been updated to follow Swift
best practice. (These are called by container types like `Array` to
print their elements, so they work best when they're succinct variants
of `description` that are suitable for embedding in structured output:
specifically, they must not produce unpaired delimiter characters
(`[`/`]`, `(`/`)`, `{`/`}`, `<`/`>` etc), raw top level commas,
semicolons, colons, unquoted strings etc. `debugDescription` should not
needlessly print type names etc.)

##### New Contributors

- [@&#8203;AquaGeek](https://togithub.com/AquaGeek) made their first
contribution in
[https://github.com/apple/swift-collections/pull/61](https://togithub.com/apple/swift-collections/pull/61)
- [@&#8203;ejmarchant](https://togithub.com/ejmarchant) made their first
contribution in
[https://github.com/apple/swift-collections/pull/82](https://togithub.com/apple/swift-collections/pull/82)
- [@&#8203;just-gull](https://togithub.com/just-gull) made their first
contribution in
[https://github.com/apple/swift-collections/pull/115](https://togithub.com/apple/swift-collections/pull/115)
- [@&#8203;jPaolantonio](https://togithub.com/jPaolantonio) made their
first contribution in
[https://github.com/apple/swift-collections/pull/121](https://togithub.com/apple/swift-collections/pull/121)
- [@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah) made
their first contribution in
[https://github.com/apple/swift-collections/pull/83](https://togithub.com/apple/swift-collections/pull/83)
- [@&#8203;hectormatos2011](https://togithub.com/hectormatos2011) made
their first contribution in
[https://github.com/apple/swift-collections/pull/155](https://togithub.com/apple/swift-collections/pull/155)
- [@&#8203;ktoso](https://togithub.com/ktoso) made their first
contribution in
[https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159)
- [@&#8203;CTMacUser](https://togithub.com/CTMacUser) made their first
contribution in
[https://github.com/apple/swift-collections/pull/116](https://togithub.com/apple/swift-collections/pull/116)
- [@&#8203;hassila](https://togithub.com/hassila) made their first
contribution in
[https://github.com/apple/swift-collections/pull/297](https://togithub.com/apple/swift-collections/pull/297)

Many thanks to our contributors for their great work (and patience)!

##### List of Pull Requests

**Full Changelog**:
apple/swift-collections@1.0.6...1.1.0

- Add a min-max heap implementation that can be used to back a priority
queue by [@&#8203;AquaGeek](https://togithub.com/AquaGeek) in
[https://github.com/apple/swift-collections/pull/61](https://togithub.com/apple/swift-collections/pull/61)
- \[benchmark] Review and extend Heap benchmarks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/76](https://togithub.com/apple/swift-collections/pull/76)
- Add reference benchmarks for bit vector implementations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/79](https://togithub.com/apple/swift-collections/pull/79)
- Fix Markdown link in README by
[@&#8203;AquaGeek](https://togithub.com/AquaGeek) in
[https://github.com/apple/swift-collections/pull/77](https://togithub.com/apple/swift-collections/pull/77)
- Fix documentation for types conforming to ExpressibleByArrayLiteral o…
by [@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/82](https://togithub.com/apple/swift-collections/pull/82)
- \[Heap] Performance tweaks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/78](https://togithub.com/apple/swift-collections/pull/78)
- Fix typos: missing subscript parameters by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/81](https://togithub.com/apple/swift-collections/pull/81)
- \[Heap] Update implementation details section in docs by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/84](https://togithub.com/apple/swift-collections/pull/84)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/85](https://togithub.com/apple/swift-collections/pull/85)
- Stop depending on swift-collections-benchmark by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/86](https://togithub.com/apple/swift-collections/pull/86)
- \[OrderedDictionary] modifyValue → updateValue by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/91](https://togithub.com/apple/swift-collections/pull/91)
- Add Benchmarks package to workspace by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/93](https://togithub.com/apple/swift-collections/pull/93)
- \[OrderedDictionary] Deprecate `subscript(offset:)` for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/92](https://togithub.com/apple/swift-collections/pull/92)
- Documentation: Remove in-place mutation comments by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/96](https://togithub.com/apple/swift-collections/pull/96)
- \[main] Freeze some types for consistency with their inlinable
initializers by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/98](https://togithub.com/apple/swift-collections/pull/98)
- Follow stdlib's leading underscore rule by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/95](https://togithub.com/apple/swift-collections/pull/95)
- \[Heap] Disable heap tests in release builds by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/100](https://togithub.com/apple/swift-collections/pull/100)
- \[NFC] Merge release/1.0 to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/105](https://togithub.com/apple/swift-collections/pull/105)
- Merge `release/1.0` into `main` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/108](https://togithub.com/apple/swift-collections/pull/108)
- \[README] Note that `Heap` hasn't been tagged yet & list other
enhancements in progress by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/109](https://togithub.com/apple/swift-collections/pull/109)
- PriorityQueueModule: remove `import Foundation` by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/118](https://togithub.com/apple/swift-collections/pull/118)
- \[Heap] Remove Heap's `ascending` and `descending` views by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/119](https://togithub.com/apple/swift-collections/pull/119)
- \[Heap] Enable heap tests in optimized builds
([#&#8203;101](https://togithub.com/apple/swift-collections/issues/101))
by [@&#8203;just-gull](https://togithub.com/just-gull) in
[https://github.com/apple/swift-collections/pull/115](https://togithub.com/apple/swift-collections/pull/115)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/122](https://togithub.com/apple/swift-collections/pull/122)
- Fix link to package internal documentation by
[@&#8203;jPaolantonio](https://togithub.com/jPaolantonio) in
[https://github.com/apple/swift-collections/pull/121](https://togithub.com/apple/swift-collections/pull/121)
- Merge release/1.0 to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/130](https://togithub.com/apple/swift-collections/pull/130)
- BitArray and BitSet data structures by
[@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah) in
[https://github.com/apple/swift-collections/pull/83](https://togithub.com/apple/swift-collections/pull/83)
- Sorted collections by [@&#8203;vihanb](https://togithub.com/vihanb) in
[https://github.com/apple/swift-collections/pull/65](https://togithub.com/apple/swift-collections/pull/65)
- Merge `release/1.0` to `main` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/141](https://togithub.com/apple/swift-collections/pull/141)
- Remove Swift PM Artifacts to avoid Generated Schemes in Xcode by
[@&#8203;hectormatos2011](https://togithub.com/hectormatos2011) in
[https://github.com/apple/swift-collections/pull/155](https://togithub.com/apple/swift-collections/pull/155)
- Reinstate custom schemes under Utils/swift-collections.xcworkspace by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/156](https://togithub.com/apple/swift-collections/pull/156)
- \+OrderedSet add filter
[#&#8203;158](https://togithub.com/apple/swift-collections/issues/158)
by [@&#8203;ktoso](https://togithub.com/ktoso) in
[https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159)
- \[Xcode] Update schemes & file template by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/161](https://togithub.com/apple/swift-collections/pull/161)
- \[OrderedCollection] Use standard temp allocation facility, if
available by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/160](https://togithub.com/apple/swift-collections/pull/160)
- \[OrderedSet] Work around weird name lookup issue in compiler by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/162](https://togithub.com/apple/swift-collections/pull/162)
- \=OrderedSet.filter Attempt to optimize filter impl by
[@&#8203;ktoso](https://togithub.com/ktoso) in
[https://github.com/apple/swift-collections/pull/163](https://togithub.com/apple/swift-collections/pull/163)
- Force-inline \_modify accessors to work around a performance issue by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/165](https://togithub.com/apple/swift-collections/pull/165)
- Merge release/1.0 branch to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/172](https://togithub.com/apple/swift-collections/pull/172)
- Incubate persistent data structures by
[@&#8203;msteindorfer](https://togithub.com/msteindorfer) in
[https://github.com/apple/swift-collections/pull/31](https://togithub.com/apple/swift-collections/pull/31)
- Persistent collections updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/174](https://togithub.com/apple/swift-collections/pull/174)
- Persistent collections updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/175](https://togithub.com/apple/swift-collections/pull/175)
- Persistent collections updates (part 3) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/176](https://togithub.com/apple/swift-collections/pull/176)
- Persistent collections updates (part 4) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/177](https://togithub.com/apple/swift-collections/pull/177)
- \[OrderedDictionary] Tiny documentation fix by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/178](https://togithub.com/apple/swift-collections/pull/178)
- Persistent collections updates (part 5) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/179](https://togithub.com/apple/swift-collections/pull/179)
- Integrate PriorityQueueModule, BitCollections, PersistentCollections,
SortedCollections into release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/181](https://togithub.com/apple/swift-collections/pull/181)
- Persistent collections updates (part 6) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/180](https://togithub.com/apple/swift-collections/pull/180)
- Persistent collections updates (part 7) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/182](https://togithub.com/apple/swift-collections/pull/182)
- \[BitSet] Fix decoding format on 32 bit architectures by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/185](https://togithub.com/apple/swift-collections/pull/185)
- Persistent collections updates (part 8) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/184](https://togithub.com/apple/swift-collections/pull/184)
- Persistent collections updates (part 9) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/188](https://togithub.com/apple/swift-collections/pull/188)
- Add Sendable conformances to all public types by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/191](https://togithub.com/apple/swift-collections/pull/191)
- \[test] Check baseline API expectations for set-like types by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/192](https://togithub.com/apple/swift-collections/pull/192)
- Fleshing out `PersistentSet` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/193](https://togithub.com/apple/swift-collections/pull/193)
- Rename `PriorityQueueModule` to `HeapModule` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/194](https://togithub.com/apple/swift-collections/pull/194)
- \[BitSet] Fix invariant violation in member subscript by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/195](https://togithub.com/apple/swift-collections/pull/195)
- \[1.1.0] Bump minimum required Swift toolchain to 5.5 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/196](https://togithub.com/apple/swift-collections/pull/196)
- Restore support for building with Swift 5.5 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/198](https://togithub.com/apple/swift-collections/pull/198)
- Merge release/1.0 to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/199](https://togithub.com/apple/swift-collections/pull/199)
- Update CMake configuration in preparation for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/200](https://togithub.com/apple/swift-collections/pull/200)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/202](https://togithub.com/apple/swift-collections/pull/202)
- \[1.1]\[SortedCollections] Remove for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/205](https://togithub.com/apple/swift-collections/pull/205)
- \[Heap] Change value of minimum or maximum element by
[@&#8203;CTMacUser](https://togithub.com/CTMacUser) in
[https://github.com/apple/swift-collections/pull/116](https://togithub.com/apple/swift-collections/pull/116)
- \[Heap] Prerelease preparations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/210](https://togithub.com/apple/swift-collections/pull/210)
- Update README files by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/212](https://togithub.com/apple/swift-collections/pull/212)
- \[manifest] Exclude CMakeLists.txt; remove unnecessary path settings;
reindent file by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/213](https://togithub.com/apple/swift-collections/pull/213)
- Review and finalize (?) set relation predicates for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/216](https://togithub.com/apple/swift-collections/pull/216)
- Merge.1.0→1.1 by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/217](https://togithub.com/apple/swift-collections/pull/217)
- Update CMake configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/218](https://togithub.com/apple/swift-collections/pull/218)
- Cherry pick changes from main to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/219](https://togithub.com/apple/swift-collections/pull/219)
- Fix unusual build problems by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/221](https://togithub.com/apple/swift-collections/pull/221)
- Review & update descriptions throughout the package by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/222](https://togithub.com/apple/swift-collections/pull/222)
- Review and finalize (?) binary set operations for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/223](https://togithub.com/apple/swift-collections/pull/223)
- \[Xcode] Disable implicit dependencies by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/227](https://togithub.com/apple/swift-collections/pull/227)
- \[OrderedSet] Improve sequence-taking initializer by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/226](https://togithub.com/apple/swift-collections/pull/226)
- \[OrderedSet, BitSet] Fix custom mirror display style by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/225](https://togithub.com/apple/swift-collections/pull/225)
- Finalize persistent collections API by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/224](https://togithub.com/apple/swift-collections/pull/224)
- Start working on DocC support by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/228](https://togithub.com/apple/swift-collections/pull/228)
- Update CMake build configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/230](https://togithub.com/apple/swift-collections/pull/230)
- \[PersistentSet] Iterator.next(): Make inlinable by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/233](https://togithub.com/apple/swift-collections/pull/233)
- \[SetAlgebra types] isEqual(to:) → isEqualSet(to:) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/234](https://togithub.com/apple/swift-collections/pull/234)
- \[PersistentCollections] Doc & benchmark updates in preparation of API
review by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/235](https://togithub.com/apple/swift-collections/pull/235)
- Apply changes from in-progress review thread by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/237](https://togithub.com/apple/swift-collections/pull/237)
- \[ShareableHashedCollections] API Review: add missing `mutating`
keywords by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/238](https://togithub.com/apple/swift-collections/pull/238)
- \[Benchmarks] Split default huge library up into individual files, one
per type by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/240](https://togithub.com/apple/swift-collections/pull/240)
- \[ShareableHashedCollections] Add missing import by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/243](https://togithub.com/apple/swift-collections/pull/243)
- Unify unsafe bit set implementations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/244](https://togithub.com/apple/swift-collections/pull/244)
- Fix warnings in development versions of Swift by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/245](https://togithub.com/apple/swift-collections/pull/245)
- \[HashTreeCollections] Change prefix `Shareable` to `Tree` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/242](https://togithub.com/apple/swift-collections/pull/242)
- \[TreeDictionary] Fix in-place merge operation to properly update the
count by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/247](https://togithub.com/apple/swift-collections/pull/247)
- \[cmake] Update CMake configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/249](https://togithub.com/apple/swift-collections/pull/249)
- Add not so experimental rope implementation by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/264](https://togithub.com/apple/swift-collections/pull/264)
- Fix off by one error in BitSet by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/267](https://togithub.com/apple/swift-collections/pull/267)
- Monomodule support by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/266](https://togithub.com/apple/swift-collections/pull/266)
- Expose a handful of BigString.Index methods by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/269](https://togithub.com/apple/swift-collections/pull/269)
- BitArray API refinements & additions by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/263](https://togithub.com/apple/swift-collections/pull/263)
- Make most of Rope inlinable by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/270](https://togithub.com/apple/swift-collections/pull/270)
- BigString: Fix String.Index.\_knownScalarAligned by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/272](https://togithub.com/apple/swift-collections/pull/272)
- Rope: Fix `Sendable` conformance by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/271](https://togithub.com/apple/swift-collections/pull/271)
- Require Swift 5.6 by [@&#8203;lorentey](https://togithub.com/lorentey)
in
[https://github.com/apple/swift-collections/pull/273](https://togithub.com/apple/swift-collections/pull/273)
- \[OrderedDictionary] Explicitly mention in documentation that
keys/values are ordered by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/275](https://togithub.com/apple/swift-collections/pull/275)
- \[HashCollections] Ensure `self` doesn’t get destroyed before we’re
done working with it by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/276](https://togithub.com/apple/swift-collections/pull/276)
- Remove obsolete swift(>=5.5)/swift(>=5.6) checks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/277](https://togithub.com/apple/swift-collections/pull/277)
- \[Xcode] Update Xcode project by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/278](https://togithub.com/apple/swift-collections/pull/278)
- Minor rope updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/279](https://togithub.com/apple/swift-collections/pull/279)
- \[Rope] remove(at:): Fix assertion when removing the last item creates
a deficiency by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/280](https://togithub.com/apple/swift-collections/pull/280)
- Merge changes from release 1.0 to release 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/283](https://togithub.com/apple/swift-collections/pull/283)
- \[CollectionUtilities] Silence a warning on 32 bit platforms by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/286](https://togithub.com/apple/swift-collections/pull/286)
- \[BitSet] Fix a thinko in BitSet.isEqualSet by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/287](https://togithub.com/apple/swift-collections/pull/287)
- Grab bag of fixes for small test issues by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/288](https://togithub.com/apple/swift-collections/pull/288)
- \[Xcode] Set a code sign identity in the Xcode project by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/285](https://togithub.com/apple/swift-collections/pull/285)
- Rope: Fix trap when replaceSubrange is called on an empty rope by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/290](https://togithub.com/apple/swift-collections/pull/290)
- `Rope.find` returns a bogus remainder for the end position by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/291](https://togithub.com/apple/swift-collections/pull/291)
- Update TreeSet.md by [@&#8203;hassila](https://togithub.com/hassila)
in
[https://github.com/apple/swift-collections/pull/297](https://togithub.com/apple/swift-collections/pull/297)
- Fix CustomStringConvertible/CustomDebugStringConvertible conformances
by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/302](https://togithub.com/apple/swift-collections/pull/302)
- \[RopeModule] Fix issues in Swift's ABI stable dialect by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/318](https://togithub.com/apple/swift-collections/pull/318)
- \[CMake, Xcode] Update configurations for alternate build systems by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/319](https://togithub.com/apple/swift-collections/pull/319)
- \[RopeModule] Remove unnecessary typealiases by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/320](https://togithub.com/apple/swift-collections/pull/320)
- \[Heap] Improve type-level doc comment by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/326](https://togithub.com/apple/swift-collections/pull/326)
- \[Heap] insert(contentsOf:) Switch to Floyd’s if we’re inserting too
many items by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/327](https://togithub.com/apple/swift-collections/pull/327)
- \[1.1] build: support building in Debug mode on Windows by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/336](https://togithub.com/apple/swift-collections/pull/336)
- Merge release/1.0 to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/348](https://togithub.com/apple/swift-collections/pull/348)
- \[Heap] Convert min() and max() to properties by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/328](https://togithub.com/apple/swift-collections/pull/328)
- \[BitArray] Disable bitwise operators for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/353](https://togithub.com/apple/swift-collections/pull/353)
- \[Heap] Final(?) Heap API adjustments for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/354](https://togithub.com/apple/swift-collections/pull/354)
- \[Benchmarks] Add Collection Equality Benchmarks by
[@&#8203;vanvoorden](https://togithub.com/vanvoorden) in
[https://github.com/apple/swift-collections/pull/351](https://togithub.com/apple/swift-collections/pull/351)
- Release preparations for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/355](https://togithub.com/apple/swift-collections/pull/355)
- \[1.1] Fix typos by [@&#8203;lorentey](https://togithub.com/lorentey)
in
[https://github.com/apple/swift-collections/pull/357](https://togithub.com/apple/swift-collections/pull/357)
- \[TreeDictionary]\[Keys] Add Equatable and Hashable Conformance to
TreeDictionary.Keys by
[@&#8203;vanvoorden](https://togithub.com/vanvoorden) in
[https://github.com/apple/swift-collections/pull/352](https://togithub.com/apple/swift-collections/pull/352)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMDAuMCIsInVwZGF0ZWRJblZlciI6IjM2LjEwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: Self-hosted Renovate Bot <361546+cgrindel-self-hosted-renovate[bot]@users.noreply.github.enterprise.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
HashTreeCollections Hash-array mapped prefix tree implementations
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants