## Summary [summary]: #summary This RFC proposes the *2017 Rust Roadmap*, in accordance with [RFC 1728](https://github.com/rust-lang/rfcs/pull/1728). The goal of the roadmap is to lay out a vision for where the Rust project should be in a y...
## Summary [summary]: #summary Extend the existing `#[repr]` attribute on newtypes with a `transparent` option specifying that the type representation is the representation of its only field. This matters in FFI context where `struct Foo(T)...
## Summary [summary]: #summary This RFC proposes a temporary solution to the problem of letting tools use attributes. We outline a (partial) long-term solution and propose a step towards that solution for tools which are part of the Rust di...
## Summary [summary]: #summary Traits can be aliased with the `trait TraitAlias = …;` construct. Currently, the right hand side is a bound – a single trait, a combination with `+` traits and lifetimes. Type parameters and lifetimes can be a...
## Summary [summary]: #summary Add two functions, `ptr::read_unaligned` and `ptr::write_unaligned`, which allows reading/writing to an unaligned pointer. All other functions that access memory (`ptr::{read,write}`, `ptr::copy{_nonoverlappin...
## Summary [summary]: #summary Enable the compiler to select whether a target dynamically or statically links to a platform's standard C runtime ("CRT") through the introduction of three orthogonal and otherwise general purpose features, on...
## Summary [summary]: #summary Make compiler aware of the association between library names adorning `extern` blocks and symbols defined within the block. Add attributes and command line switches that leverage this association. ## Motivatio...
## Summary [summary]: #summary Better ergonomics for pattern-matching on references. Currently, matching on references requires a bit of a dance using `ref` and `&` patterns: ```rust let x: &Option<_> = &Some(0); match x { &Some(ref y) => {...
## Summary [summary]: #summary A refinement of the Rust planning and reporting process, to establish a shared vision of the project among contributors, to make clear the roadmap toward that vision, and to celebrate our achievements. Rust's...
## Summary [summary]: #summary This RFC proposes adding a new macro to `libcore`, `compile_error!` which will unconditionally cause compilation to fail with the given error message when encountered. ## Motivation [motivation]: #motivation C...
## Summary [summary]: #summary Add a function that extracts the discriminant from an enum variant as a comparable, hashable, printable, but (for now) opaque and unorderable type. ## Motivation [motivation]: #motivation When using an ADT enu...
## Summary [summary]: #summary `assert_ne` is a macro that takes 2 arguments and panics if they are equal. It works and is implemented identically to `assert_eq` and serves as its complement. This proposal also includes a `debug_asset_ne`,...
## Summary [summary]: #summary Create a team responsible for documentation for the Rust project. ## Motivation [motivation]: #motivation [RFC 1068] introduced a federated governance model for the Rust project. Several initial subteams were...
## Summary [summary]: #summary Currently Rust allows anonymous parameters in trait methods: ```Rust trait T { fn foo(i32); fn bar_with_default_impl(String, String) { } } ``` This RFC proposes to deprecate this syntax. This RFC intentionally...
## Summary [summary]: #summary When initializing a data structure (struct, enum, union) with named fields, allow writing `fieldname` as a shorthand for `fieldname: fieldname`. This allows a compact syntax for initialization, with less dupli...
## Summary [summary]: #summary Extract a very small sliver of today's procedural macro system in the compiler, just enough to get basic features like custom derive working, to have an eventually stable API. Ensure that these features will n...
## Summary [summary]: #summary Rust programs compiled for Windows will always allocate a console window on startup. This behavior is controlled via the `SUBSYSTEM` parameter passed to the linker, and so *can* be overridden with specific com...
## Summary [summary]: #summary Introduce non-panicking borrow methods on `RefCell<T>`. ## Motivation [motivation]: #motivation Whenever something is built from user input, for example a graph in which nodes are `RefCell<T>` values, it is pr...
## Summary [summary]: #summary This RFC adds the following methods to atomic types: ```rust impl AtomicT { fn get_mut(&mut self) -> &mut T; fn into_inner(self) -> T; } ``` It also specifies that the layout of an `AtomicT` type is always the...
## Summary [summary]: #summary Extend `Cell` to work with non-`Copy` types. ## Motivation [motivation]: #motivation It allows safe inner-mutability of non-`Copy` types without the overhead of `RefCell`'s reference counting. The key idea of...