The Rust split: stable vs. nightly
xion.io
xion.io
Nightly isn't stable because we don't want features to land prematurely. Rust is a great language precisely because it it well thought out. Don't rush things into stable and leave us with legacy cruft for the rest of time. That's dangerous and hurts everyone.
Anyone developing their library as nightly-only should expect to see little adoption. I only develop against stable and I'm quite productive with the tooling. Iron and Hyper are excellent web frameworks, and rustc_serialize gets the job done.
I can't wait to see Steve or another core contributor weigh in on this piece.
As evidence of this, it hasn't been so long since 1.0 that anyone's forgotten that "I don't want my code to break" was, in polls, the absolute #1 reason for people not using pre-1.0 Rust, by leaps and bounds.
A related thing: So far I have only written code using stable rust. I see some people using nightly, but I've never seen someone talking about using beta. Are there numbers about beta downloads? Does beta still fulfill its task if barely anyone is using it?
People aren't building castles on foundations of sand. They are building sandcastles, experimenting and building along as the language and ecosystem evolves and matures. Every nightly-only crate should be regarded as highly unstable and experimental. If a lot of people are building sandcastles surely that means that the language wasn't yet ready for that particular castle being made of stone.
And this is a good thing! AFAICT without nightly-only crates being so pervasive due to compiler plugins, Macros 1.1 wouldn't be so close to stabilization. Isn't that exactly what nightly is for? If some nightly feature is used a lot, that means it should promptly be polished and stabilized.
At such an early stage in the language's life the evolution is mutual. The development team responding timely to such issues is just another sign that Rust is a healthy (even if in its infancy) language.
Stable Rust is dead, long live Stable Rust!
> Stable Rust is dead. Nightly Rust is the only Rust.
Many people and orgs are using Rust stable. In production.
Nightly is a playground.
We shouldn't misinform those unfamiliar with the language or give them the opinion that Rust isn't well managed. Doing so can steer new talent and interest away. We are all relying on newcomers for more widespread adoption and faster growth of our community.
The author probably didn't mean any harm, but I feel like the article is disingenuous and should have a retraction before it causes any confusion.
(And for the record, I think Rocket is the perfect sort of project for helping us get experience with using unstable features, and helping us prioritize which should be stabilized first. I don't want to knock it just for using unstable features! People are too eager to forget that, as of two years ago, every Rust project was de facto unstable, and we've been making steady progress toward a majority-stable ecosystem since then, as expected.)
Exactly one of them requires nightly Rust, and that's because it uses a feature (Macros 1.1) scheduled to show up in stable in just under 6 weeks.
There are two reasons not to use nightly:
1. Stuff breaks. I remember the bad old days before Rust 1.0 and its iron-clad stability guarantees. I spent my time fixing a endless stream of GitHub issues reports across a half dozen projects. Modern nightly isn't so bad, but I'm still guiltily sitting on a PR about nightly breakage (as usual). But something that works in stable Rust just keeps working.
2. Stuff goes away. Nightly only features do get removed, and then you're stuck only building with an ancient nightly build.
https://www.reddit.com/r/rust/comments/5k4sep/a_tale_of_two_...
I recommend the nightly toolchain for development, but to target the stable Rust platform. This is possible because Rust is that good and unbuggy. Use nightly to get the best development tools, stable for the best platform (that doesn't break builds randomly).
> This is how they are utilized by Diesel, for example, a popular ORM and SQL query interface; or Serde, a serialization framework.
Diesel and Serde are going to be fully available on Rust 1.15, which is < 6 weeks away. This is actually an example of the complete opposite: the Rust project is working hard to get important projects to work on stable Rust so that people don't need nightlies.
It's undeniable that there is a significant amount of Rust software still reliant on unstable features, but I have not seen any numbers that would put it in perspective. Having consistent measurements of nightly vs stable adoption would help a lot, inform any conversation, and efforts to move off nightly.
So I think it's premature to say that 'nightly Rust is the only Rust', The article suggests that people are using nightly as the de-facto recommended toolchain, without evidence (though I'm sure somebody has recommended nightly be default). I'd encourage people not to recommend nightly and for Rust library developers to aim for their crates to be compatible with stable. I personally don't have the same sense as the author that Rust application or library developers are using nightly more than they have in the past. Rather I know that developers of key nightly-only libraries are actively involved in ecosystem migration off of nightly.
One of the biggest difference between the 2 / 3 split is that stable is generally compatible with nightly, and is intended to catch up with nightly, whereas Python 2 is not such a strict subset of Python 3 and its development is done. That is, nightly is intended to be a staging ground for stable; Python 3 does not have that same relationship to Python 2.
(Edit: I stated this awkwardly. In this comparison nightly=Python 2, stable=Python 3. The point stands that the relationships between the two branches are different between the two languages. Nightly development feeds into Stable, Python 2 doesn't feed into Python 3, it is not under active development.)
Because of this relationship there's still reason to have confidence this dependency on nightly will shrink over time. But not disappear. We would always expect some people to depend on nightly. That is its intended purpose - as a breeding ground for future features.
Some of the biggest features keeping people off stable Rust are coming, and their biggest users are actively migrating. In the near future there will be fewer reasons to use nightly, not more. And beyond that the reasons to stick to nightly will evolve as Rust evolves. The next demographic of users who will be stuck on nightly will be embedded developers, and that contingent will increase over time. But even as that group increases, the group that is freed up to use stable Rust will grow also. And slowly the stable ecosystem will coalesce for all classes of users and all types of code.
Though I don't believe it's happening to the extent the author does, I'd rather not see Rustaceans who care about Rust's future to adopt a nighly-first mindset. More things will get more stable, faster, by working together. But regardless of people's dispositions to the stable / nightly split, more of the ecosystem is going to work on stable over time - that is how the Rust feature pipeline works - and eventually stable Rust will be the only Rust.
I still expect it to all work out ok.