1
1
---
2
2
layout : post
3
3
title : " Rust's 2018 roadmap"
4
- author : " Aaron Turon "
4
+ author : " The Rust Core Team "
5
5
---
6
6
7
- # Rust’s 2018 roadmap
8
-
9
7
Each year the Rust community [ comes together] [ roadmap-process ] to set out a
10
8
roadmap. This year, in addition to the [ survey] , we put out
11
9
a [ call for blog posts] [ blog-2018 ] in December, which resulted
@@ -18,60 +16,29 @@ result is the recently-merged [2018 roadmap RFC][rfc].
18
16
[ read-rust ] : https://readrust.net/rust-2018/
19
17
[ rfc ] : https://github.com/rust-lang/rfcs/pull/2314
20
18
21
- ## Entering the Rust 2018 epoch
19
+ ## Rust: 2018 edition
22
20
23
- ** This year, we will deliver _ Rust 2018_ , marking the first new era in Rust programming since 1.0** .
21
+ ** This year, we will deliver _ Rust 2018_ , marking the first major new edition of
22
+ Rust since 1.0** (aka Rust 2015).
24
23
25
24
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.
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.
30
29
31
- The idea of “epochs” is to signify major steps in Rust’s evolution, where a
30
+ The idea of editions is to signify major steps in Rust’s evolution, where a
32
31
collection of new features or idioms, taken as a whole, changes the experience
33
32
of using Rust. They’re a chance, every few years, to take stock of the work
34
33
we’ve delivered in six-week increments. To tell a bigger story about where Rust
35
34
is going. And to ship the whole stack as a polished product.
36
35
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:
36
+ We expect that each edition will have a core theme or focus. Thinking of 1.0 as
37
+ "Rust 2015" , we have:
39
38
40
39
- Rust 2015: [ stability] ( https://blog.rust-lang.org/2014/09/15/Rust-1.0.html )
41
40
- Rust 2018: productivity
42
41
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
42
## What will be in Rust 2018?
76
43
77
44
The roadmap doesn’t say _ for certain_ what will ship in Rust 2018, but we have a
@@ -88,10 +55,10 @@ revamp this year. And there are numerous third party books, like [Programming
88
55
Rust] , reaching print as well.
89
56
90
57
[ 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
58
+ [ Programming Rust ] : http ://shop.oreilly .com/product/0636920040385.do
92
59
[ Rust By Example ] : https://rustbyexample.com/
93
60
94
- ** Language improvements**
61
+ ### Language improvements
95
62
96
63
The most prominent language work in the pipeline stems from [ 2017’s ergonomics
97
64
initiative] . Almost all of the accepted RFCs from the initiative are available
@@ -101,18 +68,17 @@ form the backbone of the release:
101
68
102
69
[ 2017’s ergonomics initiative ] : https://blog.rust-lang.org/2017/03/02/lang-ergonomics.html
103
70
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.
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 increasingly clarity and reducing
76
+ complexity.
77
+ - ** Generators/async/await:** work is rapidly progressing on first-class async
78
+ programming support.
113
79
114
80
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** .
81
+ Rust 2018 release, including ** SIMD** , ** custom allocators** , and ** macros 2.0** .
116
82
117
83
### Compiler improvements
118
84
@@ -123,23 +89,23 @@ builds, but over the course of the year we expect continued improvements for
123
89
_ both_ fresh and re-builds. Compiler performance should not be an obstacle to
124
90
productivity in Rust 2018.
125
91
126
-
127
-
128
92
### Tooling improvements
129
93
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 .
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 .
137
101
102
+ [ Rust Language Server ] : https://github.com/rust-lang-nursery/rls
138
103
[ Cargo build system integration ] : https://github.com/rust-lang/rfcs/pull/2136
139
- [ Xargo integration ] : https://github.com/japaric/xargo
104
+ [ Xargo integration ] : https://github.com/rust-lang/cargo/issues/4959
140
105
[ custom test frameworks ] : https://github.com/rust-lang/rfcs/pull/2318
106
+ [ `rustfmt` ] : https://github.com/rust-lang-nursery/rustfmt
141
107
142
- ## Library improvements
108
+ ### Library improvements
143
109
144
110
Building on [ our work from last year] [ blitz ] , we will publish a 1.0 version of
145
111
the [ Rust API guidelines book] , continue pushing important libraries to 1.0
@@ -149,14 +115,14 @@ heavy investments in libraries in specific domains—as we’ll see below.
149
115
[ blitz ] : https://blog.rust-lang.org/2017/05/05/libz-blitz.html
150
116
[ Rust API guidelines book ] : https://github.com/rust-lang-nursery/api-guidelines
151
117
152
- ** Web site improvements**
118
+ ### Web site improvements
153
119
154
120
As part of Rust 2018, we will completely overhaul the Rust web site, making it
155
121
useful for CTOs and engineers alike. It should be far easier to find information
156
122
to help evaluate Rust for your use case, and to stay up to date with the latest
157
123
tooling and ecosystem improvements.
158
124
159
- ## Four target domains
125
+ ### Four target domains
160
126
161
127
Part of our goal with Rust 2018 is to demonstrate Rust’s productivity in
162
128
specific domains of use. We’ve selected four such domains to invest in and
@@ -165,21 +131,62 @@ highlight this year:
165
131
- ** Network services** . Rust’s reliability and low footprint make it an
166
132
excellent match for network services and infrastructure, especially at high
167
133
scale.
168
- - ** CLI apps** . Rust’s portability, reliability, ergonomics, and ability to
134
+ - ** [ Command-line apps] ** (CLI) . Rust’s portability, reliability, ergonomics, and ability to
169
135
produce static binaries come together to great effect for writing CLI apps.
170
- - ** WebAssembly** . The “wasm” web standard allows shipping native-like binaries
136
+ - ** [ WebAssembly] ** . The “wasm” web standard allows shipping native-like binaries
171
137
to all major browsers, but GC support is still years away. Rust
172
138
is [ extremely well positioned] ( https://mgattozzi.com/rust-wasm ) to target this
173
139
domain, and provides a reasonable on-ramp for programmers coming from JS.
174
- - ** Embedded devices** . Rust has the potential to make programming
140
+ - ** [ Embedded devices] ** . Rust has the potential to make programming
175
141
resource-constrained devices much more productive—and fun! We want embedded
176
142
programming to reach first-class status this year.
177
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
+
178
148
Each of these domains has a dedicated working group for the year. These WGs will
179
149
work in a cross-cutting fashion, interfacing with language, tooling, library,
180
150
and documentation work.
181
151
182
- ## Better serving intermediate Rustaceans
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
183
190
184
191
One of the strongest messages we’ve heard from production users, and [ the 2017
185
192
survey] , is that people need more resources to take them from understanding
@@ -192,13 +199,13 @@ some solid new material.
192
199
[ the 2017 survey ] : https://blog.rust-lang.org/2017/09/05/Rust-2017-Survey-Results.html
193
200
[ intermediate ] : https://quietmisdreavus.net/code/2018/01/10/not-a-layer-cake-analogy/
194
201
195
- ## Community
202
+ ### Community
196
203
197
204
** 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.
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.
202
209
203
210
** Grow Rust's teams and new leaders within them** . We will refactor the Rust
204
211
team structure to support more scale, agility, and leadership growth. We will
@@ -213,9 +220,9 @@ teams where we could use the most help. Note that all IRC channels refer to the
213
220
irc.mozilla.org network.
214
221
215
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!
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!
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!
217
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 )
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!
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!
220
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!
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!
228
+ - ** Release team** . Drop by #rust-release on IRC to get involved with regression triage and release production!
0 commit comments