## Summary Rename the `Share` trait to `Sync` ## Motivation With interior mutability, the name "immutable pointer" for a value of type `&T` is not quite accurate. Instead, the term "shared reference" is becoming popular to reference values...
## Summary Remove or feature gate the shadowing of view items on the same scope level, in order to have less complicated semantic and be more future proof for module system changes or experiments. This means the names brought in scope by `e...
## Summary Currently we use inference to find the current type of otherwise-unannotated integer literals, and when that fails the type defaults to `int`. This is often felt to be potentially error-prone behavior. This proposal removes the i...
## Summary Rename `*T` to `*const T`, retain all other semantics of unsafe pointers. ## Motivation Currently the `T*` type in C is equivalent to `*mut T` in Rust, and the `const T*` type in C is equivalent to the `*T` type in Rust. Noticeab...
## Summary Remove localization features from format!, and change the set of escapes accepted by format strings. The `plural` and `select` methods would be removed, `#` would no longer need to be escaped, and `{{`/`}}` would become escapes f...
## Summary Do not identify struct literals by searching for `:`. Instead define a sub- category of expressions which excludes struct literals and re-define `for`, `if`, and other expressions which take an expression followed by a block (or...
## Summary Cleanup the trait, method, and operator semantics so that they are well-defined and cover more use cases. A high-level summary of the changes is as follows: 1. Generalize explicit self types beyond `&self` and `&mut self` etc, so...
## Summary Remove the coercion from `Box<T>` to `&mut T` from the language. ## Motivation Currently, the coercion between `Box<T>` to `&mut T` can be a hazard because it can lead to surprising mutation where it was not expected. ## Detailed...
## Summary `Index` should be split into `Index` and `IndexMut`. ## Motivation Currently, the `Index` trait is not suitable for most array indexing tasks. The slice functionality cannot be replicated using it, and as a result the new `Vec` h...
## Summary Add syntax sugar for importing a module and items in that module in a single view item. ## Motivation Make use clauses more concise. ## Detailed design The `mod` keyword may be used in a braced list of modules in a `use` item to...
## Summary Rust currently forbids pattern guards on match arms with move-bound variables. Allowing them would increase the applicability of pattern guards. ## Motivation Currently, if you attempt to use guards on a match arm with a move-bou...
## Summary Add a `partial_cmp` method to `PartialOrd`, analogous to `cmp` in `Ord`. ## Motivation The `Ord::cmp` method is useful when working with ordered values. When the exact ordering relationship between two values is required, `cmp` i...
## Summary Simplify Rust's lexical syntax to make tooling easier to use and easier to define. ## Motivation Rust's lexer does a lot of work. It un-escapes escape sequences in string and character literals, and parses numeric literals of 4 d...
## Summary Allow users to load custom lints into `rustc`, similar to loadable syntax extensions. ## Motivation There are many possibilities for user-defined static checking: * Enforcing correct usage of Servo's [JS-managed pointers](https:/...
## Summary Bounds on trait objects should be separated with `+`. ## Motivation With DST there is an ambiguity between the following two forms: trait X { fn f(foo: b); } and trait X { fn f(Trait: Share); } See Rust issue #12778 for details....
## Summary Generalize the `#[macro_registrar]` feature so it can register other kinds of compiler plugins. ## Motivation I want to implement [loadable lints](https://github.com/mozilla/rust/issues/14067) and use them for project-specific st...
## Summary Allow macro expansion in patterns, i.e. ~~~ .rs match x { my_macro!() => 1, _ => 2, } ~~~ ## Motivation This is consistent with allowing macros in expressions etc. It's also a year-old [open issue](https://github.com/mozilla/rust...
## Summary Leave structs with unspecified layout by default like enums, for optimisation purposes. Use something like `#[repr(C)]` to expose C compatible layout. ## Motivation The members of a struct are always laid in memory in the order i...
## Summary Allow block expressions in statics, as long as they only contain items and a trailing const expression. Example: ```rust static FOO: uint = { 100 }; static BAR: fn() -> int = { fn hidden() -> int { 42 } hidden }; ``` ## Motivatio...
## Summary Add ASCII byte literals and ASCII byte string literals to the language, similar to the existing (Unicode) character and string literals. Before the RFC process was in place, this was discussed in [#4334](https://github.com/mozill...