I've been thinking a lot about the upcoming impl period -- as well as just about the compiler team in general. There are a broad range of RFCs that we would like to implement, covering a number of different areas. I would like to propose the formation of various focus groups (maybe these need a new name). The idea is to have independent groups of people focused on a particualr set of RFCs, organized around a common theme. Each group is responsible for planning out the implementation of its RFCs and mentoring people through that work. (After the impl period is over, I envision these groups continuing on, perhaps tweaked in various ways, as the new structure of the compiler team.)
Here is my proposed breakdown of the pending RFCs into groups.
This group is focused on changes that are almost entirely concerned with the "front-end" -- meaning parsing, name resolution, and other things that occur before the HIR is constructed, or during the very early phases of type resolution.
- Nested groups in imports
- Clarify and streamline paths and visibility
- In-band lifetime bindings
- Attributes for tools
- Optional vertical bar in match arms
This group is focused on changes that can be done in a relative targeted way, without requiring any restructures of how components work. This basically means that they do not intersect the trait system. =) Often, these changes will involve touching more than one part of the system, however.
must_use
on functions- Autoreferencing Copy types
- Non-exhaustive matching
- Inferring
T: 'x
outlives requirements - Irrefutable patterns in
if let
andwhile let
- Copy/Clone closures
- Unsized tuple coercion
?
in main- Finish off the
Try
trait - Default binding modes in match
The idea here is to generally take a look at the trait system, informed by the work on Chalk, and try to rework the implementation to be more flexible. This should also lay the groundwork (and/or implement) a number of pending RFCs:
- Performance improvements and better caching
- Lazy normalization
- Implied bounds
- Generic associated types
- impl Trait type alias
The overriding goal here is implementing the non-lexical lifetimes proposal and generally moving our safety checking to operate on MIR.
- NLL prototyping
- Re-implement borrowck on MIR (underway by pnkfelix, arielb1)
Obviously this has been a long effort.
-
MIR optimizations
- This is not an RFC per se, but it is widely believed that doing some amount of MIR-level optimization can improve compile time as well as runtime of generated code.