You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* docs: update version in Cargo.toml to 0.2.1
* docs: update changelog to 0.2.1
* refactor: make clippy happy
* docs: put the speed improvements in changelog
* docs: update release date of 0.2.1
Copy file name to clipboardExpand all lines: CHANGELOG.md
+32-1Lines changed: 32 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,34 @@ All notable changes to this project will be documented in this file.
4
4
5
5
## Unreleased [(diff)][unreleased-diff]
6
6
7
+
## [0.2.1] - 2021-06-30 - [(diff with 0.2.0)][0.2.0-diff]
8
+
9
+
This release is focused on performance improvements and code readability, without any change to the public API.
10
+
11
+
The code tends to be simpler around tricky parts of the algorithm such as conflict resolution.
12
+
Some data structures have been rewritten (with no unsafe) to lower memory usage.
13
+
Depending on scenarios, version 0.2.1 is 3 to 8 times faster than 0.2.0.
14
+
As an example, solving all elm package versions existing went from 580ms to 175ms on my laptop.
15
+
While solving a specific subset of packages from crates.io went from 2.5s to 320ms on my laptop.
16
+
17
+
Below are listed all the important changes in the internal parts of the API.
18
+
19
+
#### Added
20
+
21
+
- New `SmallVec` data structure (with no unsafe) using fixed size arrays for up to 2 entries.
22
+
- New `SmallMap` data structure (with no unsafe) using fixed size arrays for up to 2 entries.
23
+
- New `Arena` data structure (with no unsafe) backed by a `Vec` and indexed with `Id<T>` where `T` is phantom data.
24
+
25
+
#### Changed
26
+
27
+
- Updated the `large_case` benchmark to run with both u16 and string package identifiers in registries.
28
+
- Use the new `Arena` for the incompatibility store, and use its `Id<T>` identifiers to reference incompatibilities instead of full owned copies in the `incompatibilities` field of the solver `State`.
29
+
- Save satisfier indices of each package involved in an incompatibility when looking for its satisfier. This speeds up the search for the previous satisfier.
30
+
- Early unit propagation loop restart at the first conflict found instead of continuing evaluation for the current package.
31
+
- Index incompatibilities by package in a hash map instead of using a vec.
32
+
- Keep track of already contradicted incompatibilities in a `Set` until the next backtrack to speed up unit propagation.
33
+
- Unify `history` and `memory` in `partial_solution` under a unique hash map indexed by packages. This should speed up access to relevan terms in conflict resolution.
34
+
7
35
## [0.2.0] - 2020-11-19 - [(diff with 0.1.0)][0.1.0-diff]
8
36
9
37
This release brings many important improvements to PubGrub.
@@ -133,7 +161,10 @@ The gist of it is:
133
161
-`.gitignore` configured for a Rust project.
134
162
-`.github/workflows/` CI to automatically build, test and document on push and pull requests.
0 commit comments