Skip to content

Commit 7db9716

Browse files
committed
Merge branch 'pr-2857'
Accept RFC 2857: Rust 2020 Roadmap
2 parents 4e4aef4 + 39e697e commit 7db9716

File tree

1 file changed

+395
-0
lines changed

1 file changed

+395
-0
lines changed

text/2857-roadmap-2020.md

Lines changed: 395 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,395 @@
1+
# Rust 2020 Roadmap
2+
3+
- Feature Name: N/A
4+
- Start Date: 2020-01-22
5+
- RFC PR: [rust-lang/rfcs#2857](https://github.com/rust-lang/rfcs/pull/2857)
6+
- Rust Issue: N/A
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+
* Follow-through 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+
* Follow-through 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 established 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+
It is notable also that the 2018 edition packaged two "experiences" into one:
130+
breaking changes and a reflection for the world on the work in past 3 years.
131+
That did not go as perfectly as we had hoped, and to this day there remains some
132+
confusion on this point. We should, by 2021, identify the marketing strategy we
133+
will use for the edition, but this should not affect the choices of breaking
134+
changes (as those will always be tied to the edition mechanism). We may,
135+
however, choose to decouple the edition from the progress report mechanism. This
136+
RFC explicitly does not identify which of these is the better approach to take.
137+
138+
## Follow-through with in-progress designs and efforts
139+
140+
> I work with Rust for several years. The language is great, the
141+
> tooling is superb, but I have one growing uneasy feeling too. There
142+
> are several features that are almost ready, but not there yet. They
143+
> are in this state for a long time.
144+
>
145+
> -- [vorner](https://vorner.github.io/2019/11/12/rust-2020.html)
146+
147+
A major theme highlighted in numerous blog posts and team member's
148+
feedback is the tendency for Rust efforts to sometimes "get stuck"
149+
without being fully completed. Over the years, Rust has accumulated a
150+
number of "almost complete" efforts -- these range from
151+
language/library features to compiler refactorings to community
152+
projects.
153+
154+
One of our goals for this year is to reduce this backlog of "in
155+
progress" ideas, whether by implementing them or by explicitly opting
156+
to reject or postpone the idea. This does not mean that we should not
157+
accept any new work, but we should have a high level goal in mind of
158+
finishing the year with less, rather than more, "planned" work.
159+
160+
There are several motivations here. First, the set of "in-progress"
161+
designs and efforts already encompasses the most hotly desired
162+
features and initiatives. But further, stalled work can be
163+
demotivating and confusing. When an initiative spans over several
164+
years, it becomes harder and harder to track the current the state and
165+
to remember all of the key design constraints. This in turn hinders
166+
participation in the Rust project and makes it harder to figure out
167+
what is going on (see also: the goal of improving visibility into the
168+
state of our initiatives and design efforts).
169+
170+
## Improve project functioning, governance, and visibility
171+
172+
> 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.
173+
>
174+
> -- [Yoshua Wuyts](https://blog.yoshuawuyts.com/rust-2020/)
175+
176+
The Rust project has grown dramatically over the last few years, in every dimension:
177+
178+
* We have more users than ever before.
179+
* We are seeing many more companies -- and much larger companies -- adopting Rust.
180+
* Our organization and Rust teams have grown.
181+
182+
This is great news! But with this growth comes challenges. We are
183+
finding that it is harder and harder to ensure communication across
184+
the organization. It can often be challenging to find enough people to
185+
do the work we would like to get done, which in turn leads to burnout
186+
or people leaving the project. We've identified three major goals that
187+
we think will help.
188+
189+
### Improve visibility into the state of initiatives and design efforts
190+
191+
Right now it is very difficult to answer questions like "what are the
192+
active efforts and how can I help" to "what is the status of feature
193+
X". This is true both for folks who are deeply embedded in the Rust
194+
organization and for newcomers.
195+
196+
There are many ways to improve visibility, but the most basic step is
197+
simply expending more effort on posting updates and documenting the
198+
status. Things like the Inside Rust blog are helpful here, and we
199+
should look for other ways to incorporate lightweight status updates
200+
into our workflows.
201+
202+
There are a number of possible sources for this information today, such as
203+
feature gate labels and tracking implementation history in tracking issues. Most
204+
of these have not been formally introduced to all teams nor have they been
205+
described in any particular nature; this experimentation has yielded mostly
206+
positive results. However, it does not do a good job of targeting end-users who
207+
have never visited the Rust issue tracker. We want to actively target community
208+
members who are not actively involved in the teams. In doing so, we should also
209+
avoid increasing the busywork factor on teams.
210+
211+
It has been noted by multiple team members that even those who are *very*
212+
involved in the project (core team members, for example) frequently note that
213+
they also do not have a good sense of the current project goals and priorities.
214+
So we are also not meeting the needs for team members to stay up to date with
215+
current initiatives.
216+
217+
There is clearly room to innovate on both fronts, and existing experimentation
218+
should also not be overlooked.
219+
220+
### Increase mentoring, leadership, and organizational bandwidth
221+
222+
One common challenge for us is that we seem to lack enough people to
223+
get the work done that we would like to get done. But what we're
224+
missing is not just *any* people, it's people who can help to do the
225+
"leadership" work that knits the project together.
226+
227+
This work takes many forms. Sometimes it is technical, such as writing
228+
mentoring instructions on issues, but more often it is organizational,
229+
such as running meetings, posting blog posts (see the previous point),
230+
or making plans.
231+
232+
We have made great progress over the years by intentionally focusing
233+
on the "on-ramp" to contribution, through efforts like tagging E-easy
234+
issues. We've made more limited progress on helping people "step up"
235+
towards leadership roles.
236+
237+
Part of the problem here is money. One of the biggest challenges
238+
around organizational work is that it is quite demanding in terms of
239+
time. It requires availability. It is difficult to do in your spare
240+
time. Therefore, helping to ensure that it is easier for people to get
241+
paid for their work on Rust -- and especially their **organizational**
242+
work -- is one way we might make progress here.
243+
244+
However, it's worth emphasizing that this doesn't necessarily mean
245+
people whose job description is *solely* to work on Rust. There are
246+
many companies using Rust, and many of them would like to help out,
247+
but we need to do better at harnessing and directing those efforts.
248+
As Parity put it in their #rust2020 post:
249+
250+
> “We, too, have team members who are interested in helping on
251+
> specialization or fixing the aforementioned bugs. However, it’s
252+
> often unclear whether the work is worthwhile. To a business, it is
253+
> hard to argue that one might spend a month or two working on a new
254+
> feature without any assurance that the approach taken would be
255+
> accepted.”
256+
>
257+
> -- [Benjamin Kampmann, speaking for Parity](https://www.parity.io/rust-2020/)
258+
259+
### Make design discussions more productive and less exhausting
260+
261+
> An RFC, or "request for comments" is a mechanism by which a group of
262+
> people can get feedback from a wider community on proposed
263+
> changes. The idea is that a written proposal outlines a change's
264+
> scope, implementation details, rationale and impact on the
265+
> ecosystem, then people make comments on the proposal. Usually by the
266+
> time that everybody has stopped shouting at each other, the RFC is
267+
> ready to be merged, meaning it is accepted and its vision can be
268+
> implemented. This can either be implementing a feature, or removing
269+
> unstable flags from it.
270+
>
271+
> -- [spacekookie](https://spacekookie.de/blog/rust-2020-the-rfc-process-and-distributions/)
272+
273+
The RFC process has been a crucial part of Rust's organization for a
274+
long time. The process of documenting and talking over our designs is
275+
often very helpful for improving the design and sometimes leads to
276+
dramatic changes. Many other languages have adopted RFCs and
277+
explicitly cited Rust as precedent.
278+
279+
Of course, we also have ample evidence that the RFC process as
280+
presently practiced does not work well for larger-scale or
281+
controversial designs. Last year we put a lot of energy into thinking
282+
about techniques for improving the process, and this year we need to
283+
put more of that energy into actually making those changes.
284+
285+
# Yearly calendar
286+
287+
Here is a rough calendar of major events in the planning of Rust. Note
288+
that we have attempted to move up some of the Rust 2021 planning --
289+
e.g., the survey, edition, and so forth -- so that they begin earlier
290+
in 2020, versus the timing from this year.
291+
292+
* January
293+
* Rust 2019 survey results published
294+
* Roadmap RFC opened
295+
* February
296+
* March
297+
* Publish progress report, with emphasis on linking/identifying team plans for
298+
matching up to roadmap goals
299+
* April
300+
* May
301+
* June
302+
* Publish progress report, describing what work we have done so
303+
far towards the goals of this roadmap
304+
* Identify more fine-grained deadlines for 2021 edition work. Schedule
305+
internal meetings in teams for July to verify progress.
306+
* July
307+
* August
308+
* Start organizing 2020 Rust survey
309+
* September
310+
* 2020 Rust survey goes live and runs for two weeks
311+
* Analysis of 2020 Rust survey data begins
312+
* October:
313+
* Publish survey results
314+
* All 2021 edition work must be landed
315+
* Call for Rust 2021 blog posts begins here
316+
* Begin work on retrospective
317+
* November
318+
* Publish retrospective on what has happened over 2020
319+
* December -- holiday month, things traditionally run slowly here
320+
321+
# Drawbacks
322+
[drawbacks]: #drawbacks
323+
324+
One concern that has come up this year in particular is that we frequently do
325+
not "tie" efforts actively to goals established in past roadmaps. This is one
326+
reason that this year's roadmap is specifically intended to be much more high
327+
level, with the fine grained details left up to the individual teams and the
328+
community to decide upon.
329+
330+
# Rationale and alternatives
331+
[rationale-and-alternatives]: #rationale-and-alternatives
332+
333+
The roadmap this year is different in structure than prior years. In
334+
particular, we have avoided setting precise goals, in favor of
335+
describing more general mandates and themes.
336+
337+
We chose to take this approach for a few reasons:
338+
339+
* The roadmap RFC doesn't seem like an appropriate place to make
340+
decisions on specific solutions. Those should be discussed in their
341+
own, dedicated RFCs.
342+
* We wanted to encourage teams and project members to think about how these
343+
mandates apply best to the particular questions that they are working with.
344+
345+
However, there are some clear downsides. In particular, the goals we
346+
have chosen are not the sort of goal that one can "complete". Clearly,
347+
for example, the structure of the organization will always be open to
348+
improvement, and there will always be a need to follow-through on
349+
goals.
350+
351+
Our expectation is that, over the course of the year, we will relate
352+
our concrete actions to these goals and -- in the form of a
353+
retrospective -- try to relate what progress we have made (or not
354+
made, as the case may be).
355+
356+
## Frequently asked questions
357+
358+
*This list contains questions that were raised during pre-discussion
359+
of the RFC. We expect to grow the list with more questions raised
360+
during the actual RFC discussion.*
361+
362+
### What about a Rust foundation?
363+
364+
It seems likely that we will pursue creating a Rust foundation this
365+
year, perhaps along the lines that [nikomatsakis described in a recent
366+
blog post][bpf]. We opted not to include that as a "line item" in this
367+
RFC because we were generally trying not to describe specific solutions,
368+
but more to describe the goals that we should be working towards. Any
369+
effort to create a foundation would fit well under "Improve project
370+
functioning and governance", however.
371+
372+
[bpf]: http://smallcultfollowing.com/babysteps/blog/2020/01/09/towards-a-rust-foundation/
373+
374+
### What about const generics, async I/O, cargo features, etc?
375+
376+
These are all examples of "in-progress designs and efforts" that
377+
likely make sense for us to pursue. We leave the finer-grained
378+
decision making efforts up to the teams themselves or to follow-up
379+
RFCs where appropriate.
380+
381+
# Prior art
382+
[prior-art]: #prior-art
383+
384+
Not applicable.
385+
386+
# Unresolved questions
387+
[unresolved-questions]: #unresolved-questions
388+
389+
Not applicable: this section is ordinarily used to identify things to
390+
be figured out as the work proceeds, which doesn't really apply here.
391+
392+
# Future possibilities
393+
[future-possibilities]: #future-possibilities
394+
395+
Not applicable.

0 commit comments

Comments
 (0)