Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

updated the RFC #1

Closed
wants to merge 1,495 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1495 commits
Select commit Hold shift + click to select a range
f8e50c5
Caption example usage in summary
ranweiler Jul 19, 2016
bd201d6
Remove non-technical use of the word "type"
ranweiler Jul 19, 2016
96bcd13
Tweak adjective
ranweiler Jul 19, 2016
379e50a
Emphasize precedent and symmetry when assessing macros
ranweiler Jul 19, 2016
f9827d1
Fix field names in example
ranweiler Jul 19, 2016
5b441ff
Remove mentions of old attributes
alexcrichton Jul 19, 2016
8c307c1
Use "similar" to avoid conflation with senses of "shared"
ranweiler Jul 19, 2016
293adaf
Expand a bit and add index methods to trait
sfackler Jul 19, 2016
66b2a82
Add subsections to "Alternatives" section
ranweiler Jul 20, 2016
7cfd7e9
Add subsection for sigil alternative
ranweiler Jul 20, 2016
42f4035
Explicit type punning alternative.
Havvy Jul 20, 2016
673da42
Merge pull request #1 from Havvy/patch-1
ranweiler Jul 20, 2016
2fa187d
Add a note about what "no hygiene" means
alexcrichton Jul 20, 2016
7d89142
Update the RFC with discussion from the comment thread
nrc Jul 21, 2016
f671c20
propose the docs team
steveklabnik Jul 21, 2016
15e41ad
some feedback from other team members
steveklabnik Jul 21, 2016
57b6ffc
Merge remote-tracking branch 'SergioBenitez/master'
nikomatsakis Jul 22, 2016
6a46363
RFC #1559 is "Allow all literals in attributes"
nikomatsakis Jul 22, 2016
ec7f3b1
Add subsections to "Detailed design" section
ranweiler Jul 23, 2016
23b9194
Fix EOF newline
ranweiler Jul 23, 2016
7016ba9
Add description of formal grammar change
ranweiler Jul 23, 2016
6098278
More changes
nrc Jul 26, 2016
d795e41
remove empty bullet
nikomatsakis Jul 26, 2016
b8ae71c
add a note about how the team is intended as a temporary
nikomatsakis Jul 26, 2016
af2a82c
Merge pull request #1599 from sgrif/patch-1
aturon Jul 26, 2016
055c500
Fix type names in motivation/microbenchmark.
Stebalien Jul 27, 2016
c697b6a
Add unresolved question about removal of the Fuse::done unnecessary f…
Stebalien Jul 27, 2016
4809190
Introduce non-panicking borrow methods on `RefCell<T>`
nox Jun 27, 2016
8967540
Merge branch 'try-borrow' of https://github.com/nox/rust-rfcs
alexcrichton Jul 27, 2016
8f3ef24
RFC 1660 is RefCell::{try_borrow, try_borrow_mut}
alexcrichton Jul 27, 2016
680ee79
add debug_assert_ne to proposal
ashleygwilliams Jul 27, 2016
726547c
Merge branch 'assert_ne' of https://github.com/ashleygwilliams/rfcs
alexcrichton Jul 27, 2016
9d39535
RFC 1653 is an `assert_ne` macro
alexcrichton Jul 27, 2016
8c54f19
Merge remote-tracking branch 'Amanieu/int128'
nikomatsakis Jul 29, 2016
d218355
RFC 1504 is 128-bit integer support
nikomatsakis Jul 29, 2016
448b578
Merge branch 'master' of github.com:rust-lang/rfcs
nikomatsakis Jul 29, 2016
e33b529
Merge remote-tracking branch 'Amanieu/global_asm'
nikomatsakis Jul 29, 2016
83116f4
RFC 1548 is global-asm
nikomatsakis Jul 29, 2016
fb3e610
Merge remote-tracking branch 'nrc/name-resolution'
nikomatsakis Jul 29, 2016
6e83182
RFC 1560 is name resolution
nikomatsakis Jul 29, 2016
f359dd8
Merge pull request #1663 from joshtriplett/union-drop
nikomatsakis Jul 29, 2016
7dd371b
amendment
nikomatsakis Jul 29, 2016
851614d
Merge remote-tracking branch 'canndrew/bang_type'
nikomatsakis Jul 29, 2016
773cbfb
RFC 1216 is promote ! to a type
nikomatsakis Jul 29, 2016
b332a92
RFC for mem::discriminant()
durka Aug 1, 2016
597d1e5
write RFC
durka Aug 1, 2016
e5c9852
remove Reflect bound
durka Aug 1, 2016
960657a
fix minor typo: s/NonZero/Zeroable
liigo Aug 2, 2016
43a578d
Merge pull request #1698 from liigo/patch-2
alexcrichton Aug 2, 2016
95579ff
updates from discussion
steveklabnik Aug 3, 2016
d9626d9
Remove RFCs whose tracking issues are closed
pthariensflame Aug 4, 2016
20ffd8c
Add Match type and drop some iterators.
BurntSushi Aug 5, 2016
7e365b4
Merge pull request #1704 from pthariensflame/trim-rfc-list
alexcrichton Aug 5, 2016
cf5513e
Add outline, clarify document structure.
chriskrycho Aug 9, 2016
86ac17c
RFC 1683 is "Propose the docs team"
steveklabnik Aug 10, 2016
4139535
Merge pull request #1683 from steveklabnik/docs-team
steveklabnik Aug 10, 2016
805c453
Add current RFCs to README list
pthariensflame Aug 8, 2016
e4e44ed
Merge pull request #1706 from pthariensflame/update-rfcs-list
aturon Aug 11, 2016
5d457b0
Merge branch 'fused' of https://github.com/Stebalien/rfcs
alexcrichton Aug 11, 2016
30b58ee
RFC 1581 is the FusedIterator marker trait
alexcrichton Aug 11, 2016
ab6c7fb
Merge branch 'atomic_access' of https://github.com/Amanieu/rfcs
alexcrichton Aug 11, 2016
f088b53
RFC 1649 is get_mut/into_inner for atomics
alexcrichton Aug 11, 2016
39aff7c
add: list of methods to be implemented as of current state of discussion
benaryorg Aug 11, 2016
b708931
Merge remote-tracking branch 'LeoTestard/master'
nikomatsakis Aug 12, 2016
467ae3c
RFC 1576 is the "literal" matcher for macros
nikomatsakis Aug 12, 2016
9a23ee2
Merge remote-tracking branch 'petrochenkov/adtkinds'
nikomatsakis Aug 12, 2016
017d661
RFC 1506 is "clarified ADT kinds"
nikomatsakis Aug 12, 2016
8a970a3
Rewrite RFC in favour of `mainCRTStartup` alternative
Diggsey Aug 13, 2016
7de8ab7
Keep the bunnies happy
Diggsey Aug 13, 2016
d08e636
draft 1
vadimcn Aug 14, 2016
967a8e9
Rename 1510-rdylib.md to 1510-cdylib.md
liigo Aug 15, 2016
41852d9
Some final clarifying points
nrc Aug 15, 2016
4e1f2c3
Merge pull request #1715 from liigo/patch-3
alexcrichton Aug 15, 2016
24229cb
Merge remote-tracking branch 'nrc/style'
nikomatsakis Aug 15, 2016
a2a6710
RFC 1607 is "Strike team for rustfmt"
nikomatsakis Aug 15, 2016
2369145
Merge remote-tracking branch 'nikomatsakis/memory-model-strike-team'
nikomatsakis Aug 15, 2016
8f5c1cd
merge RFC 1643, unsafe code guidelines
nikomatsakis Aug 15, 2016
acc572e
Fix typo in fn variance
aidanhs Aug 15, 2016
ef94b29
Merge branch 'string-get-slice' of https://github.com/sfackler/rfcs
alexcrichton Aug 16, 2016
30221dc
RFC 1679 is panic-safe slicing methods
alexcrichton Aug 16, 2016
bde7d91
fix code for method
benaryorg Aug 16, 2016
3a9cbee
Merge branch 'checked_sub' of https://github.com/benaryorg/rfcs
alexcrichton Aug 18, 2016
27fcfc0
RFC 1640 is checked methods on Duration
alexcrichton Aug 18, 2016
97d2c11
Merge remote-tracking branch 'nikomatsakis/breaking-change-policy'
nikomatsakis Aug 18, 2016
19da8c4
merge RFC 1589: rustc bug fix procedure
nikomatsakis Aug 18, 2016
2c8c3ad
Merge branch 'master' of github.com:rust-lang/rfcs
nikomatsakis Aug 18, 2016
efb139d
Merge pull request #1716 from aidanhs/aphs-fn-variance
nikomatsakis Aug 18, 2016
fa8d2f6
RFC: Enable selecting how the C runtime is linked
alexcrichton Aug 18, 2016
e9285f9
Revising crt-link
brson Aug 19, 2016
5864dd3
Merge pull request #5 from brson/crt-link
alexcrichton Aug 19, 2016
efd28c6
Resolve some TODO
alexcrichton Aug 19, 2016
104b166
More crt-link edits
brson Aug 19, 2016
46fc716
Merge pull request #6 from brson/crt-link
alexcrichton Aug 19, 2016
30f9891
Rename RFC file
alexcrichton Aug 19, 2016
5ecde0c
Update builder and iterator types.
BurntSushi Aug 21, 2016
4d676e9
mention Unicode upgrades
BurntSushi Aug 21, 2016
8434b82
fix builder definition. derp.
BurntSushi Aug 21, 2016
785a5ca
Merge remote-tracking branch 'nrc/macro-naming'
nikomatsakis Aug 22, 2016
44c24bd
Merge RFC 1561: macro naming and modularisation
nikomatsakis Aug 22, 2016
34c70d9
Merge remote-tracking branch 'llogiq/static_statics'
nikomatsakis Aug 22, 2016
ac22573
Add a number of unresolved questions
alexcrichton Aug 22, 2016
67a14dc
Update unresolved questions and drawbacks for the FusedIterator RFC
Stebalien Aug 22, 2016
a80f9be
Merge RFC 1623: static lifetime in statics
nikomatsakis Aug 22, 2016
34c174e
Merge remote-tracking branch 'alexcrichton/macros-1.1'
nikomatsakis Aug 22, 2016
35ad6c5
Add ptr::{read,write}_unaligned
Amanieu Aug 22, 2016
8207010
Merge RFC #1681: Macros 1.1
nikomatsakis Aug 22, 2016
8428b05
Merge pull request #1724 from Stebalien/fix-fused
alexcrichton Aug 22, 2016
12cba3a
add some notes about spans
nikomatsakis Aug 22, 2016
7bb153c
Merge branch 'master' of github.com:rust-lang/rfcs
nikomatsakis Aug 22, 2016
0670624
Roadmap RFC
brson Aug 8, 2016
8b98bfd
Aturon's first edit round
aturon Aug 22, 2016
a0701a2
More edits to north star RFC
brson Aug 23, 2016
c3d4f6d
Aturon's edits
aturon Aug 23, 2016
96a089a
Fix typos
brson Aug 23, 2016
0a31e73
Add another unresolved question
brson Aug 23, 2016
2832657
'why' -> 'how'
brson Aug 23, 2016
1d01c98
Remove list of active RFCs from README
alexcrichton Aug 26, 2016
7355498
Update north star RFC
brson Sep 1, 2016
bd05843
Delete stray quote char.
solson Sep 6, 2016
902e54c
Merge pull request #1741 from solson/patch-1
eddyb Sep 6, 2016
5962091
Block quote the entire style guideline example.
solson Sep 6, 2016
9216e4f
Merge pull request #1742 from solson/patch-3
eddyb Sep 6, 2016
b7ad6f1
Lifetimes in arguments may be made longer
aidanhs Aug 19, 2016
7bfa935
Fix a typo in RFC #1681
untitaker Sep 11, 2016
058d721
Fix a duplicated word
untitaker Sep 11, 2016
24c8a90
Merge pull request #1747 from untitaker/patch-1
nrc Sep 11, 2016
8f4a7d9
Merge branch 'regex-1.0' of https://github.com/BurntSushi/rfcs
alexcrichton Sep 12, 2016
3654298
RFC 1620 is Regex 1.0
alexcrichton Sep 12, 2016
2195831
Merge branch 'patch-6' of https://github.com/durka/rfcs into durka-pa…
aturon Sep 15, 2016
c7edf9b
RFC 1696 is `mem::discriminant`
aturon Sep 15, 2016
5b785bc
fix typo in RFC 1696
durka Sep 16, 2016
1f5d3a9
Merge pull request #1750 from durka/patch-8
alexcrichton Sep 16, 2016
d04dfa6
Address concerns about documentation infrastructure.
chriskrycho Sep 21, 2016
297e5b1
Address concern about “edit link".
chriskrycho Sep 21, 2016
2bfd6fd
Add note on book rewrite status.
chriskrycho Sep 21, 2016
19cf3a3
Address concern: unclear language about change reviews.
chriskrycho Sep 21, 2016
8e145ae
Address concern: remove blog post requirement.
chriskrycho Sep 21, 2016
d04b8c3
Address concern: needless inline strikeouts.
chriskrycho Sep 21, 2016
3f8ed20
Address concern: unnecessary references to “core team”.
chriskrycho Sep 21, 2016
b425e05
Rename feature to "field-init-shorthand"
ranweiler Oct 4, 2016
e9495fb
Refine rough edges wrt coercion
nagisa Oct 5, 2016
b746484
Merge pull request #2 from nagisa/loop-break-pr
dhardy Oct 5, 2016
1c2a50d
Updated based on feedback
nrc Oct 7, 2016
2ebe33c
Drop kind="abstract".
vadimcn Oct 18, 2016
d4a0fba
Clarify must/should/may around the books. Require release notes.
chriskrycho Oct 19, 2016
7dd3f11
Drop unresolved question about docs subteam: we have one!
chriskrycho Oct 19, 2016
88a745b
Improve wording and rationale. Add some placeholders.
chriskrycho Oct 19, 2016
2738cb7
Fix a couple link refs.
chriskrycho Oct 19, 2016
7ae5c6b
Address a number of concerns.
chriskrycho Oct 19, 2016
2d33ba1
Drop internal links. (They're finicky, alas.)
chriskrycho Oct 19, 2016
3ad263e
Drop extraneous link item.
chriskrycho Oct 19, 2016
3d882f9
Fix a typo; clarify some language.
chriskrycho Oct 21, 2016
05cda5e
Merge branch 'master' of https://github.com/dhardy/rfcs into dhardy-m…
aturon Oct 22, 2016
e79b229
RFC 1624 is break with values for loop
aturon Oct 22, 2016
1c784f6
Merge branch 'named-field-puns' of https://github.com/ranweiler/rfcs …
aturon Oct 22, 2016
1811b12
RFC 1682 is field init shorthand
aturon Oct 22, 2016
f5b73f0
Merge branch 'dllimport' of https://github.com/vadimcn/rfcs
alexcrichton Oct 25, 2016
060ea31
RFC 1717 is dllimport connected to #[link(kind)]
alexcrichton Oct 25, 2016
3ffd68a
Merge branch 'crt-link' of https://github.com/alexcrichton/rfcs
alexcrichton Oct 25, 2016
49f1fea
RFC 1721 is customization of CRT linkage
alexcrichton Oct 25, 2016
25e5c3b
Merge branch 'windows-subsystem' of https://github.com/Diggsey/rfcs
alexcrichton Oct 31, 2016
dd3ba8e
RFC 1665 is windows subsystem support
alexcrichton Oct 31, 2016
0253019
Differentiate between the different uses of "windows"
shepmaster Nov 3, 2016
e6ed336
Merge pull request #1784 from shepmaster/windows-proper-nouns
alexcrichton Nov 3, 2016
1a22f60
Clarify re-coercion, pidgeonhole drawback; fix typos
archshift Nov 7, 2016
756dc01
Fix a typo in RFC1201 example code
mbrubeck Nov 10, 2016
a30fc8b
Merge pull request #1788 from rust-lang/mbrubeck-patch-1
eddyb Nov 10, 2016
d8b2a73
Merge pull request #1720 from aidanhs/aphs-fn-variance-2
nikomatsakis Nov 11, 2016
7403c08
RFC #1728 is "A process for establishing the Rust roadmap"
nikomatsakis Nov 12, 2016
fdbcc5c
Merge branch 'master' of github.com:rust-lang/rfcs
nikomatsakis Nov 12, 2016
84e33e1
Add Rvalue-static-promotion RFC
Kimundi Dec 18, 2015
c2ebeaf
Add generic<T> example
Kimundi Dec 18, 2015
1d9f541
Add Drawback elobaration to the generic case
Kimundi Dec 18, 2015
db24440
Move mutable rvalue promotion to alternative section
Kimundi Nov 12, 2016
aad08e0
Merge branch 'unaligned' of https://github.com/Amanieu/rfcs
alexcrichton Nov 23, 2016
438a3ea
RFC 1725 is unaligned access via `std::ptr`
alexcrichton Nov 23, 2016
82ca93a
Merge branch 'document_all_features' of https://github.com/chriskrych…
aturon Dec 2, 2016
97944a6
RFC 1636 is Require documentation for all new features
aturon Dec 2, 2016
3813ce9
Trivial - Fix Typo in Specialization RFC
JinShil Dec 6, 2016
0af2f7a
Merge pull request #1809 from JinShil/patch-1
steveklabnik Dec 7, 2016
59e3588
Add 'How We Teach This' to template, per RFC 1636.
chriskrycho Dec 7, 2016
75bbe75
Wrap sentences to newlines in "How We Teach This"
chriskrycho Dec 7, 2016
79a8539
Roadmap for 2017
aturon Oct 21, 2016
e59d253
Clarify Additional Goals section
aturon Oct 21, 2016
31c4f92
Missing period
aturon Oct 21, 2016
097fccd
JavaScript
aturon Oct 22, 2016
a2cb436
clarity supporting areas
aturon Oct 22, 2016
c403028
Clarify production framing
aturon Oct 22, 2016
b7ac67c
Fix awkward phrasing
aturon Oct 22, 2016
1d10205
Clarify extra goals from internals
aturon Oct 22, 2016
8e737ce
Add suggestions from withoutboats
sgrif Dec 10, 2016
cac791d
Merge pull request #1810 from chriskrycho/implement-rfc-1636
aturon Dec 13, 2016
ecefe52
Merge branch 'proc-macros' of https://github.com/nrc/rfcs into nrc-pr…
aturon Dec 13, 2016
7a446f8
RFC 1566 is Procedural macros
aturon Dec 13, 2016
4f40ba0
Remove C++ goal, and refactor to 'areas of exploration'
aturon Dec 14, 2016
8b9e3ad
Fix typo
F001 Dec 16, 2016
16318db
Merge pull request #1820 from F001/patch-1
eddyb Dec 16, 2016
3e925a5
Update motivation
Amanieu Dec 22, 2016
b616749
The Rust Bookshelf
steveklabnik Dec 24, 2016
6afaf52
Trivial - RFC 0195 Associated Items - remove text copied from RFC tem…
JinShil Dec 27, 2016
90240c5
Merge pull request #1829 from JinShil/patch-1
eddyb Dec 27, 2016
cb422d7
Update 1728 text with PR # and Issue description
chriskrycho Dec 30, 2016
79c61cd
Merge pull request #1836 from chriskrycho/patch-1
alexcrichton Dec 30, 2016
d897ccb
Remove last core-team reference from 1636
chriskrycho Dec 30, 2016
600d354
Merge pull request #1838 from chriskrycho/patch-2
aturon Jan 3, 2017
c59aa27
Add cookbooks, examples and patterns
aturon Jan 5, 2017
4282843
Merge branch 'roadmap-2017' of https://github.com/aturon/rfcs into at…
aturon Jan 5, 2017
9963385
RFC 1774 is Roadmap for 2017
aturon Jan 5, 2017
8873a1a
Fix links & reveal hidden information
dwijnand Jan 6, 2017
479e1ae
Merge pull request #1846 from dwijnand/patch-1
steveklabnik Jan 6, 2017
9ccd885
Allow `Self` to appear in the where clause of trait impls (#1647)
nrc Jan 6, 2017
50d603d
RFC 1414 rvalue static promotion
nrc Jan 6, 2017
91bd051
update with details
steveklabnik Jan 7, 2017
d51becd
Include more "fn literal" alternative details, clear up language
archshift Jan 8, 2017
a0e4255
Fix typos.
DerSaidin Jan 13, 2017
a6db7a2
Merge pull request #1852 from DerSaidin/patch-1
nikomatsakis Jan 13, 2017
5c5988a
Merge branch 'movecell' of https://github.com/Amanieu/rfcs into Amani…
aturon Jan 23, 2017
849ca2f
RFC 1651 is Extend Cell to non-Copy types
aturon Jan 23, 2017
68854f4
Macros by example 2.0 (macro!)
nrc Apr 19, 2016
f6f5c41
Update the RFC
nrc Nov 11, 2016
7dcb737
Use 'declarative macro' and add note on nomenclature
nrc Jan 30, 2017
4434bb0
Merge declarative macros 2.0
nrc Jan 30, 2017
6f43d81
Fix typo (Decalrative -> Declarative)
jonas-schievink Jan 30, 2017
2a5554b
Merge pull request #1877 from jonas-schievink/patch-1
nrc Jan 30, 2017
9a72f3d
Corrected some spelling errors.
Henning-K Jan 31, 2017
8e97f9d
Merge pull request #1878 from Henning-K/patch-1
aturon Jan 31, 2017
569abdf
Update coercion definition in summary
archshift Feb 1, 2017
ecde759
Merge branch 'rust-bookshelf'
steveklabnik Feb 6, 2017
d43f4ca
RFC 1828 is "Rust Bookshelf"
steveklabnik Feb 6, 2017
ee6347e
Remove file accidentally included in text/
steveklabnik Feb 8, 2017
18a38a6
Merge branch 'closure-to-fn-coercion' of https://github.com/archshift…
aturon Feb 14, 2017
3f235e1
RFC 1558 is Allow coercing non-capturing closures to function pointers
aturon Feb 14, 2017
deaa49d
Remove duplicate word from documentation
kalisjoshua Feb 15, 2017
73a65af
Merge pull request #1900 from kalisjoshua/consistent-wording
alexcrichton Feb 15, 2017
0ba091c
Change PR to pull request
kalisjoshua Feb 16, 2017
b23226f
Merge pull request #1902 from kalisjoshua/pr-to-pull-request
alexcrichton Feb 16, 2017
4cd75a6
fix member path
king6cong Feb 21, 2017
d8d2de4
Merge pull request #1914 from king6cong/master
alexcrichton Feb 21, 2017
7c02100
Merge pull request #1 from rust-lang/master
iopq Mar 2, 2017
f31e5e5
Merge pull request #2 from huonw/must-use
iopq Mar 2, 2017
fd0e5b6
Updated the RFC to include lessons learned from #1812
iopq Mar 2, 2017
f0a894f
Update 0000-must-use-functions.md
iopq Jun 18, 2017
5b332c2
Update 0000-must-use-functions.md
iopq Jun 18, 2017
a2c640b
Update 0000-must-use-functions.md
iopq Jun 18, 2017
ab71195
Update 0000-must-use-functions.md
iopq Jun 18, 2017
8fb6b5d
Update 0000-must-use-functions.md
iopq Jun 19, 2017
2711ff8
Update 0000-must-use-functions.md
iopq Jun 19, 2017
30f8ab0
Update 0000-must-use-functions.md
iopq Jun 19, 2017
6f7aa42
updated summary
iopq Jul 11, 2017
f4b6853
RFC 1940 is Allow `#[must_use]` on functions
aturon Jul 17, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions 0000-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,44 @@
- Rust Issue: (leave this empty)

# Summary
[summary]: #summary

One para explanation of the feature.

# Motivation
[motivation]: #motivation

Why are we doing this? What use cases does it support? What is the expected outcome?

# Detailed design
[design]: #detailed-design

This is the bulk of the RFC. Explain the design in enough detail for somebody familiar
with the language to understand, and for somebody familiar with the compiler to implement.
This should get into specifics and corner-cases, and include examples of how the feature is used.

# How We Teach This
[how-we-teach-this]: #how-we-teach-this

What names and terminology work best for these concepts and why?
How is this idea best presented—as a continuation of existing Rust patterns, or as a wholly new one?

Would the acceptance of this proposal change how Rust is taught to new users at any level?
How should this feature be introduced and taught to existing Rust users?

What additions or changes to the Rust Reference, _The Rust Programming Language_, and/or _Rust by Example_ does it entail?

# Drawbacks
[drawbacks]: #drawbacks

Why should we *not* do this?

# Alternatives
[alternatives]: #alternatives

What other designs have been considered? What is the impact of not doing this?

# Unresolved questions
[unresolved]: #unresolved-questions

What parts of the design are still TBD?
220 changes: 106 additions & 114 deletions README.md

Large diffs are not rendered by default.

53 changes: 53 additions & 0 deletions compiler_changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# RFC policy - the compiler

We have not previously had an RFC system for compiler changes, so policy here is
likely to change as we get the hang of things. We don't want to slow down most
compiler development, but on the other hand we do want to do more design work
ahead of time on large additions and refactorings.

Compiler RFCs will be managed by the compiler sub-team, and tagged `T-compiler`.
The compiler sub-team will do an initial triage of new PRs within a week of
submission. The result of triage will either be that the PR is assigned to a
member of the sub-team for shepherding, the PR is closed because the sub-team
believe it should be done without an RFC, or closed because the sub-team feel it
should clearly not be done and further discussion is not necessary. We'll follow
the standard procedure for shepherding, final comment period, etc.

Where there is significant design work for the implementation of a language
feature, the preferred workflow is to submit two RFCs - one for the language
design and one for the implementation design. The implementation RFC may be
submitted later if there is scope for large changes to the language RFC.


## Changes which need an RFC

* New lints (these fall under the lang team)
* Large refactorings or redesigns of the compiler
* Changing the API presented to syntax extensions or other compiler plugins in
non-trivial ways
* Adding, removing, or changing a stable compiler flag
* The implementation of new language features where there is significant change
or addition to the compiler. There is obviously some room for interpretation
about what consitutes a "significant" change and how much detail the
implementation RFC needs. For guidance, [associated items](text/0195-associated-items.md)
and [UFCS](text/0132-ufcs.md) would clearly need an implementation RFC,
[type ascription](text/0803-type-ascription.md) and
[lifetime elision](text/0141-lifetime-elision.md) would not.
* Any other change which causes backwards incompatible changes to stable
behaviour of the compiler, language, or libraries


## Changes which don't need an RFC

* Bug fixes, improved error messages, etc.
* Minor refactoring/tidying up
* Implmenting language features which have an accepted RFC, where the
implementation does not significantly change the compiler or require
significant new design work
* Adding unstable API for tools (note that all compiler API is currently unstable)
* Adding, removing, or changing an unstable compiler flag (if the compiler flag
is widely used there should be at least some discussion on discuss, or an RFC
in some cases)

If in doubt it is probably best to just announce the change you want to make to
the compiler subteam on discuss or IRC, and see if anyone feels it needs an RFC.
38 changes: 38 additions & 0 deletions lang_changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# RFC policy - language design

Pretty much every change to the language needs an RFC. Note that new
lints (or major changes to an existing lint) are considered changes to
the language.

Language RFCs are managed by the language sub-team, and tagged `T-lang`. The
language sub-team will do an initial triage of new PRs within a week of
submission. The result of triage will either be that the PR is assigned to a
member of the sub-team for shepherding, the PR is closed as postponed because
the subteam believe it might be a good idea, but is not currently aligned with
Rust's priorities, or the PR is closed because the sub-team feel it should
clearly not be done and further discussion is not necessary. In the latter two
cases, the sub-team will give a detailed explanation. We'll follow the standard
procedure for shepherding, final comment period, etc.


## Amendments

Sometimes in the implementation of an RFC, changes are required. In general
these don't require an RFC as long as they are very minor and in the spirit of
the accepted RFC (essentially bug fixes). In this case implementers should
submit an RFC PR which amends the accepted RFC with the new details. Although
the RFC repository is not intended as a reference manual, it is preferred that
RFCs do reflect what was actually implemented. Amendment RFCs will go through
the same process as regular RFCs, but should be less controversial and thus
should move more quickly.

When a change is more dramatic, it is better to create a new RFC. The RFC should
be standalone and reference the original, rather than modifying the existing
RFC. You should add a comment to the original RFC with referencing the new RFC
as part of the PR.

Obviously there is some scope for judgment here. As a guideline, if a change
affects more than one part of the RFC (i.e., is a non-local change), affects the
applicability of the RFC to its motivating use cases, or there are multiple
possible new solutions, then the feature is probably not 'minor' and should get
a new RFC.
114 changes: 114 additions & 0 deletions libs_changes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# RFC guidelines - libraries sub-team

# Motivation

* RFCs are heavyweight:
* RFCs generally take at minimum 2 weeks from posting to land. In
practice it can be more on the order of months for particularly
controversial changes.
* RFCs are a lot of effort to write; especially for non-native speakers or
for members of the community whose strengths are more technical than literary.
* RFCs may involve pre-RFCs and several rewrites to accommodate feedback.
* RFCs require a dedicated shepherd to herd the community and author towards
consensus.
* RFCs require review from a majority of the subteam, as well as an official
vote.
* RFCs can't be downgraded based on their complexity. Full process always applies.
Easy RFCs may certainly land faster, though.
* RFCs can be very abstract and hard to grok the consequences of (no implementation).

* PRs are low *overhead* but potentially expensive nonetheless:
* Easy PRs can get insta-merged by any rust-lang contributor.
* Harder PRs can be easily escalated. You can ping subject-matter experts for second
opinions. Ping the whole team!
* Easier to grok the full consequences. Lots of tests and Crater to save the day.
* PRs can be accepted optimistically with bors, buildbot, and the trains to guard
us from major mistakes making it into stable. The size of the nightly community
at this point in time can still mean major community breakage regardless of trains,
however.
* HOWEVER: Big PRs can be a lot of work to make only to have that work rejected for
details that could have been hashed out first.

* RFCs are *only* meaningful if a significant and diverse portion of the
community actively participates in them. The official teams are not
sufficiently diverse to establish meaningful community consensus by agreeing
amongst themselves.

* If there are *tons* of RFCs -- especially trivial ones -- people are less
likely to engage with them. Official team members are super busy. Domain experts
and industry professionals are super busy *and* have no responsibility to engage
in RFCs. Since these are *exactly* the most important people to get involved in
the RFC process, it is important that we be maximally friendly towards their
needs.


# Is an RFC required?

The overarching philosophy is: *do whatever is easiest*. If an RFC
would be less work than an implementation, that's a good sign that an RFC is
necessary. That said, if you anticipate controversy, you might want to short-circuit
straight to an RFC. For instance new APIs almost certainly merit an RFC. Especially
as `std` has become more conservative in favour of the much more agile cargoverse.

* **Submit a PR** if the change is a:
* Bugfix
* Docfix
* Obvious API hole patch, such as adding an API from one type to a symmetric type.
e.g. `Vec<T> -> Box<[T]>` clearly motivates adding `String -> Box<str>`
* Minor tweak to an unstable API (renaming, generalizing)
* Implementing an "obvious" trait like Clone/Debug/etc
* **Submit an RFC** if the change is a:
* New API
* Semantic Change to a stable API
* Generalization of a stable API (e.g. how we added Pattern or Borrow)
* Deprecation of a stable API
* Nontrivial trait impl (because all trait impls are insta-stable)
* **Do the easier thing** if uncertain. (choosing a path is not final)


# Non-RFC process

* A (non-RFC) PR is likely to be **closed** if clearly not acceptable:
* Disproportionate breaking change (small inference breakage may be acceptable)
* Unsound
* Doesn't fit our general design philosophy around the problem
* Better as a crate
* Too marginal for std
* Significant implementation problems

* A PR may also be closed because an RFC is approriate.

* A (non-RFC) PR may be **merged as unstable**. In this case, the feature
should have a fresh feature gate and an associated tracking issue for
stabilisation. Note that trait impls and docs are insta-stable and thus have no
tracking issue. This may imply requiring a higher level of scrutiny for such
changes.

However, an accepted RFC is not a rubber-stamp for merging an implementation PR.
Nor must an implementation PR perfectly match the RFC text. Implementation details
may merit deviations, though obviously they should be justified. The RFC may be
amended if deviations are substantial, but are not generally necessary. RFCs should
favour immutability. The RFC + Issue + PR should form a total explanation of the
current implementation.

* Once something has been merged as unstable, a shepherd should be assigned
to promote and obtain feedback on the design.

* Every time a release cycle ends, the libs teams assesses the current unstable
APIs and selects some number of them for potential stabilization during the
next cycle. These are announced for FCP at the beginning of the cycle, and
(possibly) stabilized just before the beta is cut.

* After the final comment period, an API should ideally take one of two paths:
* **Stabilize** if the change is desired, and consensus is reached
* **Deprecate** is the change is undesired, and consensus is reached
* **Extend the FCP** is the change cannot meet consensus
* If consensus *still* can't be reached, consider requiring a new RFC or
just deprecating as "too controversial for std".

* If any problems are found with a newly stabilized API during its beta period,
*strongly* favour reverting stability in order to prevent stabilizing a bad
API. Due to the speed of the trains, this is not a serious delay (~2-3 months
if it's not a major problem).


Loading