rust-lang / rust-lang/cargo

Tracking issue for RFC 1977: public & private dependencies, as it relates to the resolver

Open
#6,129 39 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

A-dependency-resolution C-tracking-issue Z-public-dependency
Dominant language
Rust
Stars
15.5k
Forks
3k
Avg merge
23h 30m
Merged PRs (30d)
51

Description

View all comments

Summary

RFC (original, superseded): #1977
RFC: #3516
Compiler tracking issue: https://github.com/rust-lang/rust/issues/44663

Implementation:

  • rust-lang/cargo#6653
  • rust-lang/cargo#6772
  • rust-lang/cargo#6962
  • rust-lang/cargo#12817
  • rust-lang/cargo#13039
  • rust-lang/cargo#13036
  • rust-lang/cargo#13037
  • rust-lang/cargo#13038
  • rust-lang/cargo#13308
  • rust-lang/cargo#14502
  • Command to update Cargo.lock to minimal versions (rust-lang/cargo#4100)
  • Make cargo publish use the minimal versions allowed by Cargo.toml
  • Ensure quality of error messages is sufficient
  • rust-lang/cargo#13095
  • #15966

Non-blocking further improvements

Considerations for stabilization
Unresolved Issues
Known Issues
Future Extensions
About tracking issues

Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.


Original issue

This is a sub part of the discussion of implementation of RFC 1977, specifically how the resolver could implement this protocol. The main Tracking issue is at https://github.com/rust-lang/rust/issues/44663.

This comment https://github.com/rust-lang/rfcs/pull/1977#issuecomment-304043301 described the properties we want to uphold the way that fits best with my brain.
So to use the termanology, I feel like when we are adding a packedge B we need to walk up the dependency tree to all potential C's that can see the addition to test if there is a conflicting A.
That can be done pretty fast if we have a fast way to walk up dependency tree and a fast way to see all the pub reachable packages for each ancestor. (Neither of which we have at this time.)
But that feels like a lot of state to be cloned for each tick.
Currently we avoid the expensive clones with extensive use of RC.

Is it time to add a im-rs dependency?
Is there a better algorithm?
Is there a small part that would make a good starting PR?\

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

This is a tracking issue rather than a self-contained change, and it names no source file, test, or entry point. Start by reading RFC #3516 and the unchecked implementation items, especially Cargo #13095, then define a focused task whose completion can be recorded in this tracking issue.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
build-system
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.