Changes to Rust are made through the RFC (request for comments) process. Accepted RFCs are some of the best reference material available for understanding Rust in depth. However, it can be difficult to find the information you need. This website is an attempt to rectify that by providing an index and classification of RFCs.
The canonical record of RFCs is the RFC repo. You might also want to browse the RFC book. The source code and metadata for this website is open source and developed on GitHub.
all ()
core ()
formatting ()
governance ()
meta ()
roadmap ()
stability ()
web-presence ()
untagged ()
lang ()
alignment ()
array ()
ascription ()
asm ()
associated-types ()
async-await ()
attributes ()
borrowck ()
cast ()
cfg ()
closures ()
coercions ()
const ()
const-eval ()
const-generics ()
control-flow ()
convention ()
conversions ()
data-types ()
debugging ()
derive ()
discriminant ()
drop ()
dst ()
effects ()
enum ()
error-handling ()
exhaustiveness ()
expressions ()
ffi ()
flags ()
fmt ()
function-pointers ()
generators ()
higher-rank-polymorphism ()
impl-trait ()
impls ()
inference ()
intrinsic ()
keyword ()
lifetimes ()
linkage ()
lint ()
machine ()
macros ()
main ()
method-call ()
modules ()
non-ascii-idents ()
operator ()
optimization ()
packed ()
panic ()
parametricity ()
paths ()
patterns ()
placement-new ()
primitive ()
privacy ()
product-types ()
raw-pointers ()
references ()
reflection ()
repr ()
resolve ()
simd ()
slice ()
specialization ()
stability ()
static ()
string ()
sum-types ()
syntax ()
tail-recursion ()
target ()
target_feature ()
test ()
trait-object ()
traits ()
tuples ()
type-alias ()
typesystem ()
uninhabited ()
unions ()
unsafe ()
update-syntax ()
variance ()
versioning ()
untagged ()
libs ()
allocation ()
arithmetic ()
assertions ()
attributes ()
cell ()
cfg ()
collections ()
compare ()
convention ()
conversions ()
data-types ()
drop ()
dst ()
error-handling ()
file ()
fmt ()
futures ()
impls-libstd ()
inherent-impl ()
input-output ()
intrinsic ()
io ()
iterators ()
libc ()
machine ()
macros ()
needle ()
net ()
no_std ()
nursery ()
panic ()
pinning ()
platform ()
prelude ()
primitive ()
process ()
ranges ()
raw-pointers ()
regex ()
repr ()
simd ()
slice ()
string ()
sync ()
sync-atomics ()
target ()
target_feature ()
test ()
threads ()
time ()
traits ()
types-libstd ()
unix ()
unsafe ()
versioning ()
volatile ()
untagged ()
compiler ()
attributes ()
crate-type ()
diagnostics ()
ffi ()
flags ()
governance ()
hint ()
incremental ()
infra ()
ir ()
linkage ()
profiling ()
release ()
target ()
untagged ()
tools ()
attributes ()
build-scripts ()
cargo ()
cargo-profiles ()
cfg ()
crates-io ()
dependencies ()
diagnostics ()
formatting ()
install ()
language-server ()
linkage ()
lint ()
platform ()
registry ()
rustdoc ()
security ()
stability ()
test ()
versioning ()
workspaces ()
untagged ()
docs ()
untagged ()
unclassified ()
- 0001 Private fields
- 0002 The RFC process
- 0003 Attribute usage lint
- 0008 Remove rust-intrisic ABI
- 0016 Allow attributes on statements, blocks, and expressions
- 0019 Opt-in built-in traits (aka OIBITs, auto-traits)
- 0026 Remove priv keyword
- 0034 Check type parameter bounds are well-formed
- 0040 Libstd facade
- 0042 Add regular expressions to std
- 0048 Trait reform
- 0049 Allow attributes on match arms
- 0050 Add debug_assert macro
- 0059 Remove the ~ sigil
- 0060 Rename StrBuf to String
- 0063 Restrict mod declarations
- 0066 Improve temporary lifetimes
- 0068 Add const keyword to immutable raw pointers
- 0069 ASCII literals (byte strings)
- 0071 Allow block expressions in statics
- 0079 Struct layout is undefined by default
- 0085 Macro expansion in patterns
- 0086 Plugin registrar
- 0087 Use + instead of : for trait bounds
- 0089 Loadable lints
- 0090 Simplify lexing
- 0092 Struct literal parsing
- 0093 Remove localization from format macros
- 0100 PartialCmp trait
- 0107 Allow pattern guards with bind-by-move variables
- 0109 Remove crate id
- 0111 Split Index trait into Index and IndexMut
- 0112 Remove coercion from Box to &mut
- 0114 Closure reform
- 0115 rm-integer-fallback
- 0116 no-module-shadowing
- 0123 Rename Share to Sync
- 0130 box-not-special
- 0131 Target specifications
- 0132 ufcs
- 0135 where
- 0136 no-privates-in-public
- 0139 remove-cross-borrowing-entirely
- 0141 lifetime-elision
- 0151 capture-by-value
- 0155 anonymous-impl-only-in-same-module
- 0160 if-let
- 0164 feature-gate-slice-pats
- 0168 mod
- 0169 use-path-as-id
- 0179 and-mut-patterns
- 0184 tuple-accessors
- 0192 bounds-on-object-and-generic-types
- 0194 cfg-syntax
- 0195 associated-items
- 0198 slice-notation
- 0199 Naming conventions for ownership variants
- 0201 Error chaining
- 0202 subslice-syntax-change
- 0212 restore-int-fallback
- 0213 defaulted-type-params
- 0214 while-let
- 0216 Entry APIs
- 0218 empty-struct-with-braces
- 0221 Rename fail to panic
- 0230 Remove the runtime (green threads)
- 0231 upvar-capture-inference
- 0234 variants-namespace
- 0235 Collections reform
- 0236 Errors reform
- 0240 unsafe-api-location
- 0241 deref-conversions
- 0243 trait-based-exception-handling
- 0246 const-vs-static
- 0255 object-safety
- 0256 remove-refcounting-gc-of-t
- 0320 nonzeroing-dynamic-drop
- 0326 restrict-xXX-to-ascii
- 0339 statically-sized-literals
- 0341 remove-virtual-structs
- 0342 keywords
- 0344 conventions-galore
- 0356 No prefixes in module names (naming convention)
- 0369 num-reform
- 0378 expr-macros
- 0379 remove-reflection
- 0380 stabilize-std-fmt
- 0385 module-system-cleanup
- 0387 higher-ranked-trait-bounds
- 0390 enum-namespacing
- 0401 Coercions and casts
- 0403 cargo-build-command
- 0404 Prefer static linking for dynamic libraries (-Cprefer-dynamic)
- 0418 struct-variants
- 0430 finalizing-naming-conventions
- 0438 precedence-of-plus
- 0439 cmp-ops-reform
- 0445 extension-trait-conventions
- 0446 Unicode escape syntax
- 0447 no-unused-impl-parameters
- 0450 un-feature-gate-some-more-gates
- 0453 macro-reform
- 0458 Changes to Send trait
- 0459 disallow-shadowing
- 0461 tls-overhaul
- 0463 future-proof-literal-suffixes
- 0469 feature-gate-box-patterns
- 0474 path-reform
- 0486 std-ascii-reform
- 0490 dst-syntax
- 0494 Remove c_vec and reform c_str
- 0495 array-pattern-changes
- 0501 consistent_no_prelude_attributes
- 0503 prelude-stabilization
- 0504 Stabilize Show and String (Debug and Display)
- 0505 api-comment-conventions
- 0507 Release Channels
- 0509 collections-reform-part-2
- 0517 io-os-reform
- 0520 new-array-repeat-syntax
- 0522 self-impl
- 0526 fmt-text-writer
- 0528 string-patterns
- 0529 conversion-traits
- 0531 Define the scope of the RFC process
- 0532 self-in-use
- 0533 no-array-elem-moves
- 0534 deriving2derive
- 0544 Rename int/uint to isize/usize
- 0546 Self-not-sized-by-default
- 0550 macro-future-proofing
- 0556 raw-lifetime
- 0558 require-parentheses-for-chained-comparisons
- 0560 integer-overflow
- 0563 Replace ndebug flag with debug_assertions
- 0565 show-string-guidelines
- 0572 Feature-gate unused attributes
- 0574 drain-range
- 0580 rename-collections
- 0587 fn-return-should-be-an-associated-type
- 0592 c-str-deref
- 0593 forbid-Self-definitions
- 0599 default-object-bound
- 0601 replace-be-with-become
- 0639 discriminant-intrinsic
- 0640 Improve Debug trait (adds :#?)
- 0702 rangefull-expression
- 0735 allow-inherent-impls-anywhere
- 0736 privacy-respecting-fru
- 0738 variance
- 0769 sound-generic-drop
- 0771 std-iter-once
- 0803 Type ascription
- 0809 box-and-in-for-stdlib
- 0823 hash-simplification
- 0832 Improve vec macro
- 0839 embrace-extend-extinguish
- 0840 no-panic-in-c-string
- 0873 type-macros
- 0879 Lex binary and octal literals as decimal
- 0888 Memory fence intrinsics
- 0909 move-thread-local-to-std-thread
- 0911 const-fn
- 0921 entry_v3
- 0940 hyphens-considered-harmful
- 0953 op-assign
- 0968 closure-return-type-syntax
- 0979 align-splitn-with-other-languages
- 0980 read-exact
- 0982 dst-coercion
- 1011 process.exit
- 1014 stdout-existential-crisis
- 1023 rebalancing-coherence
- 1030 prelude-additions
- 1040 duration-reform
- 1044 io-fs-2.1
- 1047 socket-timeouts
- 1048 rename-soft-link-to-symlink
- 1054 str-words
- 1057 io-error-sync
- 1058 slice-tail-redesign
- 1066 safe-mem-forget
- 1068 Rust governance (sub-teams)
- 1096 remove-static-assert
- 1102 rename-connect-to-join
- 1105 api-evolution
- 1119 result-expect
- 1122 language-semver
- 1123 str-split-at
- 1131 likely-intrinsic
- 1135 raw-pointer-comparisons
- 1152 slice-string-symmetry
- 1156 adjust-default-object-bounds
- 1174 into-raw-fd-socket-handle-traits
- 1183 swap-out-jemalloc
- 1184 stabilize-no_std
- 1191 HIR
- 1192 inclusive-ranges
- 1193 cap-lints
- 1194 set-recovery
- 1199 simd-infrastructure
- 1200 cargo-install
- 1201 naked-fns
- 1210 impl-specialization
- 1211 MIR
- 1212 line-endings
- 1214 projections-lifetimes-and-wf
- 1216 bang-type
- 1219 use-group-as
- 1228 placement-left-arrow
- 1229 Compile time assertions
- 1236 stabilize-catch-panic
- 1238 nonparametric-dropck
- 1240 repr-packed-unsafe-ref
- 1241 no-wildcard-deps
- 1242 rust-lang-crates
- 1252 open-options
- 1257 drain-range-2
- 1260 Allow re-exporting a main function
- 1268 allow-overlapping-impls-on-marker-traits
- 1270 deprecation
- 1288 time-improvements
- 1291 promote-libc
- 1298 Incremental compilation
- 1300 Semantics of intrinsic functions
- 1307 osstring-methods
- 1317 ide
- 1327 may_dangle attribute and attributes on generic parameters
- 1328 global-panic-handler
- 1331 A canonical formal grammar
- 1358 repr(align = ) attribute
- 1359 process-ext-unix
- 1361 cfg dependencies in Cargo
- 1398 Allocator API
- 1399 #[repr(packed="n")]] attribute
- 1414 rvalue_static_promotion
- 1415 trim-std-os
- 1419 slice-copy
- 1422 pub-restricted
- 1432 replace-slice
- 1434 contains-method-for-ranges
- 1440 drop-types-in-const
- 1443 extended-compare-and-swap
- 1444 union
- 1445 restrict-constants-in-patterns
- 1461 net2-mutators
- 1467 volatile
- 1479 unix-socket
- 1492 dotdot-in-patterns
- 1498 ipv6addr-octets
- 1504 int128
- 1506 adt-kinds
- 1510 cdylib crate type
- 1513 less-unwinding
- 1521 copy-clone-semantics
- 1522 conservative-impl-trait
- 1525 cargo-workspace
- 1535 stable-overflow-checks
- 1542 try-from
- 1543 integer_atomics
- 1548 global-asm
- 1552 contains-method-for-various-collections
- 1558 closure-to-fn-coercion
- 1559 attributes-with-literals
- 1560 name-resolution
- 1561 macro-naming
- 1566 proc-macros
- 1567 long-error-codes-explanation-normalization
- 1574 more-api-documentation-conventions
- 1576 macros-literal-matcher
- 1581 fused-iterator
- 1584 macros
- 1589 Best practices for breaking bug fixes
- 1590 macro-lifetimes
- 1598 generic_associated_types
- 1607 Style RFCs
- 1618 ergonomic-format-args
- 1620 regex-1.0
- 1623 static
- 1624 loop-break-value
- 1636 All language features and std items must be documented
- 1640 duration-checked-sub
- 1643 Create the memory model strike team
- 1644 default-and-expanded-rustc-errors
- 1647 allow-self-in-where-clauses
- 1649 atomic-access
- 1651 movecell
- 1653 assert_ne
- 1660 try-borrow
- 1665 windows-subsystem
- 1679 panic-safe-slicing
- 1681 Macros 1.1
- 1682 field-init-shorthand
- 1683 Create the docs team
- 1685 deprecate-anonymous-parameters
- 1695 add-error-macro
- 1696 discriminant
- 1717 dllimport
- 1721 crt-static
- 1725 unaligned-access
- 1728 North star (roadmap cycle)
- 1733 trait-alias
- 1758 repr-transparent
- 1774 2017 roadmap
- 1789 as-cell
- 1824 crates.io: specify the default ranking
- 1826 Change doc.rust-lang.org to redirect to the latest release
- 1828 Create a 'Rust Bookshelf' of learning resources
- 1845 shared-from-slice
- 1849 non-static-type-id
- 1857 stabilize-drop-order
- 1859 try-trait
- 1860 manually-drop
- 1861 extern-types
- 1866 more-readable-assert-eq
- 1868 portability-lint
- 1869 eprintln
- 1884 unstable-sort
- 1892 uninitialized-uninhabited
- 1909 unsized-rvalues
- 1925 optional-match-vert
- 1937 ques-in-main
- 1940 must-use-functions
- 1946 Intra-rustdoc links
- 1951 expand-impl-trait
- 1961 clamp
- 1966 unsafe-pointer-reform
- 1969 cargo-prepublish
- 1974 global-allocators
- 1977 public-private-dependencies
- 1983 nursery-deprecation
- 1985 Tiers for browser support in Rust web properties
- 1990 `doc(include)` attribute (import docs from external file)
- 2000 const-generics
- 2005 match-ergonomics
- 2008 non-exhaustive
- 2011 generic-assert
- 2025 nested-method-calls
- 2027 object_safe_for_dispatch
- 2033 experimental-coroutines
- 2043 is-aligned-intrinsic
- 2044 License for RFCs
- 2045 target-feature
- 2046 label-break-value
- 2052 Editions (epochs)
- 2056 allow-trivial-where-clause-constraints
- 2057 refcell-replace
- 2070 panic-implementation
- 2071 impl-trait-existential-types
- 2071 impl-trait-type-alias
- 2086 allow-if-let-irrefutables
- 2089 implied-bounds
- 2091 inline-semantic
- 2093 infer-outlives
- 2094 nll
- 2102 unnamed-fields
- 2103 tool-attributes
- 2113 dyn-trait-syntax
- 2115 argument-lifetimes
- 2116 alloc-me-maybe
- 2124 option-filter
- 2126 path-clarity
- 2128 use-nested-groups
- 2132 copy-closures
- 2133 all-the-clones
- 2136 build-systems
- 2137 variadic
- 2141 alternative-registries
- 2145 type-privacy
- 2151 raw-identifiers
- 2166 impl-only-use
- 2169 euclidean-modulo
- 2175 if-while-or-patterns
- 2195 really-tagged-unions
- 2196 metabuild
- 2203 const-repeat-expr
- 2226 fmt-debug-hex
- 2229 capture-disjoint-fields
- 2230 bury-description
- 2235 libc-struct-traits
- 2250 finalize-impl-dyn-syntax
- 2282 profile-dependencies
- 2289 associated-type-bounds
- 2294 if-let-guard
- 2295 os-str-pattern
- 2296 option-replace
- 2298 macro-at-most-once-rep
- 2300 self-in-typedefs
- 2302 tuple-struct-self-ctor
- 2306 convert-id
- 2307 concrete-nonzero-types
- 2314 2018 roadmap
- 2316 safe-unsafe-trait-methods
- 2318 Custom test frameworks
- 2325 stable-simd
- 2333 Add a 'prior art' section to RFCs
- 2338 type-alias-enum-variants
- 2341 const-locals
- 2342 const-control-flow
- 2344 const-looping
- 2345 const-panic
- 2349 pin
- 2351 is-sorted
- 2359 subslice-pattern-syntax
- 2360 Add bench_black_box to core
- 2361 dbg-macro
- 2363 arbitrary-enum-discriminant
- 2383 lint-reasons
- 2386 used
- 2388 try-expr
- 2394 Async await
- 2396 target-feature-1.1
- 2397 #[do_not_recommend] attribute
- 2412 optimize-attr
- 2420 unreserve-proc
- 2421 unreservations-2018
- 2436 Style guide
- 2437 Rustfmt stability
- 2438 deny-integer-literal-overflow-lint
- 2451 re-rebalancing-coherence
- 2457 non-ascii-idents
- 2471 lint-test-inner-function
- 2476 Clippy 1.0
- 2480 liballoc
- 2495 Minimum supported Rust version (MSRV)
- 2497 if-let-chains
- 2500 needle
- 2504 fix-error
- 2509 concat_bytes macro
- 2514 union-initialization-and-drop
- 2515 type_alias_impl_trait
- 2521 Unify c_void type definitions
- 2523 cfg-path-version
- 2526 const-wildcard
- 2528 type-changing-struct-update-syntax
- 2532 associated-type-defaults
- 2535 or-patterns
- 2539 cfg_attr-multiple-attrs
- 2561 Add 'future possibilities' section to RFCs
- 2565 formal-function-parameter-attributes
- 2570 Linked list cursors
- 2574 SIMD in C FFI
- 2580 API for metadata parts of fat pointers
- 2582 raw-reference-mir-operator
- 2585 unsafe-block-in-unsafe-fn
- 2591 exhaustive-integer-pattern-matching
- 2592 Futures: stabilize std::task and Future
- 2603 Name mangling reform
- 2627 raw-dylib-kind
- 2645 transparent-unions
- 2657 2019 roadmap
- 2678 Cargo: named profiles
- 2689 Compiler team contributors
- 2696 Add key and value methods to DebugMap
- 2700 Associated constants on integer primitive types
- 2707 Make .. a proper pattern
- 2730 Cargo: fetch authentication tokens from an external process
- 2789 Cargo: sparse index (http fetch)
- 2795 Implicit named arguments in format_args
- 2797 Cross-FFI unwinding WG
- 2803 Target tier policy
- 2834 Cargo should report future incompatability warnings
- 2835 Safe transmute WG
- 2836 Inline assembly WG
- 2837 Demote i686-apple-darwin to tier 3
- 2841 Support exporting symbols from executables
- 2843 Rename asm macro to llvm_asm
- 2845 Supertrait item shadowing
- 2856 Project groups
- 2857 2020 roadmap
- 2867 instruction_set attribute
- 2873 Inline assembly syntax
- 2904 Major Chanage Proposal (MCP) process
- 2906 Cargo: workspace dependencies and metadata
- 2909 Destructuring in assignment
- 2912 Adopt Rust Analyzer as Rust's official LSP server
- 2920 Inline const blocks
- 2930 Add read_buf to Read (read into uninitialized memory)
- 2945 C-unwind ABI
- 2951 Modifiers for linking native libraries
- 2957 Cargo: new feature resolver
- 2959 Promote aarch64-unknown-linux-gnu to tier 1
- 2963 Rustdoc: json output
- 2965 error handling project group
- 2977 std::simd project group
- 2992 target_abi cfg
- 2996 Add Stream to std
- 3007 Align std::panic and core::panic macros
- 3013 Checking conditional compilation at compile time
- 3014 Must not suspend lint
- 3016 Undefined behaviour in const evaluation
- 3027 Restrict promotion of expressions to consts to infaliable operations
- 3028 Cargo: binary dependencies
- 3037 2021 roadmap
- 3052 Cargo: make the authors field optional
- 3058 Try trait redesign
- 3085 2021 edition
- 3086 Metavarialble expressions in macros
- 3101 Reserve all prefixes on identifiers, strings, and chars
- 3107 derive(Default) for enums
- 3114 Extend prelude for 2021 edition
- 3119 Rust crate ownership policy
- 3123 Rustdoc: scrape code examples
- 3128 IO safety
- 3137 let ... else statements
- 3143 Cargo: weak dependencies and namespaced features