## Summary Change syntax of subslices matching from `..xs` to `xs..` to be more consistent with the rest of the language and allow future backwards compatible improvements. Small example: ```rust match slice { [xs.., _] => xs, [] => fail!()...
## Summary The `#[cfg(...)]` attribute provides a mechanism for conditional compilation of items in a Rust crate. This RFC proposes to change the syntax of `#[cfg]` to make more sense as well as enable expansion of the conditional compilati...
## Summary Divide global declarations into two categories: - **constants** declare *constant values*. These represent a value, not a memory address. This is the most common thing one would reach for and would replace `static` as we know it...
## Summary - Remove the special-case bound `'static` and replace with a generalized *lifetime bound* that can be used on objects and type parameters. - Remove the rules that aim to prevent references from being stored into objects and repla...
## Summary This RFC extends traits with *associated items*, which make generic programming more convenient, scalable, and powerful. In particular, traits will consist of a set of methods, together with: * Associated functions (already prese...
## Summary Remove special treatment of `Box<T>` from the borrow checker. ## Motivation Currently the `Box<T>` type is special-cased and converted to the old `~T` internally. This is mostly invisible to the user, but it shows up in some plac...
## Summary - Convert function call `a(b, ..., z)` into an overloadable operator via the traits `Fn<A,R>`, `FnShare<A,R>`, and `FnOnce<A,R>`, where `A` is a tuple `(B, ..., Z)` of the types `B...Z` of the arguments `b...z`, and `R` is the re...
## Summary Add simple syntax for accessing values within tuples and tuple structs behind a feature gate. ## Motivation Right now accessing fields of tuples and tuple structs is incredibly painful—one must rely on pattern-matching alone to e...
## Summary This RFC improves interoperation between APIs with different error types. It proposes to: * Increase the flexibility of the `try!` macro for clients of multiple libraries with disparate error types. * Standardize on basic functio...
## Summary The variants of an enum are currently defined in the same namespace as the enum itself. This RFC proposes to define variants under the enum's namespace. ### Note In the rest of this RFC, *flat enums* will be used to refer to the...
## Summary Change the rebinding syntax from `use ID = PATH` to `use PATH as ID`, so that paths all line up on the left side, and imported identifiers are all on the right side. Also modify `extern crate` syntax analogously, for consistency....
## Summary Rust's support for pattern matching on slices has grown steadily and incrementally without a lot of oversight. We have concern that Rust is doing too much here, and that the complexity is not worth it. This RFC proposes to featur...
## Summary Require "anonymous traits", i.e. `impl MyStruct` to occur only in the same module that `MyStruct` is defined. ## Motivation Before I can explain the motivation for this, I should provide some background as to how anonymous traits...
## Summary Closures should capture their upvars by value unless the `ref` keyword is used. ## Motivation For unboxed closures, we will need to syntactically distinguish between captures by value and captures by reference. ## Detailed design...
## Summary Change the semantics of the built-in fixed-size integer types from being defined as wrapping around on overflow to it being considered a program error (but *not* undefined behavior in the C sense). Implementations are *permitted*...
## Summary Remove the coercion from `Box<T>` to `&T` from the language. ## Motivation The coercion between `Box<T>` to `&T` is not replicable by user-defined smart pointers and has been found to be rarely used [1]. We already removed the co...
## Summary This RFC proposes to 1. Expand the rules for eliding lifetimes in `fn` definitions, and 2. Follow the same rules in `impl` headers. By doing so, we can avoid writing lifetime annotations ~87% of the time that they are currently r...
## Summary Require a feature gate to expose private items in public APIs, until we grow the appropriate language features to be able to remove the feature gate and forbid it entirely. ## Motivation Privacy is central to guaranteeing the inv...
## Summary * Remove the `crate_id` attribute and knowledge of versions from rustc. * Add a `#[crate_name]` attribute similar to the old `#[crate_id]` attribute * Filenames will no longer have versions, nor will symbols * A new flag, `--exte...
## Summary *Note:* This RFC discusses the behavior of `rustc`, and not any changes to the language. Change how target specification is done to be more flexible for unexpected usecases. Additionally, add support for the "unknown" OS in targe...