Skip to content

Commit 104eaf5

Browse files
committed
introduce Rust 2020 roadmap
1 parent 095ac2f commit 104eaf5

File tree

1 file changed

+368
-0
lines changed

1 file changed

+368
-0
lines changed

text/0000-roadmap-2020.md

Lines changed: 368 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,368 @@
1+
# Rust 2020 Roadmap RFC Draft
2+
3+
- Feature Name: N/A
4+
- Start Date: 2019-01-22
5+
- RFC PR: [rust-lang/rfcs#0000](https://github.com/rust-lang/rfcs/pull/0000)
6+
- Rust Issue: [rust-lang/rust#0000](https://github.com/rust-lang/rust/issues/0000)
7+
8+
# Summary
9+
[summary]: #summary
10+
11+
Lays out the Rust roadmap for 2020 in pursuit of our mission
12+
to empower everyone to build reliable and efficient software.
13+
The roadmap takes the form of the following goals for the project:
14+
15+
* Prepare for a possible Rust 2021 Edition
16+
* Followthrough on in-progress designs and efforts
17+
* Improve project functioning and governance:
18+
* Improve visibility into the state of initiatives and design efforts
19+
* Increase mentoring, leadership, and organizational bandwidth
20+
* Make design discussions more productive and less exhausting
21+
22+
# Motivation
23+
[motivation]: #motivation
24+
25+
Every year, the Rust project plans out a roadmap, in accordance with
26+
[RFC 1728]. The goal of the roadmap is to
27+
28+
* Align the Rust project on our priorities in the coming year, to help
29+
teams focus their efforts on addressing the most prominent problems
30+
* Communicate these priorities to the community and outside world
31+
32+
To that end, the roadmap describes the general goals that we believe the
33+
teams ought to be pursuing. These goals were chosen based on a number of
34+
sources:
35+
36+
[RFC 1728]: https://rust-lang.github.io/rfcs/1728-north-star.html
37+
38+
* Preliminary analysis of the [2019 survey], which took place in
39+
December.
40+
* The [many #rust2020 blog posts][rust2020] written in response to our
41+
[call for blog posts].
42+
* The thoughts and inputs from the members of the various Rust teams.
43+
44+
[2019 survey]: https://blog.rust-lang.org/2019/12/03/survey-launch.html
45+
[rust2020]: https://readrust.net/rust-2020/
46+
[call for blog posts]: https://blog.rust-lang.org/2019/10/29/A-call-for-blogs-2020.html
47+
48+
The roadmap is not meant to be "exclusive" -- that is, it's not the
49+
case that every single thing we do must tie in some way to the
50+
roadmap. But we do expect that our largest efforts will be put towards
51+
addressing the roadmap goals.
52+
53+
## Structure of the roadmap
54+
55+
The roadmap this year is based around a few central themes. These goals
56+
are intentionally rather broad -- they are meant to be interpreted
57+
throughout the year by the various teams, as they make decisions about
58+
what to pursue.
59+
60+
The roadmap does not contain specific technical details or
61+
proposals. We encourage the individual teams to post their thoughts
62+
about goals and ongoing projects for 2020, either in the form of
63+
[Inside Rust] blog posts or as [internals] threads.
64+
65+
[Inside Rust]: https://blog.rust-lang.org/inside-rust/index.html
66+
[internals]: https://internals.rust-lang.org/
67+
68+
# The goals
69+
70+
We have laid out three 'major goals' for Rust in 2020:
71+
72+
* Prepare for a possible Rust 2021 Edition
73+
* Followthrough on in-progress designs and efforts
74+
* Improve project functioning and governance:
75+
* Improve visibility into the state of initiatives and design efforts
76+
* Increase mentoring, leadership, and organizational bandwidth
77+
* Make design discussions more productive and less exhausting
78+
79+
## Prepare for a Rust 2021 edition
80+
81+
[Editions] were establshed as a means to help communicate the progress of
82+
the Rust language and provide a rallying point for overarching pieces of work.
83+
One of our goals for this year should be plan out any changes that we
84+
wish to make as part of the next Rust edition. If we are to continue
85+
the three-year cadence established with the release of Rust 2018, then
86+
the next edition would be released in 2021.
87+
88+
[Editions]: https://rust-lang.github.io/rfcs/2052-epochs.html
89+
90+
One thing that we learned quite clearly from the experience of Rust
91+
2018 was the importance of preparation. If we wish to do a Rust 2021
92+
edition, we need to be planning for it now. **The goal should be that
93+
any changes we wish to make in Rust 2021 are completed by October of
94+
2020**. Completed here means that the changes are available on
95+
Nightly. This leaves 2021 to do tooling and polish work, such as lints
96+
that will port code forward.
97+
98+
We have not yet formally decided to do an edition. **One specific scenario
99+
where we *would* expect to go forward with an edition is if we have work
100+
landed by October 2020 that relies on one.** The final decision will
101+
be made in October with an RFC, and it will be based on the work that
102+
has been completed until that date.
103+
104+
**What might an edition contain?** We've got a number of "in progress"
105+
language design features that may require minor changes tied to an
106+
edition, but this list is by no means exhaustive:
107+
108+
* Error handling, which could potentially see the introduction of new syntactic
109+
forms;
110+
* Improvements to the trait system;
111+
* Improvements to unsafe code, which might involve introducing new syntax like
112+
the `&raw` form proposed in [RFC 2582].
113+
114+
[RFC 2582]: https://rust-lang.github.io/rfcs/2582-raw-reference-mir-operator.html
115+
[#57893]: https://github.com/rust-lang/rust/issues/57893
116+
117+
One goal for this year, then, is to flesh out those areas in more detail and
118+
decide what changes, if any, we would like to do for Rust 2021. It is key to
119+
identify and plan out the changes we want to make sufficiently early that the
120+
tooling and documentation around these changes has time to mature before
121+
shipping.
122+
123+
**Editions and our stability promises.** Note that, as ever, issuing a
124+
new edition does not mean that old code stops compiling. Furthermore,
125+
any edition-related change would require appropriate tooling to help
126+
people transition their code, though the tooling might not be
127+
completed this year.
128+
129+
## Followthrough with in-progress designs and efforts
130+
131+
> I work with Rust for several years. The language is great, the
132+
> tooling is superb, but I have one growing uneasy feeling too. There
133+
> are several features that are almost ready, but not there yet. They
134+
> are in this state for a long time.
135+
>
136+
> -- [vorner](https://vorner.github.io/2019/11/12/rust-2020.html)
137+
138+
A major theme highlighted in numerous blog posts and team member's
139+
feedback is the tendency for Rust efforts to sometimes "get stuck"
140+
without being fully completed. Over the years, Rust has accumulated a
141+
number of "almost complete" efforts -- these range from
142+
language/library features to compiler refactorings to community
143+
projects.
144+
145+
One of our goals for this year is to reduce this backlog of "in
146+
progress" ideas, whether by implementing them or by explicitly opting
147+
to reject or postpone the idea. This does not mean that we should not
148+
accept any new work, but we should have a high level goal in mind of
149+
finishing the year with less, rather than more, "planned" work.
150+
151+
There are several motivations here. First, the set of "in-progress"
152+
designs and efforts already encompasses the most hotly desired
153+
features and initiatives. But further, stalled work can be
154+
demotivating and confusing. When an initiative spans over several
155+
years, it becomes harder and harder to track the current the state and
156+
to remember all of the key design constraints. This in turn hinders
157+
participation in the Rust project and makes it harder to figure out
158+
what is going on (see also: the goal of improving visibility into the
159+
state of our initiatives and design efforts).
160+
161+
## Improve project functioning, governance, and visibility
162+
163+
> Organizational work is at the core of everything else that happens in the project, and above all else this seems to be the one thing we should keep improving. We’re growing fast, and our organization needs to grow with it.
164+
>
165+
> -- [Yoshua Wuyts](https://blog.yoshuawuyts.com/rust-2020/)
166+
167+
The Rust project has grown dramatically over the last few years, in every dimension:
168+
169+
* We have more users than ever before.
170+
* We are seeing many more companies -- and much larger companies -- adopting Rust.
171+
* Our organization and Rust teams have grown.
172+
173+
This is great news! But with this growth comes challenges. We are
174+
finding that it is harder and harder to ensure communication across
175+
the organization. It can often be challenging to find enough people to
176+
do the work we would like to get done, which in turn leads to burnout
177+
or people leaving the project. We've identified three major goals that
178+
we think will help.
179+
180+
### Improve visibility into the state of initiatives and design efforts
181+
182+
Right now it is very difficult to answer questions like "what are the
183+
active efforts and how can I help" to "what is the status of feature
184+
X". This is true both for folks who are deeply embedded in the Rust
185+
organization and for newcomers.
186+
187+
There are many ways to improve visibiility, but the most basic step is
188+
simply expending more effort on posting updates and documenting the
189+
status. Things like the Inside Rust blog are helpful here, and we
190+
should look for other ways to incorporate lightweight status updates
191+
into our workflows.
192+
193+
### Increase mentoring, leadership, and organizational bandwidth
194+
195+
One common challenge for us is that we seem to lack enough people to
196+
get the work done that we would like to get done. But what we're
197+
missing is not just *any* people, it's people who can help to do the
198+
"leadership" work that knits the project together.
199+
200+
This work takes many forms. Sometimes it is technical, such as writing
201+
mentoring instructions on issues, but more often it is organizational,
202+
such as running meetings, posting blog posts (see the previous point),
203+
or making plans.
204+
205+
We have made great progress over the years by intentionally focusing
206+
on the "on-ramp" to contribution, through efforts like tagging E-easy
207+
issues. We've made more limited progress on helping people "step up"
208+
towards leadership roles.
209+
210+
Part of the problem here is money. One of the biggest challenges
211+
around organizational work is that it is quite demanding in terms of
212+
time. It requires availability. It is difficult to do in your spare
213+
time. Therefore, helping to ensure that it is easier for people to get
214+
paid for their work on Rust -- and especialy their **organizational**
215+
work -- is one way we might make progress here.
216+
217+
However, it's worth emphasizing that this doesn't necessarily mean
218+
people whose job description is *solely* to work on Rust. There are
219+
many companies using Rust, and many of them would like to help out,
220+
but we need to do better at harnessing and directing those efforts.
221+
As Parity put it in their #rust2020 post:
222+
223+
> “We, too, have team members who are interested in helping on
224+
> specialization or fixing the aforementioned bugs. However, it’s
225+
> often unclear whether the work is worthwhile. To a business, it is
226+
> hard to argue that one might spend a month or two working on a new
227+
> feature without any assurance that the approach taken would be
228+
> accepted.”
229+
>
230+
> -- [Benjamin Kampmann, speaking for Parity](https://www.parity.io/rust-/)
231+
232+
### Make design discussions more productive and less exhausting
233+
234+
> An RFC, or "request for comments" is a mechanism by which a group of
235+
> people can get feedback from a wider community on proposed
236+
> changes. The idea is that a written proposal outlines a change's
237+
> scope, implementation details, rationale and impact on the
238+
> ecosystem, then people make comments on the proposal. Usually by the
239+
> time that everybody has stopped shouting at each other, the RFC is
240+
> ready to be merged, meaning it is accepted and its vision can be
241+
> implemented. This can either be implementing a feature, or removing
242+
> unstable flags from it.
243+
>
244+
> -- [spacekookie](https://spacekookie.de/blog/rust-2020-the-rfc-process-and-distributions/)
245+
246+
The RFC process has been a crucial part of Rust's organization for a
247+
long time. The process of documenting and talking over our designs is
248+
often very helpful for improving the design and sometimes leads to
249+
dramatic changes. Many other languages have adopted RFCs and
250+
explicitly cited Rust as precedent.
251+
252+
Of course, we also have ample evidence that the RFC process as
253+
presently practiced does not work well for larger-scale or
254+
controversial designs. Last year we put a lot of energy into thinking
255+
about techniques for improving the process, and this year we need to
256+
put more of that energy into actually making those changes.
257+
258+
# Yearly calendar
259+
260+
Here is a rough calendar of major events in the planning of Rust. Note
261+
that we have attempted to move up some of the Rust 2021 planning --
262+
e.g., the survey, edition, and so forth -- so that they begin earlier
263+
in 2020, versus the timing from this year.
264+
265+
* January
266+
* Rust 2020 survey results published
267+
* Roadmap RFC opened
268+
* February
269+
* March
270+
* Rust All Hands will take place March 16-20
271+
* Publish All Hands retrospective
272+
* April
273+
* May
274+
* June
275+
* Publish progress report, describing what work we have done so
276+
far towards the goals of this roadmap
277+
* July
278+
* August
279+
* Start organizing 2020 Rust survey
280+
* September
281+
* 2020 Rust survey goes live and runs for two weeks
282+
* Analysis of 2020 Rust survey data begins
283+
* October:
284+
* Publish survey results
285+
* All 2021 edition work must be landed
286+
* Call for Rust 2021 blog posts begins here
287+
* Begin work on retrospective
288+
* November
289+
* Publish retrospective on what has happened over 2020
290+
* December -- holiday month, things traditionally run slowly here
291+
292+
# Drawbacks
293+
[drawbacks]: #drawbacks
294+
295+
One concern that has come up this year in particular is that we frequently do
296+
not "tie" efforts actively to goals established in past roadmaps. This is one
297+
reason that this year's roadmap is specifically intended to be much more high
298+
level, with the fine grained details left up to the individual teams and the
299+
community to decide upon.
300+
301+
# Rationale and alternatives
302+
[rationale-and-alternatives]: #rationale-and-alternatives
303+
304+
The roadmap this year is different in structure than prior years. In
305+
particular, we have avoided setting precise goals, in favor of
306+
describing more general mandates and themes.
307+
308+
We chose to take this approach for a few reasons:
309+
310+
* The roadmap RFC doesn't seem like an appropriate place to make
311+
decisions on specific solutions. Those should be discussed in their
312+
own, dedicated RFCs.
313+
* We wanted to encourage teams and project members to think about how these
314+
mandates apply best to the particular questions that they are working with.
315+
316+
However, there are some clear downsides. In particular, the goals we
317+
have chosen are not the sort of goal that one can "complete". Clearly,
318+
for example, the structure of the organization will always be open to
319+
improvement, and there will always be a need to followthrough on
320+
goals.
321+
322+
Our expectation is that, over the course of the year, we will relate
323+
our concrete actions to these goals and -- in the form of a
324+
retrospective -- try to relate what progress we have made (or not
325+
made, as the case may be).
326+
327+
## Frequently asked questions
328+
329+
*This list contains questions that were raised during pre-discussion
330+
of the RFC. We expect to grow the list with more questions raised
331+
during the actual RFC discussion.*
332+
333+
### What about a Rust foundation?
334+
335+
It seems likely that we will pursue creating a Rust foundation this
336+
year, perhaps along the lines that [nikomatsakis described in a recent
337+
blog post][bpf]. We opted not to include that as a "line item" in this
338+
RFC because we were generally trying to describe specific solutions,
339+
but more to describe the goals that we should be working towards. Any
340+
effort to create a foundation would fit well under "Improve project
341+
functioning and governance", however.
342+
343+
[bpf]: http://smallcultfollowing.com/babysteps/blog/2020/01/09/towards-a-rust-foundation/
344+
345+
### What about const generics, async I/O, cargo features, etc?
346+
347+
These are all examples of "in-progress designs and efforts" that
348+
likely make sense for us to pursue. We leave the finer-grained
349+
decision making efforts up to the teams themselves or to follow-up
350+
RFCs where appropriate.
351+
352+
# Prior art
353+
[prior-art]: #prior-art
354+
355+
Not applicable.
356+
357+
# Unresolved questions
358+
[unresolved-questions]: #unresolved-questions
359+
360+
Not applicable: this section is ordinarily used to identify things to
361+
be figured out as the work proceeds, which doesn't really apply here.
362+
363+
# Future possibilities
364+
[future-possibilities]: #future-possibilities
365+
366+
Not applicable.
367+
368+

0 commit comments

Comments
 (0)