|
| 1 | +--- |
| 2 | +layout: post |
| 3 | +title: "Rust's 2018 roadmap" |
| 4 | +author: "Aaron Turon" |
| 5 | +--- |
| 6 | + |
| 7 | +# Rust’s 2018 roadmap |
| 8 | + |
| 9 | +Each year the Rust community [comes together][roadmap-process] to set out a |
| 10 | +roadmap. This year, in addition to the [survey], we put out |
| 11 | +a [call for blog posts][blog-2018] in December, which resulted |
| 12 | +in [100 blog posts][read-rust] written over the span of a few weeks. The end |
| 13 | +result is the recently-merged [2018 roadmap RFC][rfc]. |
| 14 | + |
| 15 | +[roadmap-process]: https://github.com/rust-lang/rfcs/pull/1728 |
| 16 | +[survey]: https://blog.rust-lang.org/2017/09/05/Rust-2017-Survey-Results.html |
| 17 | +[blog-2018]: https://blog.rust-lang.org/2018/01/03/new-years-rust-a-call-for-community-blogposts.html |
| 18 | +[read-rust]: https://readrust.net/rust-2018/ |
| 19 | +[rfc]: https://github.com/rust-lang/rfcs/pull/2314 |
| 20 | + |
| 21 | +## Entering the Rust 2018 epoch |
| 22 | + |
| 23 | +**This year, we will deliver _Rust 2018_, marking the first new era in Rust programming since 1.0**. |
| 24 | + |
| 25 | +We will continue to publish releases every six weeks as usual. But we will |
| 26 | +designate a release in the latter third of the year (Rust 1.29 - 1.31) as the |
| 27 | +beginning of the Rust 2018 epoch. This “epoch release” will be the culmination |
| 28 | +of feature stabilization throughout the year, and will ship with polished |
| 29 | +documentation, tooling, and libraries that tie in to those features. |
| 30 | + |
| 31 | +The idea of “epochs” is to signify major steps in Rust’s evolution, where a |
| 32 | +collection of new features or idioms, taken as a whole, changes the experience |
| 33 | +of using Rust. They’re a chance, every few years, to take stock of the work |
| 34 | +we’ve delivered in six-week increments. To tell a bigger story about where Rust |
| 35 | +is going. And to ship the whole stack as a polished product. |
| 36 | + |
| 37 | +We expect that epochs will have a core theme or focus. Thinking of 1.0 as the |
| 38 | +start of the 2015 era, we have: |
| 39 | + |
| 40 | +- Rust 2015: [stability](https://blog.rust-lang.org/2014/09/15/Rust-1.0.html) |
| 41 | +- Rust 2018: productivity |
| 42 | + |
| 43 | +### Compatibility across epochs |
| 44 | + |
| 45 | +**TL;DR: Rust will continue its stability guarantee |
| 46 | +of [hassle-free updates to new versions][stability]**. |
| 47 | + |
| 48 | +[stability]: https://blog.rust-lang.org/2014/10/30/Stability.html |
| 49 | + |
| 50 | +Epochs will have a meaning for the compiler. You will be able to write: |
| 51 | + |
| 52 | +```toml |
| 53 | +epoch = "2018" |
| 54 | +``` |
| 55 | + |
| 56 | +in your Cargo.toml to _opt in_ to the new epoch for your crate. Doing so may |
| 57 | +introduce new keywords or otherwise require adjustments to code. However: |
| 58 | + |
| 59 | +- You can use _old_ epochs indefinitely on _new_ compilers; **epochs are |
| 60 | + opt-in**. |
| 61 | +- Epochs are set on a _per-crate_ basis and can be mixed and matched; **you |
| 62 | + can be on a different epoch from your dependencies**. |
| 63 | +- Warning-free code in one epoch must compile, and have the same behavior, on |
| 64 | + the next. |
| 65 | +- Epoch-related warnings, e.g. that an identifier will become a keyword in the |
| 66 | + next epoch, must be easily fixable via an automated migration tool |
| 67 | + (rustfix). **Only a small minority of crates should require** **_any_** |
| 68 | + **manual work to opt in to a new** epoch, and that manual work must be |
| 69 | + minimal. |
| 70 | + |
| 71 | +In other words, the progression of new compiler versions is independent from |
| 72 | +epoch; you can migrate at your leisure, and don’t have to worry about ecosystem |
| 73 | +compatibility; and epoch migration is normally trivial. |
| 74 | + |
| 75 | +## What will be in Rust 2018? |
| 76 | + |
| 77 | +The roadmap doesn’t say _for certain_ what will ship in Rust 2018, but we have a |
| 78 | +pretty good idea, and we’ll cover the major suspects below. |
| 79 | + |
| 80 | +### Documentation improvements |
| 81 | + |
| 82 | +Part of the goal with the Rust 2018 release is to provide high quality |
| 83 | +documentation for the full set of new and improved features and the idioms they |
| 84 | +give rise to. [The Rust Programming Language book][trpl] has been completely |
| 85 | +re-written over the last 18 months, and will be updated throughout the year as |
| 86 | +features reach the stable compiler. [Rust By Example] will likewise undergo a |
| 87 | +revamp this year. And there are numerous third party books, like [Programming |
| 88 | +Rust], reaching print as well. |
| 89 | + |
| 90 | +[trpl]: https://doc.rust-lang.org/nightly/book/second-edition/ |
| 91 | +[Programming Rust]: https://www.google.com/search?q=programming+rust&ie=utf-8&oe=utf-8&client=firefox-b-1-ab |
| 92 | +[Rust By Example]: https://rustbyexample.com/ |
| 93 | + |
| 94 | +**Language improvements** |
| 95 | + |
| 96 | +The most prominent language work in the pipeline stems from [2017’s ergonomics |
| 97 | +initiative]. Almost all of the accepted RFCs from the initiative are available |
| 98 | +on nightly today, and will be polished and stabilized over the next several |
| 99 | +months. Among these productivity improvements are a few “headliners” that will |
| 100 | +form the backbone of the release: |
| 101 | + |
| 102 | +[2017’s ergonomics initiative]: https://blog.rust-lang.org/2017/03/02/lang-ergonomics.html |
| 103 | + |
| 104 | +- **Ownership system improvements**, including making borrowing more flexible |
| 105 | + via “non-lexical lifetimes”, improved pattern matching integration, and |
| 106 | + more. |
| 107 | +- **Trait system improvements**, including the long-awaited impl Trait syntax |
| 108 | + for dealing with types abstractly. |
| 109 | +- **Module system improvements**, focused on increasingly clarity and reducing |
| 110 | + complexity. |
| 111 | +- **Generators/async/await:** work is rapidly progressing on first-class async |
| 112 | + programming support. |
| 113 | + |
| 114 | +In addition, we anticipate a few more major features to stabilize prior to the |
| 115 | +epoch release, including **SIMD**, **custom allocators**, and **macros 2.0**. |
| 116 | + |
| 117 | +### Compiler improvements |
| 118 | + |
| 119 | +As of [Rust 1.24](https://blog.rust-lang.org/2018/02/15/Rust-1.24.html), |
| 120 | +incremental recompilation is available and enabled by default on the stable |
| 121 | +compiler. This feature already makes rebuilds significantly faster than fresh |
| 122 | +builds, but over the course of the year we expect continued improvements for |
| 123 | +_both_ fresh and re-builds. Compiler performance should not be an obstacle to |
| 124 | +productivity in Rust 2018. |
| 125 | + |
| 126 | + |
| 127 | + |
| 128 | +### Tooling improvements |
| 129 | + |
| 130 | +Rust 2018 will see high quality 1.0 releases of the RLS (underlying much of our |
| 131 | +IDE integration story) and rustfmt (a standard formatting tool for Rust |
| 132 | +code). We will continue to improve Cargo by stabilizing custom registries, |
| 133 | +public dependencies, and a revised profile system. We’re also expecting further |
| 134 | +work on [Cargo build system integration], [Xargo integration], and [custom test |
| 135 | +frameworks], though it’s unclear as yet which of these will be complete prior to |
| 136 | +the epoch release. |
| 137 | + |
| 138 | +[Cargo build system integration]: https://github.com/rust-lang/rfcs/pull/2136 |
| 139 | +[Xargo integration]: https://github.com/japaric/xargo |
| 140 | +[custom test frameworks]: https://github.com/rust-lang/rfcs/pull/2318 |
| 141 | + |
| 142 | +## Library improvements |
| 143 | + |
| 144 | +Building on [our work from last year][blitz], we will publish a 1.0 version of |
| 145 | +the [Rust API guidelines book], continue pushing important libraries to 1.0 |
| 146 | +status, improve discoverability through a revamped cookbook effort, and make |
| 147 | +heavy investments in libraries in specific domains—as we’ll see below. |
| 148 | + |
| 149 | +[blitz]: https://blog.rust-lang.org/2017/05/05/libz-blitz.html |
| 150 | +[Rust API guidelines book]: https://github.com/rust-lang-nursery/api-guidelines |
| 151 | + |
| 152 | +**Web site improvements** |
| 153 | + |
| 154 | +As part of Rust 2018, we will completely overhaul the Rust web site, making it |
| 155 | +useful for CTOs and engineers alike. It should be far easier to find information |
| 156 | +to help evaluate Rust for your use case, and to stay up to date with the latest |
| 157 | +tooling and ecosystem improvements. |
| 158 | + |
| 159 | +## Four target domains |
| 160 | + |
| 161 | +Part of our goal with Rust 2018 is to demonstrate Rust’s productivity in |
| 162 | +specific domains of use. We’ve selected four such domains to invest in and |
| 163 | +highlight this year: |
| 164 | + |
| 165 | +- **Network services**. Rust’s reliability and low footprint make it an |
| 166 | + excellent match for network services and infrastructure, especially at high |
| 167 | + scale. |
| 168 | +- **CLI apps**. Rust’s portability, reliability, ergonomics, and ability to |
| 169 | + produce static binaries come together to great effect for writing CLI apps. |
| 170 | +- **WebAssembly**. The “wasm” web standard allows shipping native-like binaries |
| 171 | + to all major browsers, but GC support is still years away. Rust |
| 172 | + is [extremely well positioned](https://mgattozzi.com/rust-wasm) to target this |
| 173 | + domain, and provides a reasonable on-ramp for programmers coming from JS. |
| 174 | +- **Embedded devices**. Rust has the potential to make programming |
| 175 | + resource-constrained devices much more productive—and fun! We want embedded |
| 176 | + programming to reach first-class status this year. |
| 177 | + |
| 178 | +Each of these domains has a dedicated working group for the year. These WGs will |
| 179 | +work in a cross-cutting fashion, interfacing with language, tooling, library, |
| 180 | +and documentation work. |
| 181 | + |
| 182 | +## Better serving intermediate Rustaceans |
| 183 | + |
| 184 | +One of the strongest messages we’ve heard from production users, and [the 2017 |
| 185 | +survey], is that people need more resources to take them from understanding |
| 186 | +Rust’s concepts to knowing how to use them _effectively_. The roadmap does not |
| 187 | +stipulate exactly what these resources should look like |
| 188 | +— [probably there should be several kinds][intermediate] — but commits us as a |
| 189 | +community to putting significant work into this space, and ending the year with |
| 190 | +some solid new material. |
| 191 | + |
| 192 | +[the 2017 survey]: https://blog.rust-lang.org/2017/09/05/Rust-2017-Survey-Results.html |
| 193 | +[intermediate]: https://quietmisdreavus.net/code/2018/01/10/not-a-layer-cake-analogy/ |
| 194 | + |
| 195 | +## Community |
| 196 | + |
| 197 | +**Connect and empower Rust's global community**. We will pursue |
| 198 | +internationalization (specifically: translation) as a first-class concern, and |
| 199 | +proactively work to build ties between Rust subcommunities currently separated |
| 200 | +by language, geography, or culture. We will spin up and support Rust events |
| 201 | +worldwide, including further growth of the RustBridge program. |
| 202 | + |
| 203 | +**Grow Rust's teams and new leaders within them**. We will refactor the Rust |
| 204 | +team structure to support more scale, agility, and leadership growth. We will |
| 205 | +systematically invest in mentoring, both by creating more on-ramp resources and |
| 206 | +through direct mentorship relationships. |
| 207 | + |
| 208 | +## A call to action |
| 209 | + |
| 210 | +As always in the Rust world, the goals laid out here will ultimately be the |
| 211 | +result of a community-wide effort—maybe one including you! Here are some of the |
| 212 | +teams where we could use the most help. Note that all IRC channels refer to the |
| 213 | +irc.mozilla.org network. |
| 214 | + |
| 215 | +- **WebAssembly WG**. Compiling Rust to WebAssembly should be _the_ best choice for fast code on the Web. Check out [rust-lang-nursery/rust-wasm](https://github.com/rust-lang-nursery/rust-wasm) to learn more and get involved! |
| 216 | +- **CLI WG**. Writing CLI apps in Rust should be a frictionless experience – from finding the right libraries and writing concise integration tests up to cross-platform distribution. Join us at [https://github.com/rust-lang-nursery/cli-wg](https://github.com/rust-lang-nursery/cli-wg) and help us reach that goal! |
| 217 | +- **Embedded Devices WG**. Quality, productivity, accessibility: Rust can change the embedded industry for the better. Let's get this process started in 2018! Join us at [https://github.com/rust-lang-nursery/embedded-wg](https://github.com/rust-lang-nursery/embedded-wg) |
| 218 | +- **Ecosystem** WG: We'll be providing guidance and support to important crates throughout the ecosystem. Drop into the [WG-ecosystem room](https://gitter.im/rust-lang/WG-ecosystem) and we'll guide you to places that need help! |
| 219 | +- **Dev Tools Team**. There are always interesting things to tackle with developer tools (IDEs, rustdoc, Clippy, Rustfmt, custom test frameworks, and more). Drop in to [#rust-dev-tools](https://paper.dropbox.com/?q=%23rust-dev-tools) and have a chat with the team! |
| 220 | +- **Rustdoc Team**. With your help, we can make documentation better for everyone. Come join us in #rustdoc on IRC, and we can help you get started! |
| 221 | +- **Release team**. Drop by [#rust-release](https://paper.dropbox.com/?q=%23rust-release) on IRC to get involved with regression triage and release production! |
0 commit comments