Skip to content
This repository was archived by the owner on Dec 5, 2019. It is now read-only.

[WIP] New interfaces for better graph resolution #92

Open
wants to merge 29 commits into
base: master
Choose a base branch
from

Conversation

jspahrsummers
Copy link
Member

@jspahrsummers jspahrsummers commented Oct 9, 2016

🚧 WORK IN PROGRESS 🚧

To do:

  • Refactor resolution algorithm to be iterative? (Might make backmarking, etc. easier)
  • Refactor ArbiterResolvedDependencyGraph to be a simple value type, and not store requirements
  • Figure out what to do for branch/commit pins ("unversioned" requirements)
  • Restore incremental resolution functionality
  • Restore statistics about dependency resolution

Future work:

  • Backmarking/culprit variables
  • Offer a mode where we try dependencies with the most constrained first—this means that ordering isn't deterministic over time, which is why it should be optional, but it should be more efficient if it eliminates more of the search space

@jspahrsummers
Copy link
Member Author

Current status (for myself, if no one else):

  • Iteration was a bad idea—it doesn't make it any easier to figure out which semantic step to resume from. The book Constraint Processing has a better suggestion for implementing backmarking (a kind of backjumping) that I want to try.
  • DeadEnds was simply unnecessary. We can record dead ends by applying stricter requirements to the ArbiterDependency from which we tried to add the node in the first place (i.e., the requirement from the dependent). I've now added an ExcludedInstantiation requirement for this specific purpose.
  • Given the above, ArbiterResolvedDependencyGraph isn't that far off from what we want, so I've thrown out the Graph2 types that I was playing around with. The new types in resolver/ still seem useful, but I'll probably use ArbiterResolver instead of building a new class.

… DFS

This is more incremental and extensible, allowing us to implement more advanced strategies like backmarking.
It’s surprising that this function returns a value type instead of a
reference, which is what at() does.
@jspahrsummers
Copy link
Member Author

Been heads-down at my day job for the past couple weeks. I hope to return to this over the next couple.

@jspahrsummers
Copy link
Member Author

jspahrsummers commented Nov 6, 2016

There's still work to be done, but CarthageGraphTest now yields the same results as master 🎉

Carthage 0.1 skipped: No version list found for project: LlamaKit
Carthage 0.10: ✓
Carthage 0.11: ✓
Carthage 0.12: ✓
Carthage 0.13: ✓
Carthage 0.14: ✓
Carthage 0.15: ✓
Carthage 0.15.1: ✓
Carthage 0.15.2: ✓
Carthage 0.16: ✓
Carthage 0.16.1: ✓
Carthage 0.16.2: ✓
Carthage 0.17: ✓
Carthage 0.17.1: ✓
Carthage 0.17.2: ✓
Carthage 0.18.1: ✓
Carthage 0.2 skipped: No version list found for project: LlamaKit
Carthage 0.2.1 skipped: No version list found for project: LlamaKit
Carthage 0.3.1 skipped: No version list found for project: LlamaKit
Carthage 0.4 skipped: No version list found for project: LlamaKit
Carthage 0.5 skipped: No version list found for project: LlamaKit
Carthage 0.5.1 skipped: No version list found for project: LlamaKit
Carthage 0.5.2 skipped: No version list found for project: LlamaKit
Carthage 0.5.3 skipped: No version list found for project: LlamaKit
Carthage 0.6 skipped: No version list found for project: LlamaKit
Carthage 0.6.1 skipped: No version list found for project: LlamaKit
Carthage 0.6.2 skipped: No version list found for project: LlamaKit
Carthage 0.6.3 skipped: No version list found for project: LlamaKit
Carthage 0.6.4 skipped: No version list found for project: LlamaKit
Carthage 0.6.5 skipped: No version list found for project: LlamaKit
Carthage 0.7 skipped: No version list found for project: Box
Carthage 0.7.1 skipped: No version list found for project: Box
Carthage 0.7.2 skipped: No version list found for project: Box
Carthage 0.7.3 skipped: No version list found for project: Box
Carthage 0.7.4 skipped: No version list found for project: Box
Carthage 0.7.4-beta.1 skipped: No version list found for project: Box
Carthage 0.7.4-beta.2 skipped: No version list found for project: Box
Carthage 0.7.4-homebrew skipped: No version list found for project: Box
Carthage 0.7.5 skipped: No version list found for project: Box
Carthage 0.8 skipped: No version list found for project: Box
Carthage 0.9 skipped: No version list found for project: Box
Carthage 0.9.1 skipped: No version list found for project: Box
Carthage 0.9.2 skipped: No version list found for project: Box
Carthage 0.9.3 skipped: No version list found for project: Box
Carthage 0.9.4 skipped: No version list found for project: Box

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants