2019 Roadmap Progress?

The roadmap this year outlines a theme of finishing what we started and paying down tech debt. I'm wondering what people have been working on and how much progress has been made on this roadmap. Are there concrete goals we have accomplished? Is there something we can celebrate? Is there something we should push harder on?


rust-analyzer is mostly the opposite of "finishing what we started" implementation-wise, but it fits in the overall "maturity of tooling" theme. The biggest thing that happened is that we proved that it is possible to expand macros and solve traits to provide correct instant completions for Rust, in principle (:tada:).

So far, this was mostly an independent of rustc experiment, but now I think we should push harder on making rustc work along the lines of rust-analyzer. I am proud of the first step in this direction: rust-analyzer and rustc now actually share the same lexer. Now we only need to split the rest of the compiler into libraries :rofl:


Great idea to check in!

I suppose the other obvious one is async/await. With std::future stabilized in 1.36 and .await coming in 1.39, a lot of progress has been made. On the other hand, it's pretty far from being "finished"; there will still be async trait methods, streams and async closures to design and/or implement.

For reference: Rust's 2019 roadmap blog post and RFC 2657.


This sounds like an interesting exercise. Here's an update on the Cargo team. Apologies if it is too long/verbose.

  • Cross-compilation
    • The first PR for std-aware cargo should land within a few days. There is still a long road ahead, but I'm pleased with getting this first step.
  • Plugins
    • Unfortunately there has not been significant progress on this. About the only progress is small additions to cargo metadata to make it more powerful (such as this upcoming change). There are also plans to separate "platform" parsing to go along with this.
    • Since there isn't anyone championing any other parts of this story, it is unlikely to make significant progress this year.
  • Compile times
    • Pipelining is now enabled, which should land in 1.38.
    • Supporting multiple target directories is a bit blocked right now on reorganizing some parts of the target directory. Multiple target directories would allow you to have a shared global cache between projects. There are two PRs (6577 and 6668) laying the groundwork, but work has stalled a bit. Some work needs to be invested to figure out how to not break most tools and projects. I plan on reviving this very soon. This is also blocked by having some kind of story for better cache management, which was recently summarized here.
    • I do not think there has been any progress on pre-built binaries, and I think is unlikely this year.
    • HTTP/2 multiplexing hit stable 1.32 in January.
  • Documentation
    • Man pages were all rewritten and are now published online in 1.33.
    • A glossary was added in 1.32.
    • A changelog is now being kept.
    • There hasn't been much focused effort on improving documentation. I have some moderate things I want to do (such as separate chapters on the resolver, workspaces, profiles, and features), but haven't really started.
  • Features
    • I have recently revived design work on improving features, but there is a long road ahead. One of the greatest challenges has been trying to decide how to deal with backwards compatibility, since several enhancements are in direct opposition of how the current system works.
    • 7216 lays some basic groundwork needed to better track features within the compilation graph.
  • Profiles
    • Named profiles is underway.
    • Build profiles has a PR, but it is stalled. I hope to resume it this year. It is blocked on target directory reorganization.
    • I'm delaying stabilization of other profile enhancements until named profiles is closer to finished. I've also discovered some issues with profile overrides that concerns me.
  • Other
    • Alternate registry support was stabilized in 1.34.
    • Offline support was stabilized in 1.36.
    • cargo vendor was moved into cargo in 1.37.
    • published lockfiles was stabilized in 1.37.
    • default-run was stabilized in 1.37.
    • Pre-publish verification has not made significant progress this year, AFAIK. There is a summary of validation, but it really needs a new publish web API.
    • More than 300 PRs have been merged this year so far. Many performance improvements, fixes, and small changes, this list is already too long!
  • New, unstable features added:

This blog post has data on the quite significant compilation speed improvements between January 1st and July 24th.