Before we really dig into the solution, I wanted to at least enumerate the problems.
Our primary motivation is to make Rust as successful as possible. I don't think we say that enough. I don't mean in a "Rewrite it in Rust" way. I mean in a "people should always be able to choose Rust for their project". We should be removing any blocks in the way of someone picking up Rust.
We've already been doing great work here with things like rustup, clippy, and all the IDE plugins. We're hacking away at where we see these blocks, but here I wanted to spell out the problems that motivating things about the platform.
From the survey results, we got feedback on what things need to be addressed:
- Learning curve
- Lack of IDE support
- Immaturity of libraries
Learning curve was a huge point of feedback. Looking at the comments, people mentioned it more than anything else. Why is learning curve important?
While some of us have time to really dig into Rust, most of us simply just don't. Those of us who have put the time in know that Rust is worth it. You get out what you put in, and sometimes the result can be surprisingly efficient even in your first attempt. This makes Rust fairly unique among languages. The problem is that learning curve sharp. Some users describe it as the "nightmare week" before they understand enough of the language to be effective.
The lack of IDE support is important, and I'd happily talk about that for hours, but I wanted to skip to the immaturity of the libraries and dig into that.
If you look at crates.io lots (most?) of the crates there haven't hit 1.0 yet. This is a signal to many developers that Rust simply isn't ready for prime-time. These programmers don't want to spend time messing with APIs that are breaking underneath them. They're too busy trying to solve their actual problem instead of dealing with maintenance issues. Once they see this, Rust is a non-starter.
There's more to it than just the version numbers, though they're important. Rust also needs a shared vocabulary. We're seeing issues where there are lots of ways to do something. While this is great in a way because there's a lot of choice, it's also is a drag on developer time trying to find the right one. Additionally, it's simply easier to "build higher from the 17th floor than the ground floor". For example, by having an established set of traits and capabilities we build networking on, we can build even more sophisticated networking functionality on top it because we know it's stable and supported. Of course, replace "networking" with a variety of common programming tasks.
That stability opens up the doors to a lot of new users. Going back to the comment about people not having enough time. With that shared vocabulary, we can do things like write guides and tutorials that assume these features are available. This lets us make much better starting examples help users quickly solve real problems. This saves them time and gains the community another Rust developer in the process.
If we can solve the learning curve, give crates a reason to hit 1.0, and build a shared vocabulary, we've given Rust a much stronger platform to build on and more quickly get new Rust users going.