Skip to content

Commit 415ddfb

Browse files
authored
Merge pull request #233 from rust-lang/aturon-2018-roadmap
2018 roadmap
2 parents 2a9fafc + 53f69c4 commit 415ddfb

File tree

1 file changed

+234
-0
lines changed

1 file changed

+234
-0
lines changed

_posts/2018-03-12-roadmap.md

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

Comments
 (0)