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
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,11 @@
# Version 0.7.3

- Fix breakage with nightly feature due to rust-lang/rust#65214.
- Bump `crossbeam-channel` to `0.4`.
- Bump `crossbeam-epoch` to `0.8`.
- Bump `crossbeam-queue` to `0.2`.
- Bump `crossbeam-utils` to `0.7`.

# Version 0.7.2

- Bump `crossbeam-channel` to `0.3.9`.
Expand Down
10 changes: 5 additions & 5 deletions Cargo.toml
Expand Up @@ -4,7 +4,7 @@ name = "crossbeam"
# - Update CHANGELOG.md
# - Update README.md
# - Create "crossbeam-X.Y.Z" git tag
version = "0.7.2"
version = "0.7.3"
authors = ["The Crossbeam Project Developers"]
license = "MIT/Apache-2.0"
readme = "README.md"
Expand Down Expand Up @@ -35,7 +35,7 @@ alloc = ["crossbeam-epoch/alloc", "crossbeam-utils/alloc"]
cfg-if = "0.1.2"

[dependencies.crossbeam-channel]
version = "0.3.9"
version = "0.4"
path = "./crossbeam-channel"
optional = true

Expand All @@ -45,17 +45,17 @@ path = "./crossbeam-deque"
optional = true

[dependencies.crossbeam-epoch]
version = "0.7.2"
version = "0.8"
path = "./crossbeam-epoch"
default-features = false

[dependencies.crossbeam-queue]
version = "0.1.0"
version = "0.2"
path = "./crossbeam-queue"
optional = true

[dependencies.crossbeam-utils]
version = "0.6.6"
version = "0.7"
path = "./crossbeam-utils"
default-features = false

Expand Down
4 changes: 4 additions & 0 deletions README.md
Expand Up @@ -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.


## Contributing

Crossbeam welcomes contribution from everyone in the form of suggestions, bug reports,
Expand Down
5 changes: 5 additions & 0 deletions crossbeam-channel/CHANGELOG.md
@@ -1,3 +1,8 @@
# Version 0.4.0

- Bump the minimum required version to 1.28.
- Bump `crossbeam-utils` to `0.7`.

# Version 0.3.9

- Fix a bug in reference counting.
Expand Down
4 changes: 2 additions & 2 deletions crossbeam-channel/Cargo.toml
Expand Up @@ -4,7 +4,7 @@ name = "crossbeam-channel"
# - Update CHANGELOG.md
# - Update README.md
# - Create "crossbeam-channel-X.Y.Z" git tag
version = "0.3.9"
version = "0.4.0"
authors = ["The Crossbeam Project Developers"]
license = "MIT/Apache-2.0 AND BSD-2-Clause"
readme = "README.md"
Expand All @@ -16,7 +16,7 @@ keywords = ["channel", "mpmc", "select", "golang", "message"]
categories = ["algorithms", "concurrency", "data-structures"]

[dependencies.crossbeam-utils]
version = "0.6.5"
version = "0.7"
path = "../crossbeam-utils"

[dev-dependencies]
Expand Down
4 changes: 4 additions & 0 deletions crossbeam-channel/README.md
Expand Up @@ -51,6 +51,10 @@ Next, add this to your crate:
extern crate crossbeam_channel;
```

## Compatibility

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

## License

Licensed under either of
Expand Down
5 changes: 5 additions & 0 deletions crossbeam-deque/CHANGELOG.md
@@ -1,3 +1,8 @@
# Version 0.7.2

- Bump `crossbeam-epoch` to `0.8`.
- Bump `crossbeam-utils` to `0.7`.

# Version 0.7.1

- Bump the minimum required version of `crossbeam-utils`.
Expand Down
6 changes: 3 additions & 3 deletions crossbeam-deque/Cargo.toml
Expand Up @@ -4,7 +4,7 @@ name = "crossbeam-deque"
# - Update CHANGELOG.md
# - Update README.md
# - Create "crossbeam-deque-X.Y.Z" git tag
version = "0.7.1"
version = "0.7.2"
authors = ["The Crossbeam Project Developers"]
license = "MIT/Apache-2.0"
readme = "README.md"
Expand All @@ -16,11 +16,11 @@ keywords = ["chase-lev", "lock-free", "scheduler", "scheduling"]
categories = ["algorithms", "concurrency", "data-structures"]

[dependencies.crossbeam-epoch]
version = "0.7"
version = "0.8"
path = "../crossbeam-epoch"

[dependencies.crossbeam-utils]
version = "0.6.5"
version = "0.7"
path = "../crossbeam-utils"

[dev-dependencies]
Expand Down
4 changes: 4 additions & 0 deletions crossbeam-deque/README.md
Expand Up @@ -30,6 +30,10 @@ Next, add this to your crate:
extern crate crossbeam_deque;
```

## Compatibility

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

## License

Licensed under either of
Expand Down
7 changes: 7 additions & 0 deletions crossbeam-epoch/CHANGELOG.md
@@ -1,3 +1,10 @@
# Version 0.8.0

- Bump the minimum required version to 1.28.
jeehoonkang marked this conversation as resolved.
Show resolved Hide resolved
- Fix breakage with nightly feature due to rust-lang/rust#65214.
- Make `Atomic::null()` const function at 1.31+.
- Bump `crossbeam-utils` to `0.7`.

# Version 0.7.2

- Add `Atomic::into_owned()`.
Expand Down
4 changes: 2 additions & 2 deletions crossbeam-epoch/Cargo.toml
Expand Up @@ -4,7 +4,7 @@ name = "crossbeam-epoch"
# - Update CHANGELOG.md
# - Update README.md
# - Create "crossbeam-epoch-X.Y.Z" git tag
version = "0.7.2"
version = "0.8.0"
authors = ["The Crossbeam Project Developers"]
license = "MIT/Apache-2.0"
readme = "README.md"
Expand All @@ -27,7 +27,7 @@ cfg-if = "0.1.2"
memoffset = "0.5"

[dependencies.crossbeam-utils]
version = "0.6"
version = "0.7"
path = "../crossbeam-utils"
default-features = false

Expand Down
4 changes: 4 additions & 0 deletions crossbeam-epoch/README.md
Expand Up @@ -37,6 +37,10 @@ Next, add this to your crate:
extern crate crossbeam_epoch as epoch;
```

## Compatibility

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

## License

Licensed under either of
Expand Down
5 changes: 5 additions & 0 deletions crossbeam-queue/CHANGELOG.md
@@ -1,3 +1,8 @@
# Version 0.2.0

- Bump the minimum required version to 1.28.
- Bump `crossbeam-utils` to `0.7`.

# Version 0.1.2

- Update `crossbeam-utils` to `0.6.5`.
Expand Down
4 changes: 2 additions & 2 deletions crossbeam-queue/Cargo.toml
Expand Up @@ -4,7 +4,7 @@ name = "crossbeam-queue"
# - Update CHANGELOG.md
# - Update README.md
# - Create "crossbeam-queue-X.Y.Z" git tag
version = "0.1.2"
version = "0.2.0"
authors = ["The Crossbeam Project Developers"]
license = "MIT/Apache-2.0 AND BSD-2-Clause"
readme = "README.md"
Expand All @@ -16,7 +16,7 @@ keywords = ["queue", "mpmc", "lock-free", "producer", "consumer"]
categories = ["concurrency", "data-structures"]

[dependencies.crossbeam-utils]
version = "0.6.5"
version = "0.7"
path = "../crossbeam-utils"

[dev-dependencies]
Expand Down
2 changes: 1 addition & 1 deletion crossbeam-queue/README.md
Expand Up @@ -37,7 +37,7 @@ extern crate crossbeam_queue;

## Compatibility

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

## License

Expand Down
4 changes: 2 additions & 2 deletions crossbeam-skiplist/Cargo.toml
Expand Up @@ -25,12 +25,12 @@ alloc = ["crossbeam-epoch/alloc", "crossbeam-utils/alloc"]
cfg-if = "0.1.2"

[dependencies.crossbeam-epoch]
version = "0.7"
version = "0.8"
path = "../crossbeam-epoch"
default-features = false

[dependencies.crossbeam-utils]
version = "0.6"
version = "0.7"
path = "../crossbeam-utils"
default-features = false

Expand Down
4 changes: 4 additions & 0 deletions crossbeam-skiplist/README.md
Expand Up @@ -33,6 +33,10 @@ extern crate crossbeam_skiplist;
```
-->

## Compatibility

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

## License

Licensed under either of
Expand Down
9 changes: 8 additions & 1 deletion crossbeam-utils/CHANGELOG.md
@@ -1,3 +1,10 @@
# Version 0.7.0

- Bump the minimum required version to 1.28.
- Fix breakage with nightly feature due to rust-lang/rust#65214.
- Apply `#[repr(transparent)]` to `AtomicCell`.
- Make `AtomicCell::new()` const function at 1.31+.

# Version 0.6.6

- Add `UnwindSafe` and `RefUnwindSafe` impls for `AtomicCell`.
Expand Down Expand Up @@ -30,7 +37,7 @@

- Fix a soundness bug in `Scope::spawn()`.
- Remove the `T: 'scope` bound on `ScopedJoinHandle`.

# Version 0.6.0

- Move `AtomicConsume` to `atomic` module.
Expand Down
2 changes: 1 addition & 1 deletion crossbeam-utils/Cargo.toml
Expand Up @@ -4,7 +4,7 @@ name = "crossbeam-utils"
# - Update CHANGELOG.md
# - Update README.md
# - Create "crossbeam-utils-X.Y.Z" git tag
version = "0.6.6"
version = "0.7.0"
authors = ["The Crossbeam Project Developers"]
license = "MIT/Apache-2.0"
readme = "README.md"
Expand Down
4 changes: 4 additions & 0 deletions crossbeam-utils/README.md
Expand Up @@ -57,6 +57,10 @@ Next, add this to your crate:
extern crate crossbeam_utils;
```

## Compatibility

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

## License

Licensed under either of
Expand Down