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.
To add a new feature entry (along with its test plan issue and label), use the new-compiler-feature skill.
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 |
|---|
field keyword in properties | field-keyword | Merged into 17.12p3 | Youssef1313, cston | 333fred, RikkiGibson | CyrusNajmabadi | CyrusNajmabadi |
| First-class Span Types | FirstClassSpan | Merged into 17.13p1 | jjonescz | cston, 333fred | | 333fred, stephentoub |
Unbound generic types in nameof | PR | Merged into 17.13p2 | CyrusNajmabadi | jcouv, AlekseyTs | CyrusNajmabadi | CyrusNajmabadi |
| String literals in data section as UTF8 | PR | Merged into 17.13p4 | jjonescz | AlekseyTs, cston | N/A | N/A |
| Simple lambda parameters with modifiers | PR | Merged into 17.14p1 | CyrusNajmabadi | jjonescz, cston | CyrusNajmabadi | CyrusNajmabadi |
| Partial Events and Constructors | PartialEventsCtors | Merged into 17.14p3 | jjonescz | cston, RikkiGibson | CyrusNajmabadi | jaredpar |
| Extensions | extensions | Merged into 17.14p3 | jcouv, AlekseyTs | jjonescz, TBD | CyrusNajmabadi | MadsTorgersen |
| Null-conditional assignment | null-conditional-assignment | Merged into 17.14p3 | RikkiGibson | cston, jjonescz | CyrusNajmabadi | RikkiGibson |
| Ignored directives | PR | Merged into 17.14p3 | jjonescz | RikkiGibson, jaredpar | CyrusNajmabadi | jaredpar |
| User Defined Compound Assignment Operators | UserDefinedCompoundAssignment | Merged to main | AlekseyTs | 333fred, cston | CyrusNajmabadi | AlekseyTs |
Optional and named arguments in Expression trees | PR | Merged to main(https://github.com/dotnet/roslyn/issues/76934) | cston | 333fred, AlekseyTs | CyrusNajmabadi | cston |
| Feature | Branch | State | Developer | Reviewer | IDE Buddy | LDM Champ |
|---|
| Escape character | N/A | Merged into 17.9p1 | CyrusNajmabadi | jcouv, RikkiGibson | (no IDE impact) | CyrusNajmabadi |
| Method group natural type improvements | main | Merged into 17.9p2 | jcouv | AlekseyTs, cston | (no IDE impact) | jcouv |
Lock object | LockObject | Merged into 17.10p2 | jjonescz | cston, RikkiGibson | CyrusNajmabadi (needs IDE fixer) | stephentoub |
| Implicit indexer access in object initializers | main | Merged into 17.9p3 | jcouv | AlekseyTs, cston | (no IDE impact) | |
| Params-collections | main | Merged to 17.10p3 | AlekseyTs | RikkiGibson, 333fred | akhera99 (needs IDE fixer) | MadsTorgersen, AlekseyTs |
| Ref/unsafe in iterators/async | RefInAsync | Merged into 17.11p2 | jjonescz | AlekseyTs, cston | (no IDE impact) | |
| Overload Resolution Priority | main | Merged to 17.12p1 | 333fred | jcouv, cston | Not yet assigned | 333fred |
| Partial properties | partial-properties | Merged into 17.11p3 | RikkiGibson | jcouv, 333fred | Cosifne | 333fred, RikkiGibson |
Ref Struct Interfaces/allows ref struct constraint | RefStructInterfaces | Merged into 17.11p2 | AlekseyTs | cston, jjonescz | ToddGrun | agocke, jaredpar |
| Collection expression better conversion from expression | main | Merged into 17.12p3 | 333fred | cston, AlekseyTs | (no IDE impact) | 333fred, CyrusNajmabadi |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|
| ref readonly parameters | RefReadonly | Merged into 17.8p2 | jjonescz | jcouv, AlekseyTs | akhera99 |
| Collection Expressions | CollectionLiterals | Merged into 17.7p5 | cston | 333fred, RikkiGibson | CyrusNajmabadi |
| Interceptors (experimental feature) | interceptors | Merged into 17.7p3 | RikkiGibson | cston, jcouv | akhera99 |
| Inline Arrays | InlineArrays | Merged into 17.7p3 | AlekseyTs | cston, jjonescz | Cosifne |
| nameof accessing instance members | main | Merged into 17.7p1 | YairHalberstadt, jjonescz | 333fred, AlekseyTs | 333fred |
| Using aliases for any type | main | Merged into 17.6.P3 | CyrusNajmabadi | jcouv cston | CyrusNajmabadi |
| Primary Constructors | PrimaryConstructors | Merged into 17.6.P2 | AlekseyTs | cston, jjonescz | akhera99 |
| Lambda optional parameters | lambda-default-parameters | Merged into 17.5p2 | adamperlin, jjonescz | 333fred, cston | captainsafia |
| Experimental attribute | main | Merged into 17.8p2 | jcouv | cston, jjonescz | jcouv |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|
| File-local types | file-types | Merged into 17.4p1 | RikkiGibson | jcouv, cston | stephentoub |
| ref fields | ref-fields | Merged into 17.3p3 | cston | RikkiGibson, AlekseyTs | jaredpar |
| Required members | main | Merged into 17.3p2 | 333fred | jcouv, RikkiGibson | 333fred |
| DIM for Static Members | DefaultInterfaceImplementation | Merged into 17.3p2 | AlekseyTs | 333fred, jcouv | MadsTorgersen |
| Numeric IntPtr | numeric-intptr | Merged into 17.3p2 | jcouv | cston, 333fred | jcouv |
| Unsigned Right Shift | UnsignedRightShift | Merged into 17.3p1 | AlekseyTs | 333fred, jcouv | AlekseyTs |
| Utf8 String Literals | main | Merged into 17.3p1 | AlekseyTs | cston, RikkiGibson | MadsTorgersen |
Pattern matching on ReadOnlySpan<char> | patterns-span-char | Merged into 17.3p1 | YairHalberstadt | cston, RikkiGibson | jcouv |
| Checked Operators | CheckedUserDefinedOperators | Merged into 17.3p1 | AlekseyTs | 333fred, chsienki | AlekseyTs |
| auto-default structs | main | Merged into 17.3p1 | RikkiGibson | cston, jcouv | |
| Newlines in interpolations | main | Merged in 17.1p1 | CyrusNajmabadi | jcouv, chsienki | CyrusNajmabadi |
| List patterns | main | Merged in 17.1p2 | alrz | jcouv, 333fred | 333fred |
| Raw string literals | main | Merged into 17.2 | CyrusNajmabadi | jcouv | CyrusNajmabadi |
| Cache delegates for static method group | main | Merged into 17.2 | pawchen | AlekseyTs, jcouv | AlekseyTs |
| nameof(parameter) | main | Merged into 17.3p2 | jcouv | AlekseyTs, RikkiGibson | jcouv |
| Relaxing Shift Operator | main | Merged into 17.3p2 | AlekseyTs | 333fred, jcouv | MadsTorgersen |
| Generic attributes | main | Merged into 17.0p4 | AviAvni | RikkiGibson, jcouv | mattwar |
| Feature | Branch | State | Developer | Reviewer | LDM Champ |
|---|
| Record structs | main | Merged into 16.11 | jcouv | AlekseyTs, RikkiGibson | jcouv |
| Global Using Directive | main | Merged into 16.11 | AlekseyTs | 333fred, cston | AlekseyTs |
| Improved Definite Assignment | main | Merged into 17.0 | RikkiGibson | jcouv | jaredpar |
| Constant Interpolated Strings | main | Merged into 16.9p3 | kevinsun-dev | 333fred | jaredar, agocke |
| Extended property patterns | main | Merged into 17.0 | alrz | jcouv, 333fred | 333fred |
| Sealed record ToString | main | Merged | thomaslevesque | jcouv | 333fred |
| Source Generator V2 APIs | main | Merged into 17.0p2 | chsienki | rikkigibson, jaredpar, cston | N/A |
| Mix declarations and variables in deconstruction | main | Merged into 16.10 | YairHalberstadt | jcouv | MadsTorgersen |
| Async method builder override | main | Merged into 17.0p2 | jcouv | cston, RikkiGibson | stephentoub |
Enhanced #line directive | main | Merged into 17.0p2 | cston | jcouv, RikkiGibson | MadsTorgersen |
| Lambda improvements | main | Merged into 17.0p2 | cston | 333fred, jcouv | jaredpar |
| Static Abstract Members In Interfaces C# 10 Preview | main | Merged into 17.0p2 | AlekseyTs | 333fred, RikkiGibson | MadsTorgersen |
| Interpolated string improvements | main | Merged into 17.0p3 | 333fred | AlekseyTs, chsienki | jaredpar |
| File-scoped namespace | main | Merged into 17.0p3 | RikkiGibson | jcouv, chsienki | CyrusNajmabadi |
| Parameterless struct constructors | main | Merged into 17.0p3 | cston | jcouv, 333fred | jcouv |
| Caller expression attribute | main | Merged into 17.0p3 | Youssef1313 | 333fred,AlekseyTs | jcouv |
- 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.