## Summary Revise the Drop Check (`dropck`) part of Rust's static analyses in two ways. In the context of this RFC, these revisions are respectively named `cannot-assume-parametricity` and `unguarded-escape-hatch`. 1. `cannot-assume-paramet...
## Summary Document and expand the open options. ## Motivation The options that can be passed to the os when opening a file vary between systems. And even if the options seem the same or similar, there may be unexpected corner cases. This R...
## Summary Enable the compiler to cache incremental workproducts. ## Motivation The goal of incremental compilation is, naturally, to improve build times when making small edits. Any reader who has never felt the need for such a feature is...
## Summary [summary]: #summary Copy most of the static `ptr::` functions to methods on unsafe pointers themselves. Also add a few conveniences for `ptr.offset` with unsigned integers. ```rust // So this: ptr::read(self.ptr.offset(idx as isi...
## Summary If the constant evaluator encounters erroneous code during the evaluation of an expression that is not part of a true constant evaluation context a warning must be emitted and the expression needs to be translated normally. ## De...
## Summary This RFC proposes a policy around the crates under the rust-lang github organization that are not part of the Rust distribution (compiler or standard library). At a high level, it proposes that these crates be: - Governed similar...
## This RFC was previously approved, but later **withdrawn** For details see the [summary comment]. [summary comment]: https://github.com/rust-lang/rust/issues/27779#issuecomment-378416911 ## Summary Rather than trying to find a clever synt...
## Summary Move `std::thread::catch_panic` to `std::panic::recover` after replacing the `Send + 'static` bounds on the closure parameter with a new `PanicSafe` marker trait. ## Motivation In today's stable Rust it's not possible to catch a...
## Summary A Cargo crate's dependencies are associated with constraints that specify the set of versions of the dependency with which the crate is compatible. These constraints range from accepting exactly one version (`=1.2.3`), to accepti...
## Summary Promote `!` to be a full-fledged type equivalent to an `enum` with no variants. ## Motivation To understand the motivation for this it's necessary to understand the concept of empty types. An empty type is a type with no inhabita...
## Summary Type system changes to address the outlives relation with respect to projections, and to better enforce that all types are well-formed (meaning that they respect their declared bounds). The current implementation can be both unso...
## Summary Introduce a "mid-level IR" (MIR) into the compiler. The MIR desugars most of Rust's surface representation, leaving a simpler form that is well-suited to type-checking and translation. ## Motivation The current compiler uses a si...
## Summary Add a new subcommand to Cargo, `install`, which will install `[[bin]]`-based packages onto the local system in a Cargo-specific directory. ## Motivation There has [almost always been a desire][cargo-37] to be able to install Carg...
## This RFC was previously approved, but later **withdrawn** In short this RFC was superseded by RFC 2972. For details see the [summary comment]. [summary comment]: https://github.com/rust-lang/rust/issues/32408#issuecomment-1016931986 ## S...
## Summary Change all functions dealing with reading "lines" to treat both '\n' and '\r\n' as a valid line-ending. ## Motivation The current behavior of these functions is to treat only '\n' as line-ending. This is surprising for programmer...
## Summary Add element-recovery methods to the set types in `std`. ## Motivation Sets are sometimes used as a cache keyed on a certain property of a type, but programs may need to access the type's other properties for efficiency or functio...
## Summary Allow a `x...y` expression to create an inclusive range. ## Motivation There are several use-cases for inclusive ranges, that semantically include both end-points. For example, iterating from `0_u8` up to and including some numbe...
## Summary Add a new flag to the compiler, `--cap-lints`, which set the maximum possible lint level for the entire crate (and cannot be overridden). Cargo will then pass `--cap-lints allow` to all upstream dependencies when compiling code....
## Summary Add a high-level intermediate representation (HIR) to the compiler. This is basically a new (and additional) AST more suited for use by the compiler. This is purely an implementation detail of the compiler. It has no effect on th...
## Summary Add support to the compiler to override the default allocator, allowing a different allocator to be used by default in Rust programs. Additionally, also switch the default allocator for dynamic libraries and static libraries to u...