## Summary Feature gate unused attributes for backwards compatibility. ## Motivation Interpreting the current backwards compatibility rules strictly, it's not possible to add any further language features that use new attributes. For exampl...
## Summary A [recent RFC](https://github.com/rust-lang/rfcs/pull/504) split what was previously `fmt::Show` into two traits, `fmt::Show` and `fmt::String`, with format specifiers `{:?}` and `{}` respectively. That RFC did not, however, esta...
## Summary Remove official support for the `ndebug` config variable, replace the current usage of it with a more appropriate `debug_assertions` compiler-provided config variable. ## Motivation The usage of 'ndebug' to indicate a release bui...
## Summary Remove chaining of comparison operators (e.g. `a == b == c`) from the syntax. Instead, require extra parentheses (`(a == b) == c`). ## Motivation ```rust fn f(a: bool, b: bool, c: bool) -> bool { a == b == c } ``` This code is cu...
## Summary Establish a convention throughout the core libraries for unsafe functions constructing references out of raw pointers. The goal is to improve usability while promoting awareness of possible pitfalls with inferred lifetimes. ## Mo...
## Summary Change pattern matching on an `&mut T` to `&mut <pat>`, away from its current `&<pat>` syntax. ## Motivation Pattern matching mirrors construction for almost all types, *except* `&mut`, which is constructed with `&mut <expr>` but...
## Summary 1. Remove the `Sized` default for the implicitly declared `Self` parameter on traits. 2. Make it "object unsafe" for a trait to inherit from `Sized`. ## Motivation The primary motivation is to enable a trait object `SomeTrait` to...
## Summary * Remove the `std::c_vec` module * Move `std::c_str` under a new `std::ffi` module, not exporting the `c_str` module. * Focus `CString` on *Rust-owned* bytes, providing a static assertion that a pile of bytes has no interior nuls...
## Summary Rename the `#[deriving(Foo)]` syntax extension to `#[derive(Foo)]`. ## Motivation Unlike our other verb-based attribute names, "deriving" stands alone as a present participle. By convention our attributes prefer "warn" rather tha...
## Summary Statically enforce that the `std::fmt` module can only create valid UTF-8 data by removing the arbitrary `write` method in favor of a `write_str` method. ## Motivation Today it is conventionally true that the output from macros l...
## Summary This RFC proposes that we rename the pointer-sized integer types `int/uint`, so as to avoid misconceptions and misuses. After extensive community discussions and several revisions of this RFC, the finally chosen names are `isize/...
## Summary Future-proof the allowed forms that input to an MBE can take by requiring certain delimiters following NTs in a matcher. In the future, it will be possible to lift these restrictions backwards compatibly if desired. ## Key Termin...
## Summary Stabilize the `std::prelude` module by removing some of the less commonly used functionality of it. ## Motivation The prelude of the standard library is included into all Rust programs by default, and is consequently quite an imp...
## Summary - Use inference to determine the *variance* of input type parameters. - Make it an error to have unconstrained type/lifetime parameters. - Revamp the variance markers to make them more intuitive and less numerous. In fact, there...
## Summary In order to prepare for an expected future implementation of [non-zeroing dynamic drop], remove support for: * moving individual elements into an *uninitialized* fixed-sized array, and * moving individual elements out of fixed-si...
## Summary This RFC proposes the `mod` keyword used to refer the immediate parent namespace in `use` items (`use a::b::{mod, c}`) to be changed to `self`. ## Motivation While this looks fine: ````rust use a::b::{mod, c}; pub mod a { pub mod...
## Summary Today's `Show` trait will be tasked with the purpose of providing the ability to inspect the representation of implementors of the trait. A new trait, `String`, will be introduced to the `std::fmt` module to in order to represent...
## Summary According to current documents, the RFC process is required to make "substantial" changes to the Rust distribution. It is currently lightweight, but lacks a definition for the Rust distribution. This RFC aims to amend the process...
## Summary This RFC shores up the finer details of collections reform. In particular, where the [previous RFC][part1] focused on general conventions and patterns, this RFC focuses on specific APIs. It also patches up any errors that were fo...
## Summary Allow `Self` type to be used in impls. ## Motivation Allows macros which operate on methods to do more, more easily without having to rebuild the concrete self type. Macros could use the literal self type like programmers do, but...