## Summary [summary]: #summary This **experimental RFC** lays out a high-level plan for improving Cargo's ability to integrate with other build systems and environments. As an experimental RFC, it opens the door to landing [unstable feature...
## Summary [summary]: #summary Add compiler-generated `Clone` implementations for tuples and arrays with `Clone` elements of all lengths. ## Motivation [motivation]: #motivation Currently, the `Clone` trait for arrays and tuples is implemen...
## Summary [summary]: #summary Implement `Clone` and `Copy` for closures where possible: ```rust // Many closures can now be passed by-value to multiple functions: fn call<F: FnOnce()>(f: F) { f() } let hello = || println!("Hello, world!");...
## Summary [summary]: #summary Permit nested `{}` groups in imports. Permit `*` in `{}` groups in imports. ```rust use syntax::{ tokenstream::TokenTree, // >1 segments ext::base::{ExtCtxt, MacResult, DummyResult, MacEager}, // nested braces...
## This RFC was previously approved, but part of it later **withdrawn** The `crate` visibility specifier was previously implemented, but later removed. For details see the [summary comment]. [summary comment]: https://github.com/rust-lang/r...
## Summary [summary]: #summary Add the method `Option::filter<P>(self, predicate: P) -> Self` to the standard library. This method makes it possible to easily throw away a `Some` value depending on a given predicate. The call `opt.filter(p)...
## Summary [summary]: #summary Support defining C-compatible variadic functions in Rust, via new intrinsics. Rust currently supports declaring external variadic functions and calling them from unsafe code, but does not support writing such...
## Summary [summary]: #summary Add minimal support for fallible allocations to the standard collection APIs. This is done in two ways: * For users with unwinding, an `oom=panic` configuration is added to make global allocators panic on oom....
## Summary [summary]: #summary Introduce a new `dyn Trait` syntax for trait objects using a contextual `dyn` keyword, and deprecate "bare trait" syntax for trait objects. In a future edition, `dyn` will become a proper keyword and a lint ag...
## Summary [summary]: #summary Eliminate the need for separately binding lifetime parameters in `fn` definitions and `impl` headers, so that instead of writing: ```rust fn two_args<'b>(arg1: &Foo, arg2: &'b Bar) -> &'b Baz fn two_lifetimes<...
## Summary [summary]: #summary Allow unnamed fields of `struct` and `union` type, contained within an outer struct or union; the fields they contain appear directly within the containing structure, with the use of `union` and `struct` deter...
## Summary [summary]: #summary Remove the need for explicit `T: 'x` annotations on structs. We will infer their presence based on the fields of the struct. In short, if the struct contains a reference, directly or indirectly, to `T` with li...
## Summary [summary]: #summary Extend Rust's borrow system to support **non-lexical lifetimes** -- these are lifetimes that are based on the control-flow graph, rather than lexical scopes. The RFC describes in detail how to infer these new,...
## Summary [summary]: #summary Enable accurate caller location reporting during panic in `{Option, Result}::{unwrap, expect}` with the following changes: 1. Support the `#[track_caller]` function attribute, which guarantees a function has a...
## Summary [summary]: #summary Eliminate the need for “redundant” bounds on functions and impls where those bounds can be inferred from the input types and other trait bounds. For example, in this simple program, the impl would no longer re...
## Summary [summary]: #summary Currently when using an if let statement and an irrefutable pattern (read always match) is used the compiler complains with an `E0162: irrefutable if-let pattern`. The current state breaks macros who want to a...
## Summary [summary]: #summary Add the ability to create named existential types and support `impl Trait` in `let`, `const`, and `static` declarations. ```rust // existential types existential type Adder: Fn(usize) -> usize; fn adder(a: usi...
## Summary [summary]: #summary Provide a stable mechanism to specify the behavior of `panic!` in no-std applications. ## Motivation [motivation]: #motivation The `#![no_std]` attribute was stabilized some time ago and it made possible to bu...
## Summary [summary]: #summary Allow constraints to appear in where clauses which are trivially known to either always hold or never hold. This would mean that `impl Foo for Bar where i32: Iterator` would become valid, and the impl would ne...
## Summary [summary]: #summary Introduce a move to dual-MIT/Apache2 licensing terms to the Rust RFCs repo, by requiring them for all new contributions, and asking previous contributors to agree on the new license. ## Disclaimer [disclaimer]...