Skip to content

v0.6.0

Compare
Choose a tag to compare
@baszalmstra baszalmstra released this 07 Jul 14:38
· 680 commits to main since this release

Highlights

New rust based solver implementation

This version of rattler includes a new solver implementation!
@aochagavia worked hard on porting libsolv to rust and integrating that with rattler_solve.
The port performs slightly faster or similar to the original C code and does not contain unsafe code, is well documented, and thread-safe.
Our implementation (rattler_libsolv_rs) is specific to solving conda packages by leveraging rattler_conda_types for matching and parsing.

Some performance benchmarks taken on Apple M2 Max.

libsolv-c libsolv-rs
python=3.9 7.3734 ms 4.5831 ms
xtensor, xsimd 5.7521 ms 2.7643 ms
tensorflow 654.38 ms 371.59 ms
quetz 1.2577 s 1.3807 s
tensorboard=2.1.1, grpc-cpp=1.39.1 474.76 ms 132.79 ms

Run cargo bench libsolv to check the results on your own machine.

Besides the much improved implementation the new solver also provides much better error messages based on the work from mamba.
When a conflict is detected the incompatibilities are analyzed and displayed with a more user-friendly error message.

The following packages are incompatible
|-- asdf can be installed with any of the following options:
    |-- asdf 1.2.3 would require
        |-- C >1, which can be installed with any of the following options:
            |-- C 2.0.0
|-- C 1.0.0 is locked, but another version is required as reported above

rattler-solve has also been refactored to accommodate this change.
It is now more easily possible to switch between solvers add runtime by writing functions that are generic on the solver.
The solvers now live in a separate module rattler_solve::libsolv_c for the original libsolv C implementation and rattler_solve::libsolv_rs for the rust version.
Both solvers can be enabled with feature flags. The default features only select libsolv_c.

Caching of activation scripts

This release contains code to execute an activation script and capture the changes it made to the environment.
Caching the result of an activation script can be useful if you need to invoke multiple executables from the same environment.

Details

Added

Changed

  • Completely refactored version parsing by @baszalmstra in (#240)
  • Refactored solver interface to allow generic use of solver implementations by @baszalmstra in (#245)
  • Also check if credentials stored under wildcard host by @wolfv in (#252)

Fixed