DelphiPackageManager / DPM

A Package Manager for Delphi
Apache License 2.0
96 stars 21 forks source link

Research : Dependency Resolution algorithm - PubGrub #13

Open vincentparrett opened 3 years ago

vincentparrett commented 3 years ago

The currently implemented dependency resolution algorithm works well in small graphs, but will most likely cause performance issues with larger/deeper graphs, or where there are larger numbers of package versions.

The algorithm in Dart's package manager Pub uses a relatively new algorithm called PubGrub, which provides much better resolution performance. It also provides much better error reporting, explaining resolution failures in plain language that is easy to understand.

https://medium.com/@nex3/pubgrub-2fb6470504f

https://github.com/dart-lang/pub/blob/master/doc/solver.md

Other implementations (not all are complete/working)

Ruby - https://github.com/jhawthorn/pub_grub Ruby - https://github.com/Richard-Degenne/pub-grub-poc Elm - https://github.com/mpizenberg/elm-pubgrub Rust - https://github.com/pubgrub-rs/pubgrub Rust - https://github.com/elba/elba/tree/master/src/lib/resolve C++ - https://github.com/vector-of-bool/pubgrub

I would love to see a delphi implementation of this algorithm.