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.