This document reflects the status, and planned work in progress, for the compiler team. It is a live document and will be updated as work progresses, features are added / removed, and as work on feature progresses. This is not an exhaustive list of our features but rather the ones which have active development efforts behind them.
The "Feature" column contains a link to the championed proposal or doc for the feature.
The "State" column contains a link to the test plan issue for the feature. The test plan should have a "Feature - XYZ" label, which is also used on PRs and issues for the feature.
Merged features should be in the bottom portion of the table (in descending order from earliest to latest merged), while in-progress features should be in the top portion of the table.
When a feature is merged to the main branch, its entry should be moved to the bottom of the table and its "State" value should be updated to record the relevant version number.
| Feature | Branch | State | Developer | Reviewer | IDE Buddy | LDM Champ |
|---|---|---|---|---|---|---|
| Recognizing 'unmanaged' constraint | main | Merged into 17.13 P2 | AlekseyTs | cston, 333fred | (no IDE impact) | jaredpar |
| Overload Resolution Priority | main | Merged into 17.13 P3 | AlekseyTs | 333fred, cston | (no IDE impact) | 333fred |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| Caller expression attribute | main | Merged into 17.0p3 | Youssef1313 | 333fred,AlekseyTs | jcouv |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| Enable consumption of init-only properties | main | Merged (16.9p3) | AlekseyTs | jcouv | N/A |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| Default Interface Methods | main | Merged to dev16.1 preview2 | AlekseyTs | gafter | gafter |
| Nullable reference type | main | Merged to dev16.0 preview1 | cston, jcouv | AlekseyTs, 333fred | mattwar |
| Recursive patterns | main | Merged to dev16.0 preview2 | gafter | agocke, cston | gafter |
| Async streams | main | Merged to dev16.0 preview1 | jcouv | agocke | stephentoub |
| Enhanced using | main | Merged to dev16.0 preview2 | chsienki | agocke | jaredpar |
| Ranges | main | Merged to dev16.0 preview1 | agocke | cston | jaredpar |
| Null-coalescing Assignment | main | Merged to dev16.0 preview1 | 333fred | cston | gafter |
| Alternative interpolated verbatim strings | main | Merged to dev16.0 preview1 | jcouv | cston | jcouv |
| stackalloc in nested contexts | main | Merged to dev16.2 preview1 | gafter | - | gafter |
| Unmanaged generic structs | main | Merged to dev16.1 preview1 | RikkiGibson | - | jaredpar |
| Static local functions | main | Merged in dev16.0 preview2 | cston | jaredpar | jcouv |
| Readonly members | main | Merged to dev16.1 preview2 | RikkiGibson | TBD | jaredpar |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| Line continuation comments | main | Merged in 16.1 (preview2) | paul1956 | AlekseyTs | gafter |
| Relax null-coalescing operator requirements | main | Merged in 16.0 | 333fred | cston | gafter |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| blittable | None | Merged | None | - | jaredpar |
| Support == and != for tuples | main | Merged | jcouv | AlekseyTs | jcouv |
| strongname | main | Merged | tyoverby | agocke | jaredpar |
| Attribute on backing field | features/compiler | Merged | jcouv | AlekseyTs | jcouv |
| Ref Reassignment | main | Merged | agocke | vsadov | gafter |
| Constraints | main | Merged | OmarTawfik | vsadov | gafter |
| Stackalloc initializers | main | Merged | alrz | vsadov | jcouv |
| Custom fixed | main | Merged | vsadov | jcouv | jarepdar |
| Indexing movable fixed buffers | - | Merged | vsadov | jcouv | jarepdar |
| Improved overload candidates | features/compiler | Merged | gafter | cston | mattwar |
| Expression variables | main | Merged | AlekseyTs | gafter | AlekseyTs |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
ref and this ordering in ref extension |
- | Merged | alrz | - | - |
Tiebreaker for by-val and in overloads |
main | Merged | OmarTawfik | - | - |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| ref readonly | main | Merged | vsadov, OmarTawfik | cston,gafter | jaredpar |
| interior pointer/Span/ref struct | main | Merged | vsadov | gafter, jaredpar | jaredpar |
| non-trailing named arguments | main | Merged | jcouv | gafter | jcouv |
| private protected | main | Merged | gafter | jcouv | gafter |
| conditional ref operator | main | Merged | vsadov | cston | jaredpar |
| Digit separator after base specifier | main | Merged | alrz | - | gafter |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|---|---|---|---|---|
| Async Main | main | Merged | tyoverby | vsadov | stephentoub |
| Default Expressions | main | Merged | jcouv | cston | jcouv |
| Ref Assemblies | main | Merged (IDE and project-system integrations ongoing) | jcouv | gafter | N/A |
| Infer tuple names | main | Merged | jcouv | gafter | jcouv |
| Pattern-matching with generics | main | Merged | gafter | agocke | gafter |
- Is target version a guarantee?: No. It's explicitly not a guarantee. This is just the planned and ongoing work to the best of our knowledge at this time.
- Where are these State values defined?: Take a look at the Developing a Language Feature document.