-
Notifications
You must be signed in to change notification settings - Fork 176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revisit policy around component crate interdependent versions #4343
Comments
The basic issue was that the Cargo resolver does not do well with Now, a thing that may save us here is that these As a client from the google3 side, having to do upgrades lockstep is still a pain, especially with the common deps like My general ideal world is the one where we have better self restraint to prevent problems with 2 and 3. I agree that 1 is harder to fix, but I actually think it's fine to keep using Basically, I care less about the actual way we specify deps (until there are concrete issues we have experienced). But I would like us to try and be much more careful about internal breakages. Internal breakages are easier to police than external ones since we have a finite set of "client" code to think about. And I'm not sure we need a hard policy on this, but I think it would be nice to have it be a consideration. Also, I'm primarily thinking about |
I think it's a good idea to adopt a policy where by default we don't break internal cross-crate APIs but we plan to make exceptions on a case-by-case basis, similar to how we default to MSRV N-6 but allow N-4 with a strong enough motivation. |
Consensus:
LGTM: @Manishearth, @sffc Tentative consensus:
LGTM: @Manishearth, @sffc |
@robertbastian Please review the above conclusions. |
Compiled data requires that the fallback compiled data in locid transform is at the same version, otherwise deduplication breaks |
That crate only gets the soft guarantee (and no semver relaxation): for me the line there is "still compiles and mostly works" (as in, it's an okay intermediate, temporary state to have). I think it would be good to explicitly call that out. This is one of the "version skew issues" that prompted me to propose having two separate lists, one a superset of the other. provider/locid get the harder guarantee that we actually back by relaxing semver |
"still compiles and mostly works" is horrible. We introduced the ~ deps because clients were having issues with mixed versions. If we allow non-~ locid_transform, there will be very silent behaviour changes that will be hard to debug. I agree that |
That's not the proposal. The proposal is, two parts:
I split it into two to better facilitate asynchronous decisionmaking. |
I'm unclear what this refers to |
With the soft guarantee, whenever we change internal doc-hidden/unstable APIs (say, in, icu_locid_transform) we ensure that downstream crates on older versions still compile with the new API, perhaps by keeping compat shims around. This is best-effort, so it's fine to violate this with a discussion. This guarantee is not exposed via our semver bounds, it is a soft internal guarantee that makes the process of vendoring ICU4X easier. |
Updated recommendation:
LGTM: @sffc @Manishearth |
@robertbastian Do you approve the latest conclusion above? Action on this ticket should be to document this somewhere and then close the issue. |
lgtm |
ICU4X 1.3 started using
~
versions between the metacrate, all component crates, and the data crates, as discussed in #3537. This solves several problems:~
deps make sure that the databake is built for the corresponding library version.icu_locid
and update call sites in component crates without having to worry about breaking older versions of those crates.@Manishearth said he talked with the Cargo team which may have swayed his opinion in a different direction. Can you post your updated position below?
Personally, I'd like to see some user feedback and evidence before making a change away from what we agreed. From an ICU4X maintainer and integrator point of view, I'm happy with where we landed. Version skew was a real problem in ICU4X 1.0 through 1.2 and this largely solves it. Self-restraint (more restrictions on what we allow ourselves to do as ICU4X developers) can help solve problems 2 and 3 but it doesn't solve problem 1. If we can demonstrate that the version pinning causes harm to our users and if we come up with some other solution to the CLDR version skew question, then I can be swayed.
CC @robertbastian
Also see: #2715
The text was updated successfully, but these errors were encountered: