@@ -65,11 +65,12 @@ the direction the language is evolving in.
65
65
* [ Active RFC List]
66
66
* [ Table of Contents]
67
67
* [ When you need to follow this process]
68
+ * [ Before creating an RFC]
68
69
* [ What the process is]
69
70
* [ The role of the shepherd]
70
71
* [ The RFC life-cycle]
71
- * [ Implementing an RFC]
72
72
* [ Reviewing RFC's]
73
+ * [ Implementing an RFC]
73
74
* [ RFC Postponement]
74
75
* [ Help this is all too informal!]
75
76
@@ -100,8 +101,38 @@ If you submit a pull request to implement a new feature without going
100
101
through the RFC process, it may be closed with a polite request to
101
102
submit an RFC first.
102
103
104
+ ## Before creating an RFC
105
+ [ Before creating an RFC ] : #before-creating-an-rfc
106
+
107
+ A hastily-proposed RFC can hurt its chances of acceptance. Low quality
108
+ proposals, proposals for previously-rejected features, or those that
109
+ don't fit into the near-term roadmap, may be quickly rejected, which
110
+ can be demotivating for the unprepared contributor. Laying some
111
+ groundwork ahead of the RFC can make the process smoother.
112
+
113
+ Although there is no single way to prepare for submitting an RFC, it
114
+ is generally a good idea to pursue feedback from other project
115
+ developers beforehand, to ascertain that the RFC may be desirable:
116
+ having a consistent impact on the project requires concerted effort
117
+ toward consensus-building.
118
+
119
+ The most common preparations for writing and submitting an RFC include
120
+ talking the idea over on #rust-internals, filing and discusssing ideas
121
+ on the [ RFC issue tracker] [ issues ] , and occasionally posting
122
+ 'pre-RFCs' on [ the developer discussion forum] [ discuss ] for early
123
+ review.
124
+
125
+ As a rule of thumb, receiving encouraging feedback from long-standing
126
+ project developers, and particularly members of the [ core team] [ core ]
127
+ is a good indication that the RFC is worth pursuing.
128
+
129
+ [ issues ] : https://github.com/rust-lang/rfcs/issues
130
+ [ discuss ] : http://discuss.rust-lang.org/
131
+ [ core ] : https://github.com/rust-lang/rust/wiki/Note-core-team
132
+
103
133
## What the process is
104
134
[ What the process is ] : #what-the-process-is
135
+
105
136
In short, to get a major feature added to Rust, one must first get the
106
137
RFC merged into the RFC repo as a markdown file. At that point the RFC
107
138
is 'active' and may be implemented with the goal of eventual inclusion
@@ -110,18 +141,34 @@ into Rust.
110
141
* Fork the RFC repo http://github.com/rust-lang/rfcs
111
142
* Copy ` 0000-template.md ` to ` text/0000-my-feature.md ` (where
112
143
'my-feature' is descriptive. don't assign an RFC number yet).
113
- * Fill in the RFC
114
- * Submit a pull request. The pull request is the time to get review of
115
- the design from the larger community.
116
- * During Rust triage, the pull request will either be closed or
117
- assigned a shepherd. The shepherd will help to move the RFC forward,
144
+ * Fill in the RFC. Put care into the details: RFCs that do not
145
+ present convincing motivation, demonstrate understanding of the
146
+ impact of the design, or are disingenuous about the drawbacks or
147
+ alternatives tend to be poorly-received.
148
+ * Submit a pull request. As a pull request the RFC will receive design
149
+ feedback from the larger community, and the author should be prepared
150
+ to revise it in response.
151
+ * During Rust triage, the pull request will either be closed (for RFCs
152
+ that clearly will not be accepted) or assigned a * shepherd* . The
153
+ shepherd is a trusted developer who is familiar with the process, who
154
+ will help to move the RFC forward, and ensure that the right people
155
+ see and review it.
118
156
* Build consensus and integrate feedback. RFCs that have broad support
119
157
are much more likely to make progress than those that don't receive
120
158
any comments. The shepherd assigned to your RFC should help you get
121
159
feedback from Rust developers as well.
122
- * Eventually, somebody on the [ core team] will either accept the RFC by
123
- merging the pull request and assigning the RFC a number, at which point
124
- the RFC is 'active', or reject it by closing the pull request.
160
+ * The shepherd may schedule meetings with the author and/or relevant
161
+ stakeholders to discuss the issues in greater detail, and in some
162
+ cases the topic may be discussed at the larger [ weekly meeting] . In
163
+ either case a summary from the meeting will be posted back to the RFC
164
+ pull request.
165
+ * Once both proponents and opponents have clarified and defended
166
+ positions and the conversation has settled, the shepherd will take it
167
+ to the [ core team] for a final decision.
168
+ * Eventually, someone from the [ core team] will either accept the RFC
169
+ by merging the pull request, assigning the RFC a number (corresponding
170
+ to the pull request number), at which point the RFC is 'active', or
171
+ reject it by closing the pull request.
125
172
126
173
## The role of the shepherd
127
174
[ The role of the shepherd ] : the-role-of-the-shepherd
@@ -139,16 +186,22 @@ point where we actually reach a decision.
139
186
## The RFC life-cycle
140
187
[ The RFC life-cycle ] : #the-rfc-life-cycle
141
188
142
- Once an RFC becomes active then authors may implement it and submit the
143
- feature as a pull request to the Rust repo. An 'active' is not a rubber
144
- stamp, and in particular still does not mean the feature will ultimately
145
- be merged; it does mean that in principle all the major stakeholders
146
- have agreed to the feature and are amenable to merging it.
189
+ Once an RFC becomes active then authors may implement it and submit
190
+ the feature as a pull request to the Rust repo. Being 'active' is not
191
+ a rubber stamp, and in particular still does not mean the feature will
192
+ ultimately be merged; it does mean that in principle all the major
193
+ stakeholders have agreed to the feature and are amenable to merging
194
+ it.
147
195
148
196
Furthermore, the fact that a given RFC has been accepted and is
149
197
'active' implies nothing about what priority is assigned to its
150
198
implementation, nor does it imply anything about whether a Rust
151
199
developer has been assigned the task of implementing the feature.
200
+ While it is not * necessary* that the author of the RFC also write the
201
+ implementation, it is by far the most effective way to see an RFC
202
+ through to completion: authors should not expect that other project
203
+ developers will take on responsibility for implementing their accepted
204
+ feature.
152
205
153
206
Modifications to active RFC's can be done in followup PR's. We strive
154
207
to write each RFC in a manner that it will reflect the final design of
@@ -163,6 +216,23 @@ considered 'complete' and is moved to the 'complete' folder; an RFC
163
216
that fails after becoming active is 'inactive' and moves to the
164
217
'inactive' folder.
165
218
219
+ ## Reviewing RFC's
220
+ [ Reviewing RFC's ] : #reviewing-rfcs
221
+
222
+ While the RFC PR is up, the shepherd may schedule meetings with the
223
+ author and/or relevant stakeholders to discuss the issues in greater
224
+ detail, and in some cases the topic may be discussed at the larger
225
+ [ weekly meeting] . In either case a summary from the meeting will be
226
+ posted back to the RFC pull request.
227
+
228
+ The core team makes final decisions about RFCs after the benefits and
229
+ drawbacks are well understood. These decisions can be made at any
230
+ time, but the core team will regularly issue decisions on at least a
231
+ weekly basis. When a decision is made, the RFC PR will either be
232
+ merged or closed, in either case with a comment describing the
233
+ rationale for the decision. The comment should largely be a summary of
234
+ discussion already on the comment thread.
235
+
166
236
## Implementing an RFC
167
237
[ Implementing an RFC ] : #implementing-an-rfc
168
238
@@ -182,33 +252,6 @@ If you are interested in working on the implementation for an 'active'
182
252
RFC, but cannot determine if someone else is already working on it,
183
253
feel free to ask (e.g. by leaving a comment on the associated issue).
184
254
185
- ## Reviewing RFC's
186
- [ Reviewing RFC's ] : #reviewing-rfcs
187
-
188
- Each week the [ core team] will attempt to review some set of open RFC
189
- pull requests. The choice of pull requests to review is largely
190
- driven by an informal estimate of whether its associated comment
191
- thread has reached a steady state (i.e. either died out, or not
192
- showing any sign of providing feedback improvements to the RFC
193
- itself). The list of RFC's up for review is posted a week ahead of
194
- time via standard notification channels (currently the 'rust-dev'
195
- mailing list as well as the http://discuss.rust-lang.org/ discourse
196
- site).
197
-
198
- We try to make sure that any RFC that we accept is accepted at the
199
- Tuesday team meeting, with a formal record of discussion regarding
200
- acceptance. We do not accept RFC’s at the Thursday triage meeting.
201
- We may reject RFC’s at either meeting; in other words, the only RFC
202
- activity on Thursdays is closing the ones that have reached a steady
203
- state and that the team agrees we will not be adopting.
204
-
205
- At both meetings, we try to only consider RFC’s for which at least a
206
- few participants have read the corresponding discussion thread and are
207
- prepared to represent the viewpoints presented there. One participant
208
- should act as a "shepherd" for the feature. The shepherd need not
209
- * personally* desire the feature; they just need to act to represent
210
- its virtues and the community’s desire for it.
211
-
212
255
## RFC Postponement
213
256
[ RFC Postponement ] : #rfc-postponement
214
257
@@ -237,3 +280,5 @@ necessary.
237
280
238
281
[ core team ] : https://github.com/mozilla/rust/wiki/Note-core-team
239
282
[ triage process ] : https://github.com/rust-lang/rust/wiki/Note-development-policy#milestone-and-priority-nomination-and-triage
283
+ [ weekly meeting ] : https://github.com/rust-lang/meeting-minutes
284
+
0 commit comments