Skip to content
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

Prepare for the next release #444

Merged
merged 2 commits into from Nov 6, 2019
Merged

Conversation

taiki-e
Copy link
Member

@taiki-e taiki-e commented Nov 4, 2019

This updates version numbers and changelogs.

  • crossbeam 0.7.3
  • crossbeam-channel 0.4.0
  • crossbeam-deque 0.7.2
  • crossbeam-epoch 0.8.0
  • crossbeam-queue 0.2.0
  • crossbeam-utils 0.7.0

cc #435
cc #443
cc #446

@taiki-e taiki-e requested a review from a user November 4, 2019 18:38
Cargo.toml Outdated
@@ -55,7 +55,7 @@ path = "./crossbeam-queue"
optional = true

[dependencies.crossbeam-utils]
version = "0.6.6"
version = "0.6.7"
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It needs to bump epoch and utils for -Zminimal-versions.

@taiki-e
Copy link
Member Author

taiki-e commented Nov 4, 2019

(I've opened this, but I don't actually have the rights to publish)

- crossbeam 0.7.3
- crossbeam-channel 0.4.0
- crossbeam-deque 0.7.2
- crossbeam-epoch 0.8.0
- crossbeam-queue 0.2.0
- crossbeam-utils 0.7.0
To bump MSRV is considered a breaking change.
@taiki-e
Copy link
Member Author

taiki-e commented Nov 5, 2019

Updated version numbers and added explanations about MSRV to readme.

@jeehoonkang
Copy link
Contributor

bors r+

As soon as it's merged, I'll release new versions. Thank you!

bors bot added a commit that referenced this pull request Nov 6, 2019
444: Prepare for the next release r=jeehoonkang a=taiki-e

This updates version numbers and changelogs.

- crossbeam 0.7.3
- crossbeam-channel 0.4.0
- crossbeam-deque 0.7.2
- crossbeam-epoch 0.8.0
- crossbeam-queue 0.2.0
- crossbeam-utils 0.7.0

cc #435 
cc #443 
cc #446

Co-authored-by: Taiki Endo <te316e89@gmail.com>
@taiki-e

This comment has been minimized.

@bors
Copy link
Contributor

bors bot commented Nov 6, 2019

Build succeeded

@bors bors bot merged commit d953f49 into crossbeam-rs:master Nov 6, 2019
@taiki-e taiki-e deleted the next-version branch November 6, 2019 04:23
@ghost
Copy link

ghost commented Nov 6, 2019

New versions have been published :)

@@ -96,6 +96,10 @@ Next, add this to your crate:
extern crate crossbeam;
```

## Compatibility

The minimum supported Rust version is 1.28. Any change to this is considered a breaking change.
Copy link
Contributor

@matklad matklad Nov 7, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know that "is bumping MSRV considered a breaking change?" problem is about as hard as P ?= NP, and I would fully accept and agree with any maintainer's decision here without further argument.

However, I'd like to lay the reasons why I personally think it would have been better to not make a semver-incompatible release in this case.

First, it creates additional works on the users who use crossbeam crates as public a API. For example, I maintain an lsp-server crate, which uses crossbeam-channel in public API. With this new release of crossbeam channel, I need to publish a new release of my lsp-server crate (update Cargo.toml manually in two places, commit & tag, cargo publish), and then I need to update lsp-server version in rust-analyzer (again, manual Cargo.toml change). If this were a minor upgrade, I would only need to run an automated cargo update in rust-analyzer's repo, without touching lsp-server at all.

Second, this change hurts compile times for large projects: rust-analyzer will have two copies of crossbeam in its crate graph for quite some time, as propagating updates across the ecosystem takes time.

Third, I am sure hardly anyone would have noticed an MSRV bump from whatever it was previously to 1.28 anyway. 1.28 is extremely conservative (that is excellent, thank you!). rayon uses 1.28.0 and it is notorious for sticking with older rustcs. lazy_static bumped MSRV from 1.24 to 1.27 three months ago in a minor release, and, from what I can tell, nobody complained about this. (In other words, it makes more sense to treat MSRV change as breaking if it is not conservative, but 1.28 is very conservative, as the ecosystem goes).

To clarify, my goal here is not to do something right now, but rather to make sure that, in the future, in this and other projects, publishing a non-semver compatible update is more carefully considered.

I see that this was discussed a little, and the argument was "lazy static made a breaking change, which affected our CI, so breaking changes are bad". However, lazy_static did this very intentionally and with a good reason: there are trade offs here, and making this a semver-incompatible change also creates additional work on various folks. A solution for CI breakage is to use a Cargo.lock file when running tests with MSRV.

I also can't help but appreciate a fine irony of the fact that bumping lazy_static's MSRV (for which I am to blame) caused me, indirectly, to write this comment :)

References:

rust-lang/api-guidelines#123

EDIT: there's actually a forth reason: lazy_static is a dependency of crossbeam-utils, and, as it can bump MSRV in a semver-compatible release, additional guarantee of crossbeam doesn't actually add much.

Copy link

@ghost ghost Nov 7, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for writing this up! I agree with you and we should change our policy on whether bumping minimum version of Rust is a breaking change.

But, more importantly, I think we really should bring Crossbeam to 1.0 soon. I will follow up with an issue on what changes we need to do to get there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One additional thing I've noticed: the umbrella crate crossbeam did not made a breaking change, it just bumped major versions of it's public deps, which is, dejure, a breaking change (which doesn't mean it creates problems in practice, only bug reports will tell :) ).

Copy link

@ghost ghost Nov 8, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will admit it: this was a very rushed and belated release.

Part of the reason is the fact that I dread making releases because they're so time-consuming and finicky (update readmes, changelogs, and Cargo.tomls for every crate, fix up dependencies, publish to crates.io, publish git tags) and I always make mistakes while releasing new versions. I don't think there's been a single release that went smoothly without mistakes.

Grouping all (or most) crossbeam crates into the main crate (kind of like what tokio is doing these days) and publishing 1.0s would alleviate this pain for everyone.

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

Successfully merging this pull request may close these issues.

None yet

4 participants