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