Skip to content

Commit 3c4dd21

Browse files
committed
2018 roadmap
1 parent 2a9fafc commit 3c4dd21

File tree

1 file changed

+221
-0
lines changed

1 file changed

+221
-0
lines changed

_posts/2018-03-08-roadmap.md

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
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

Comments
 (0)