-
Notifications
You must be signed in to change notification settings - Fork 626
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
Start futures 0.4 and futures-core 1.0 development #2335
Conversation
Moving to If I understand this correctly this would force us to release a new major of |
It does seem like |
I wouldn't go so far to say decisions have been made, but we did arrive at a concensus in #2209 that if we can keep things from breaking we should. There may be conversations to be had on the design of the IO traits, but I think it'd be better to have those as part of moving |
I don't plan to make breaking changes on futures-io for now (see also rust-lang/wg-async#23 (comment)). Adding
Even if we don't bump futures-io, many crates also depend on stream, so async-std and others need major version bump anyway. |
Agreed with the principle of breaking as little code, and requiring as few incompatible-version migrations, as possible. I am on board with bumping Why does stream require a major version bump? |
I'm not sure what the question means, but futures and futures-util don't define their own abstractions, so if you don't implement 0.3 stream, sink, io, spawn, arcweak, and *ext traits in public APIs, updating futures/futures-util versions does not cause breaking change. If you implement those traits, it depends on the actual version of those traits. see also #2295
futures-core 1.0 stream and std stream have the same trait, but futures-core 0.3 is different. Updating from 0.3 to 1.0 / std is breaking change (if you are using futures-core 0.3 stream with a public API). see also RFC1105 |
|
please read #2207 (comment) and #2207 |
@taiki-e I've read those comments, and I'm still missing clear motivation for why we're seeking to publish a breaking release of
Quoting @cramertj's async interview who covered this topic rather well:
[1]: This may change of course if we add e.g. [2]: That could mean we don't ever publish a [3]: This is the kind of breakage that would warrant coverage on "inside Rust" or possibly even the main Rust blog. Given how much of Rust relies on |
struct Foo;
impl std::stream::Stream for Foo { ... }
impl futures_core::stream::Stream for Foo { ... } If |
I mentioned in #2207 (comment) that this could be an acceptable unchecked future-incompatibility, if we document now on |
I'd be strongly be in favor of doing this. In addition to that we can issue guidance on the compatibility between @Nemo157 would you be willing to file a PR for that? |
Even if Sticking to unstable versions (v0.x) would have a subtle implication for downstream libraries which conform to C-STABLE of the Rust API Guidelines: it would mean that they can never publish a stable release in principle, so I think it should be avoided if possible. |
First, I agree that futures-io does not need to be breaking changed as I already mentioned. I'll revert the version bump of futures-io. As for futures-core, I'm okay with using the tricks like that @Nemo157 and @tesaguri said. However, if the std Stream's signature becomes incompatible with futures 0.3 Stream, the 1.0 release will be breaking change and we will not introduce this trick. ...And keep in mind that it is t-libs and wg-async-foundations that decide on this, not the futures team. If t-libs and wg-async-foundations decide to stabilize Stream with a different signature than futures 0.3 Stream, futures team can't do anything about it. Actually, in the first proposal by wg-async-foundations, it was an incompatible signature. To be clear:
I don't think this is true. |
With the release of
I always want to minimize ecosystem breakage as much as possible, but after reading your claim, I'm thinking of giving up my efforts on it. Taking responsibility for the stability guarantee of a crate that violates the API guidelines is not what I hoped. Also I'm very disappointed that you used the word "Rust's reputation" to shift responsibility for the problem of "async-std violates API guidelines". |
Well, as for semver tricks, rand used it and caused problems many times, so I can't guarantee that it will be done even if the trait signatures are exactly the same. |
As for the migration guide: My projects (e.g., pin-project) have basically provided a clear description by changelog/release note (if you feel it is not clear, free feel to open an issue). I have no plans to write a migration guide as a complete blog like "inside Rust", but I'm planning to do the same thing I have done in my projects. I guess your concern stems from the lack of migration guides from 0.1 to 0.3 (there were too many changes in that release that no one could accurately track), but I have some concrete plans for what to do in this release and I'm not planning a lot of significant changes like 0.1-> 0.3, so I think it's basically enough. |
- futures-core: 0.3 -> 1.0 - futures-io: as-is - others: 0.3 -> 0.4
I noticed that I was meeting all the requests here. As I said above, we'll need to make a decision later on whether to actually do that, but seems to be enough to merge this anyway. |
I opened a tracking issue on how to handle stream trait compatibility between 0.3 and 1.0: #2362 |
(cross-posted to #2362) Hey all-- I've been a bit behind on catching up here. I'm reading the comments, but I have a few thoughts.
As a meta point, improving the coordination around this crate has been lacking and is something we should change. I would like to incorporate the overall role and vision for the |
- futures-core: 0.3 -> 1.0 - futures-io: as-is - others: 0.3 -> 0.4
Now that the
Stream
trait has been added to the standard library as an unstable feature, we can start developing the next major version.For now, I'm planning to release the next futures-core as 1.0 and the almost of other futures- * crates as 0.4, and not change the version of futures-io.
See milestone for changes planned or considered.
I think the release of futures 0.4/futures-core 1.0 may be the time when the stream stabilizes. (Unlike what I said in #2207.)
cc #2207
r? @cramertj @Nemo157 @seanmonstar
FYI @rust-lang/wg-async-foundations