Technical Documentation: dotnet/csharplang
ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference
Overview (`README.md`)
C# Language Design
Welcome to the official repo for C# language design. This is where new C# language features are developed, adopted and specified.
C# is designed by the C# Language Design Team (LDT) in close coordination with the Roslyn project, which implements the language.
You can find:
- Active C# language feature proposals in the proposals folder
- Notes from C# language design meetings in the meetings folder
- Summary of the language version history here.
If you discover bugs or deficiencies in the above, please leave an issue to raise them, or even better: a pull request to fix them.
For new feature proposals, however, please raise them for discussion, and only submit a proposal as an issue or pull request if invited to do so by a member of the Language Design Team (a "champion").
The complete design process is described here. A shorter overview is below.
Discussions
Debate pertaining to language features takes place in the form of Discussions in this repo.
If you want to suggest a feature, discuss current design notes or proposals, etc., please open a new Discussion topic.
Discussions that are short and stay on topic are much more likely to be read. If you leave comment number fifty, chances are that only a few people will read it. To make discussions easier to navigate and benefit from, please observe a few rules of thumb:
- Discussion should be relevant to C# language design. If they are not, they will be summarily closed.
- Choose a descriptive topic that clearly communicates the scope of discussion.
- Stick to the topic of the discussion. If a comment is tangential, or goes into detail on a subtopic, start a new discussion and link back.
- Is your comment useful for others to read, or can it be adequately expressed with an emoji reaction to an existing comment?
Language proposals which prevent specific syntax from occurring can be achieved with a Roslyn analyzer. Proposals that only make existing syntax optionally illegal will be rejected by the language design committee to prevent increased language complexity.
Proposals
When a member of the C# LDM finds that a proposal merits consideration by the broader team, they can Champion it, which means that they will bring it to the C# Language Design Meeting. Proposals are always discussed in linked discussions, not in the champion issue. We didn't always follow this policy, so many champion issues will have discussion on them; we now lock issues to prevent new discussion from occurring on them. Each champion issue will have a discussion link on it.
Design Process
Proposals evolve as a result of decisions in Language Design Meetings, which are informed by discussions, experiments, and offline design work.
In many cases it will be necessary to implement and share a prototype of a feature in order to land on the right design, and ultimately decide whether to adopt the feature. Prototypes help discover both implementation and usability issues of a feature. A prototype should be implemented in a fork of the Roslyn repo and meet the following bar:
- Parsing (if applicable) should be resilient to experimentation: typing should not cause crashes.
- Include minimal tests demonstrating the feature at work end-to-end.
- Include minimal IDE support (keyword coloring, formatting, completion).
Once approved, a feature should be fully implemented in Roslyn, and fully specified in the language specification, whereupon the proposal is moved into the appropriate folder for a completed feature, e.g. C# 7.1 proposals.
DISCLAIMER: An active proposal is under active consideration for inclusion into a future version of the C# programming language but is not in any way guaranteed to ultimately be included in the next or any version of the language. A proposal may be postponed or rejected at any time during any phase of the above process based on feedback from the design team, community, code reviewers, or testing.
Milestones
We have a few different milestones for issues on the repo:
- Working Set is the set of championed proposals that are currently being actively worked on. Not everything in this milestone will make the next version of C#, but it will get design time during the upcoming release.
- Backlog is the set of championed proposals that have been triaged, but are not being actively worked on. While discussion and ideas from the community are welcomed on these proposals, the cost of the design work and implementation review on these features are too high for us to consider community implementation until we are ready for it.
- Any Time is the set of championed proposals that have been triaged, but are not being actively worked on and are open to community implementation. Issues in this can be in one of 2 states: needs approved specification, and needs implementation. Those that need a specification still need to be presented during LDM for approval of the spec, but we are willing to take the time to do so at our earliest convenience.
- Likely Never is the set of proposals that the LDM has rejected from the language. Without strong need or community feedback, these proposals will not be considered in the future.
- Numbered milestones are the set of features that have been implemented for that particular language version. For closed milestones, these are the set of things that shipped with that release. For open milestones, features can be potentially pulled later if we discover compatibility or other issues as we near release.
Language Design Meetings
Language Design Meetings (LDMs) are held by the LDT and occasional invited guests, and are documented in Design Meeting Notes in the meetings folder, organized in folders by year. The lifetime of a design meeting note is described in meetings/README.md. LDMs are where decisions about future C# versions are made, including which proposals to work on, how to evolve the proposals, and whether and when to adopt them.
Language Specification
The current ECMA-334 specification can be found in markdown form on the C# Language Standard repository.
Implementation
The reference implementation of the C# language can be found in the Roslyn repository. This repository also tracks the implementation status for language features. Until recently, that was also where language design artifacts were tracked. Please allow a little time as we move over active proposals.
Overview (`meetings/README.md`)
C# Language Design Meetings
C# Language Design Meetings (LDM for short) are meetings by the C# Language Design Team and invited guests to investigate, design and ultimately decide on features to enter the C# language. It is a creative meeting, where active design work happens, not just a decision body.
Each C# language design meeting is represented by a meeting notes file in this folder.
Purpose of the meetings notes
Meeting notes serve the triple purposes of
- recording decisions so they can be acted upon
- communicating our design thinking to the community so we can get feedback on them
- recording rationale so we can return later and see why we did things the way we did
All have proven extremely useful over time.
Life cycle of meeting notes
- If upcoming design meetings have a specific agenda, for instance to suit the schedule of visitors, there may be a meeting notes file with that agenda even before the meeting happens.
- Otherwise the meeting agendas are determined just-in-time based on urgency, arrival of new information or ideas, challenges found in design and implementation, and so on.
- After the meeting, notes will be saved directly here.
- Usually they will be raw notes in need of subsequent cleaning up. If that's the case, they will be clearly marked as such, and a Meeting notes work item will track the task of cleaning up the notes.
- When the notes are finalized, a notification is posted as a discussion issue to encourage discussion of the decisions made. While quick comments are welcome directly on that issue, it is recommended to open a separate issue for deeper or more topic-specific discussions.
- If the notes impact current proposals, proposal work items will track updating those proposals, assigned to their champions.
- When updated, the proposals link back to the meetings where the proposal was discussed.
Style of design notes
The notes serve as the collective voice of the LDM. They cover not just the decisions but the discussion, options and rationale, so that others can follow along in the discussion and provide input to it, and so that we don't forget them for later.
However, the notes are not minutes! They never state who said what in the meeting. They will occasionally mention people by name if they are visiting, provided input, should be collaborated with, etc. But the notes aim to represent the shared thinking of the room. If there's disagreement, they will report that, but they won't focus on who wants what.
This approach is intended to reinforce that the LDMs are a safe space, and a collaborative, creative effort. It is not a negotiation between representatives of different interests. It is not a voting body, and it is not a venue for posturing. Everybody cooperates towards the same end: creating the best language for today's and tomorrow's C# developers.
When there are external inputs to the notes (such as open questions, presentations, supplemental documents, etc), they will be committed to this repository and linked to from the notes, with a specific commit, to ensure that any future reorganization will keep the notes working.
Working groups
Working groups who choose to do so will keep meeting notes in a subfolder of the working-groups folder belonging to that group. These notes will be anonymized, like LDM notes, but are likely to be much rougher than dedicated LDM notes. We will not create dedicated discussions when posting these working group notes. Users that want to comment on them can either comment on the issue for the group or create a discussion, as they choose. Working groups will each have a leader, and that leader will be responsible for coordinating with the broader LDM on when things need to be brought back to the full group.
Overview (`proposals/README.md`)
C# Language Proposals
Language proposals are living documents describing the current thinking about a given language feature.
Proposals can be either active, inactive, rejected or done. Active proposals are stored directly in the proposals folder, inactive and rejected proposals are stored in the inactive and rejected subfolders, and done proposals are archived in a folder corresponding to the language version they are part of.
Lifetime of a proposal
A proposal starts its life when the language design team decides that it might make a good addition to the language some day. Typically it will start out being active, but if we want to capture an idea without wanting to work on it right now, a proposal can also start out in the inactive subfolder. Proposals may even start out directly in the rejected state, if we want to make a record of something we don't intend to do. For instance, if a popular and recurring request is not possible to implement, we can capture that as a rejected proposal.
The proposal may start out as an idea in a discussion issue, or it may come from discussions in the Language Design Meeting, or arrive from many other fronts. The main thing is that the design team feels that it should be done, and that there's someone who is willing to write it up. Typically a member of the Language Design Team will assign themselves as a champion for the feature, tracked by a Champion issue. The champion is responsible for moving the proposal through the design process.
A proposal is active if it is moving forward through design and implementation toward an upcoming release. Once it is completely done, i.e. an implementation has been merged into a release and the feature has been specified, it is moved into a subdirectory corresponding to its release.
If a feature turns out not to be likely to make it into the language at all, e.g. because it proves unfeasible, does not seem to add enough value or just isn't right for the language, it will be rejected. If a feature has reasonable promise but is not currently being prioritized to work on, it may be declared inactive to avoid cluttering the main folder. It is perfectly fine for work to happen on inactive or rejected proposals, and for them to be resurrected later. The categories are there to reflect current design intent.
Nature of a proposal
A proposal should follow the proposal template. A good proposal should:
- Fit with the general spirit and aesthetic of the language.
- Not introduce subtly alternate syntax for existing features.
- Add a lot of value for a clear set of users.
- Not add significantly to the complexity of the language, especially for new users.
Discussion of proposals
Feedback and discussion happens in discussion issues. When a new proposal is added to the proposals folder, it should be announced in a discussion issue by the champion or proposal author.
Overview (`spec/README.md`)
This content has moved to the dotnet/csharpstandard repository.
The full table of contents is in the standard folder.
To view the text of the Microsoft spec before merging with the ECMA text, checkout the ms-spec-text tag in this repository.
- §7 Basic concepts
- §8 Types
- §9 Variables
- §10 Conversions
- §11 Expressions
- §11.1 General
- §11.2 Expression classifications
- §11.3 Static and Dynamic Binding
- §11.4 Operators
- §11.5 Member lookup
- §11.6 Function members
- §11.7 Primary expressions
- §11.8 Unary operators
- §11.9 Arithmetic operators
- §11.10 Shift operators
- §11.11 Relational and type-testing operators
- §11.12 Logical operators
- §11.13 Conditional logical operators
- §11.14 The null coalescing operator
- §11.15 Conditional operator
- §11.16 Anonymous function expressions
- §11.17 Query expressions
- §11.18 Assignment operators
- §11.19 Expression
- §11.20 Constant expressions
- §11.21 Boolean expressions
- §12 Statements
- §12.1 General
- §12.2 End points and reachability
- §12.3 Blocks
- §12.4 The empty statement
- §12.5 Labeled statements
- §12.6 Declaration statements
- §12.7 Expression statements
- §12.8 Selection statements
- §12.9 Iteration statements
- §12.10 Jump statements
- §12.11 The try statement
- §12.12 The checked and unchecked statements
- §12.13 The lock statement
- §12.14 The using statement
- §12.15 The yield statement
- §13 Namespaces
- §14 Classes
- §15 Structs
- §16 Arrays
- §17 Interfaces
- §18 Enums
- §19 Delegates
- §20 Exceptions
- §21 Attributes
- §22 Unsafe code
- §D Documentation comments
Overview (`meetings/2013/README.md`)
C# Language Design Notes for 2013
Overview of meetings and agendas for 2013
Oct 7, 2013
C# Language Design Notes for Oct 7, 2013
- Invariant meaning of names <*scrap the rule*>
- Type testing expression <*can’t decide on good syntax*>
- Local functions <*not enough scenarios*>
- nameof operator <*yes*>
C# Language Design Notes for Oct 21, 2013
- Primary Constructors <*fleshed out a few more details*>
- Lightweight Dynamic <*we examined a much simpler approach*>
Nov 4, 2013
C# Language Design Notes for Nov 4, 2013
- Initialized and getter-only auto-properties <*details decided*>
- Expression-bodied function members <*details decided*>
- Lightweight dynamic <*member access model and syntax discussed*>
Dec 16, 2013
C# Language Design Notes for Dec 16, 2013
- Declaration expressions <*reaffirmed scope rules, clarified variable introduction*>
- Semicolon operator <*reaffirmed enclosing parentheses*>
- Lightweight dynamic member access <*decided on a syntax*>
Overview (`meetings/2014/README.md`)
C# Language Design Notes for 2014
Overview of meetings and agendas for 2014
Jan 6, 2014
C# Language Design Notes for Jan 6, 2014
- Syntactic ambiguities with declaration expressions <_a solution adopted_>
- Scopes for declaration expressions <_more refinement added to rules_>
Feb 3, 2014
C# Language Design Notes for Feb 3, 2014
- Capture of primary constructor parameters <_only when explicitly asked for with new syntax_>
- Grammar around indexed names <_details settled_>
- Null-propagating operator details <_allow indexing, bail with unconstrained generics_>
Feb 10, 2014
C# Language Design Notes for Feb 10, 2014
- Design of using static <_design adopted_>
- Initializers in structs <_allow in certain situations_>
- Null-propagation and unconstrained generics <_keep current design_>
Apr 21, 2014
C# Language Design Notes for Apr 21, 2014
- Indexed members <_lukewarm response, feature withdrawn_>
- Initializer scope <_new scope solves all kinds of problems with initialization_>
- Primary constructor bodies <_added syntax for a primary constructor body_>
- Assignment to getter-only auto-properties from constructors <_added_>
- Separate accessibility for type and primary constructor <_not worthy of new syntax_>
- Separate doc comments for field parameters and fields <_not worthy of new syntax_>
- Left associative vs short circuiting null propagation <_short circuiting_>
May 7, 2014
C# Language Design Notes for May 7, 2014
- protected and internal <_feature cut – not worth the confusion_>
- Field parameters in primary constructors <_feature cut – we want to keep the design space open_>
- Property declarations in primary constructors <_interesting but not now_>
- Typeswitch <_Not now – more likely as part of a future more general matching feature_>
May 21, 2014
C# Language Design Notes for May 21, 2014
- Limit the nameof feature? <_keep current design_>
- Extend params IEnumerable? <_keep current design_>
- String interpolation <_design nailed down_>
Jul 9, 2014
C# Language Design Notes for Jul 9, 2014
- Detailed design of nameof <_details settled_>
- Design of #pragma warning extensions <_allow identifiers_>
Aug 27, 2014
C# Language Design Notes for Aug 27, 2014
- Allowing parameterless constructors in structs <_allow, but some unresolved details_>
- Definite assignment for imported structs <_revert to Dev12 behavior_>
Sep 3, 2014
C# Language Design Notes for Sep 3, 2014
- Removing “spill out” from declaration expressions in simple statements <_yes, remove_>
- Same name declared in subsequent else-if’s <_condition decls out of scope in else-branch_>
- Add semicolon expressions <_not in this version_>
- Make variables in declaration expressions readonly <_no_>
Oct 1, 2014
C# Language Design Notes for Oct 1, 2014
- Assignment to readonly autoprops in constructors (we fleshed out details)
- A new compiler warning to prevent outsiders from implementing your interface? (no, leave this to analyzers)
Oct 15, 2014
C# Language Design Notes for Oct 15, 2014
- nameof operator: spec v5
- String Interpolation for C#
Overview (`meetings/2015/README.md`)
C# Language Design Notes for 2015
Overview of meetings and agendas for 2015
Jan 21, 2015
C# Design Meeting Notes for Jan 21, 2015
This is the first design meeting for the version of C# coming after C# 6. We shall colloquially refer to it as C# 7. The meeting focused on setting the stage for the design process and homing in on major themes and features.
- Design process
- Themes
- Features
Jan 28, 2015
C# Design Meeting Notes for Jan 28, 2015
- Immutable types
- Safe fixed-size buffers
- Pattern matching
- Records
Feb 4, 2015
C# Design Meeting Notes for Feb 4, 2015
- Internal Implementation Only (C# 6 investigation)
- Tuples, records and deconstruction
- Classes with value semantics
Feb 11, 2015
C# Design Meeting Notes for Feb 11, 2015
- Destructible types <*we recognize the problem but do not think this is quite the right solution for C#*>
- Tuples <*we like the proposal, but there are several things to iron out*>
Mar 4, 2015
C# Design Meeting Notes for Mar 4, 2015
InternalImplementationOnlyattribute <*no*>- Should
var x = nameof(x)work? <*no*> - Record types with serialization, data binding, etc. <*keep thinking*>
- "If I had a billion dollars...": nullability <*daunting but worth pursuing*>
Mar 10 and 17, 2015
C# Design Meeting Notes for Mar 10 and 17, 2015
These two meetings looked exclusively at nullable/non-nullable reference types. I've written them up together to add more of the clarity of insight we had when the meetings were over, rather than represent the circuitous path we took to get there.
- Nullable and non-nullable reference types
- Opt-in diagnostics
- Representation
- Potentially useful rules
- Safely dereferencing nullable reference types
- Generating null checks
Mar 18, 2015
C# Design Meeting Notes for Mar 18, 2015
In this meeting we looked over the top C# language feature requests on UserVoice to see which ones are reasonable to push on further in C# 7.
- Non-nullable reference types (already working on them)
- Non-nullary constructor constraints (require CLR support)
- Support for INotifyPropertyChanged (too specific; metaprogramming?)
- GPU and DirectX support (mostly library work; numeric constraints?)
- Extension properties and static members (certainly interesting)
- More code analysis (this is what Roslyn analyzers are for)
- Extension methods in instance members (fair request, small)
- XML comments (Not a language request)
- Unmanaged constraint (requires CLR support)
- Compilable strings (this is what nameof is for)
- Multiple returns (working on it, via tuples)
- ISupportInitialize (too specific; hooks on object initializers?)
- ToNullable (potentially part of nullability support)
- Statement lambdas in expression trees (fair request, big feature!)
- Language support for Lists, Dictionaries and Tuples (Fair; already working on tuples)
A number of these are already on the table.
Mar 24, 2015
C# Design Meeting Notes for Mar 24, 2015
In this meeting we went through a number of the performance and reliability features we have discussed, to get a better reading on which ones have legs. They end up falling roughly into three categories:
- Green: interesting - let's keep looking
- Yellow: there's something there but this is not it
- Red: probably not
As follows:
- ref returns and locals <*green*> (#118)
- readonly locals and parameters <*green*> (#115)
- Method contracts <*green*> (#119)
- Does not return <*green*> (#1226)
- Slicing <*green*> (#120)
- Lambda capture lists <*yellow - maybe attributes on lambdas*> (#117)
- Immutable types <*yellow in current form, but warrants more discussion*> (#159)
- Destructible types <*yellow - fixing deterministic disposal is interesting*> (#161)
- Move <*red*> (#160)
- Exception contracts <*red*>
- Static delegates <*red*>
- Safe fixed-size buffers in structs <*red*> (#126)
Some of these were discussed again, some we just reiterated our position.
Mar 25, 2015 (Design Review)
C# Language Design Review, Mar 25, 2015
Additional Notes
We've recently changed gears a little on the C# design team. In order to keep a high design velocity, part of the design team meets one or two times each week to do detailed design work. Roughly monthly the full design team gets together to review and discuss the direction. This was the first such review.
- Overall direction
- Nullability features
- Performance and reliability features
- Tuples
- Records
- Pattern matching
Apr 1 and Apr 8, 2015
C# Design Meeting Notes for Apr 1 and Apr 8, 2015
Matt Warren wrote a Roslyn analyzer as a low cost way to experiment with nullability semantics. In these two meetings we looked at evolving versions of this analyzer, and what they imply for language design.
The analyzer is here.
Apr 14, 2015
C# Design Meeting Notes for Apr 14, 2015
Bart De Smet visited from the Bing team to discuss their use of Expression Trees, and in particular the consequences of their current shortcomings.
The Expression Tree API today is not able to represent all language features, and the language supports lambda conversions even for a smaller subset than that.
Apr 15, 2015
C# Design Meeting Notes for Apr 15, 2015
In this meeting we looked at nullability and generics. So far we have more challenges than solutions, and while we visited some of them, we don't have an overall approach worked out yet.
- Unconstrained generics
- Overriding annotations
- FirstOrDefault
- TryGet
Apr 22, 2015 (Design Review)
C# Language Design Review, Apr 22, 2015
- Expression tree extension
- Nullable reference types
- Facilitating wire formats
- Bucketing
May 20, 2015
C# Design Meeting Notes for May 20, 2015
- We discussed whether and how to add local functions to C#, with the aim of prototyping the feature in the near future.
May 25, 2015
C# Design Meeting Notes for May 25, 2015
Today we went through a bunch of the proposals on GitHub and triaged them for our list of features.
Jul 1, 2015
C# Design Meeting Notes for Jul 1, 2015
We are gearing up to prototype the tuple feature, and put some stakes in the ground for its initial design. This doesn't mean that the final design will be this way, and some choices are arbitrary. We merely want to get to where a prototype can be shared with a broader group of C# users, so that we can gather feedback and learn from it.
Jul 7, 2015
C# Design Meeting Notes for Jul 7, 2015
With Eric Lippert from Coverity as an honored guest, we looked further at the nullability feature.
- Adding new warnings
- Generics and nullability
Aug 18, 2015
C# Design Meeting Notes for Aug 18, 2015
A summary of the design we (roughly) landed on in #5031 was put out on GitHub as #5032, and this meeting further discussed it.
- Array creation
- Null checking operator
- Generics
Sep 1, 2015
C# Design Meeting Notes for Sep 1, 2015
The meeting focused on design decisions for prototypes. There's no commitment for these decisions to stick through to a final feature; on the contrary the prototypes are being made in order to learn new things and improve the design.
- ref returns and ref locals
- pattern matching
Sep 2, 2015
C# Design Meeting Notes for Sep 2, 2015
- Extending nameof
- What do branches mean
- Supersedes
Sep 8, 2015
C# Design Meeting Notes for Sep 8, 2015
- Check-in on some of our desirable features to see if we have further thoughts
- Start brainstorming on async streams
Oct 7, 2015 (Design Review)
Preparatory Notes on Records and Pattern Matching for Oct 7, 2015 Design Review
Nov 2, 2015 (Design Demo)
Outline of demo at the Nov 2, 2015 MVP summit
Overview (`meetings/2016/README.md`)
C# Language Design Notes for 2016
Overview of meetings and agendas for 2016
Feb 29, 2016
C# Language Design Notes for Feb 29, 2016
Catch up edition (deconstruction and immutable object creation)
Over the past couple of months various design activities took place that weren't documented in design notes. This a summary of the state of design regarding positional deconstruction, with-expressions and object initializers for immutable types.
Apr 6, 2016
C# Language Design Notes for Apr 6, 2016
We settled several open design questions concerning tuples and pattern matching.
Apr 12-22, 2016
C# Language Design Notes for Apr 12-22, 2016
These notes summarize discussions across a series of design meetings in April on several topics related to tuples and patterns:
- Tuple syntax for non-tuple types
- Tuple deconstruction
- Tuple conversions
- Deconstruction and patterns
- Out vars and their scope
May 3-4, 2016
C# Language Design Notes for May 3-4, 2016
This pair of meetings further explored the space around tuple syntax, pattern matching and deconstruction.
- Deconstructors - how to specify them
- Switch conversions - how to deal with them
- Tuple conversions - how to do them
- Tuple-like types - how to construct them
May 10, 2016
C# Language Design Notes for May 10, 2016
In this meeting we took a look at the possibility of adding new kinds of extension members, beyond extension methods.
Jul 12, 2016
C# Language Design Notes for Jul 12, 2016
Several design details pertaining to tuples and deconstruction resolved.
Jul 13, 2016
C# Language Design Notes for Jul 13, 2016
We resolved a number of questions related to tuples and deconstruction, and one around equality of floating point values in pattern matching.
Jul 15, 2016
C# Design Language Notes for Jul 15, 2016
In this meeting we took a look at what the scope rules should be for variables introduced by patterns and out vars.
Aug 24, 2016
C# Design Language Notes for Aug 24, 2016
After a meeting-free period of implementation work on C# 7.0, we had a few issues come up for resolution.
- What does it take to be task-like?
- Scope of expression variables in initializers
Sep 6, 2016
C# Language Design Notes for Sep 6, 2016
- How do we select
Deconstructmethods?
Oct 18, 2016
C# Language Design Meeting Notes, Oct 18, 2016
- Wildcard syntax
- Design "room" between tuples and patterns
- Local functions
- Digit separators
- Throw expressions
- Tuple name mismatch warnings
- Tuple types in
newexpressions
Oct 25-26, 2016
C# Language Design Meeting Notes, Oct 25-26, 2016
- Declaration expressions as a generalizing concept
- Irrefutable patterns and definite assignment
- Allowing tuple-returning deconstructors
- Avoiding accidental reuse of out variables
- Allowing underbar as wildcard character
Nov 1, 2016
C# Language Design Meeting Notes, Nov 1, 2016
- Abstracting over memory with
Span<T>
Nov 15, 2016
C# Language Design Meeting Notes, Nov 15, 2016
- Tuple name warnings
- "Discards"
Nov 16, 2016
C# Language Design Meeting Notes, Nov 16, 2016
- Nullable reference types
Nov 30, 2016
C# Language Design Meeting Notes, Nov 30, 2016
- Scope of while condition expression variables
- Mixed deconstruction
- Unused expression variables
- Declarations in embedded statements
- Not-null pattern
Dec 7 and 14, 2016
C# Language Design Meeting Notes, Dec 7 and 14, 2016
- Expression variables in query expressions
- Irrefutable patterns and reachability
- Do-while loop scope
Overview (`meetings/2017/README.md`)
C# Language Design Notes for 2017
Overview of meetings and agendas for 2017
Jan 10, 2017
C# Language Design Notes for Jan 10, 2017
- Discriminated unions via "closed" types
Jan 11, 2017
C# Language Design Notes for Jan 11, 2017
- Language aspects of compiler intrinsics
Jan 17, 2017
C# Language Design Notes for Jan 17, 2017
- Constant pattern semantics: which equality exactly?
- Extension methods on tuples: should tuple conversions apply?
Jan 18, 2017
C# Language Design Notes for Jan 18, 2017
- Async streams (visit from Oren Novotny)
Feb 21, 2017
C# Language Design Notes for Feb 21, 2017
We triaged some of the championed features, to give them a tentative milestone and ensure they had a champion.
As part of this we revisited potential 7.1 features and pushed several out.
- Implicit interface implementation in Visual Basic (VB 16)
- Delegate and enum constraints (C# X.X)
- Generic attributes (C# X.0 if even practical)
- Replace/original (C# X.0 if and when relevant)
- Bestest betterness (C# 7.X)
- Null-coalescing assignments and awaits (C# 7.X)
- Deconstruction in from and let clauses (C# 7.X)
- Target-typed
newexpressions (C# 7.X) - Mixing fresh and existing variables in deconstruction (C# 7.1)
- Implementing
==and!=on tuple types (C# 7.X) - Declarations in embedded statements (No)
- Field targeted attributes on auto-properties (C# 7.1)
Feb 22, 2017
C# Language Design Notes for Feb 22, 2017
We went over the proposal for ref readonly: Champion "Readonly ref".
Feb 28, 2017
C# Language Design Notes for Feb 28, 2017
- Conditional operator over refs (Yes, but no decision on syntax)
- Async Main (Allow Task-returning Main methods)
Mar 1, 2017
C# Language Design Notes for Mar 1, 2017
- Shapes and extensions (exploration)
- Conditional refs (original design adopted)
Mar 7, 2017
C# Language Design Notes for Mar 7, 2017
We continued to flesh out the designs for features currently considered for C# 7.1.
- Default expressions (design adopted)
- Field target on auto-properties (yes)
- private protected (yes, if things work as expected)
Mar 8, 2017
C# Language Design Notes for Mar 8, 2017
We looked at default interface member implementations.
- Xamarin interop scenario
- Proposal
- Inheritance from interface to class
- Overriding and base calls
- The diamond problem
- Binary compatibility
- Other semantic challenges
Mar 15, 2017
C# Language Design Notes for Mar 8, 2017
Triage of championed features
- JSON literals
- Fixing of captured locals
- Allow shadowing of parameters
- Weak delegates
- Protocols/duck typing/concepts/type classes
- Zero and one element tuples
- Deconstruction in lambda parameters
- Private protected
Mar 21, 2017
C# Language Design Notes for Mar 21, 2017
Discussion of default interface member implementations, based on this guided tour.
- Concerns raised on GitHub and elsewhere
- Inheritance?
- Breaking name lookup on
this - Events
- Modifiers
- Methods
- Properties
- Overrides
- Reabstraction
- Most specific override
- Static non-virtual members
- Accessibility levels
- Existing programs
Mar 28, 2017
C# Language Design Notes for Mar 28, 2017
Design some remaining 7.1 features
- Fix pattern matching restriction with generics
- Better best common type
Mar 29, 2017
C# Language Design Notes for Mar 29, 2017
- Nullable scenarios
Span<T>safety
Apr 5, 2017
C# Language Design Notes for Apr 5, 2017
- Non-virtual members in interfaces
- Inferred tuple element names
- Tuple element names in generic constraints
Apr 11, 2017
C# Language Design Notes for Apr 11, 2017
- Runtime behavior of ambiguous default implementation
Apr 18, 2017
C# Language Design Notes for Apr 18, 2017
- Default implementations for event accessors in interfaces
- Reabstraction in a class of default-implemented member
sealed overridewith default implementations- Use of
sealedkeyword for non-virtual interface members - Implementing inaccessible interface members
- Implicitly implementing non-public interface members
- Not quite implementing a member
- asynchronous
Main
Apr 19, 2017
C# Language Design Notes for Apr 19, 2017
- Improved best common type
- Diamonds with classes
- Structs and default implementations
- Base invocation
May 16, 2017
C# Language Design Notes for May 16, 2017
- Triage C# 7.1 features that didn't make it
- Look at C# 7.2 features
- GitHub procedure around new design notes and proposals
- Triage of championed features
May 17, 2017
C# Language Design Notes for May 17, 2017
More questions about default interface member implementations
- Conflicting override of default implementations
- Can the Main entry point method be in an interface?
- Static constructors in interfaces?
- Virtual properties with private accessors
- Does an override introduce a member?
- Parameter names
May 26, 2017
C# Language Design Notes for May 26, 2017
- Native ints
May 31, 2017
C# Language Design Notes for May 31, 2017
- Default interface members: overriding or implementing?
- Downlevel poisoning of ref readonly in signatures
- Extension methods with ref this and generics
- Default in operators
Jun 13, 2017
C# Language Design Notes for Jun 13, 2017
- Native-size ints
- Native-size floats
Jun 14, 2017
C# Language Design Notes for Jun 14, 2017
Several issues related to default implementations of interface members
- Virtual properties with private accessors
- Requiring interfaces to have a most specific implementation of all members
- Member declaration syntax revisited
- Base calls
Jun 27, 2017
C# Language Design Notes for Jun 27, 2017
- User-defined operators in interfaces
- return/break/continue as expressions
Jun 28, 2017
C# Language Design Notes for Jun 28, 2017
- Tuple name round-tripping between C# 6.0 and C# 7.0
- Deconstruction without
ValueTuple - Non-trailing named arguments
Jul 5, 2017
C# Language Design Notes for Jul 5, 2017
Triage of features in the C# 7.2 milestone. They don't all fit: which should be dropped, which should be kept, and which should be pushed out?
- Static delegates (8.0)
- Native int and IntPtr operators (7.X)
- Field target (anytime)
- Utf8 strings (8.0)
- Slicing (7.X)
- Blittable (7.2)
- Ref structs (7.2)
- Ref readonly (7.2)
- Conditional ref (7.2)
- Ref extensions on structs (7.2)
- Readonly locals and params (X.X)
- ref structs in tuples (don't)
- Overload resolution tie breakers with long tuples (use underlying generics)
Jul 26, 2017
C# Language Design Notes for Jul 24 and 26, 2017
We started putting a series of stakes in the ground for nullable reference types, based on the evolving strawman proposal here. We're doing our first implementation of the feature based on this, and can then refine as we learn things from usage.
- Goals
- Nullable reference types
- Rarely-null members
Aug 7, 2017
C# Language Design Notes for Aug 7, 2017
We continued refining the nullable reference types feature set with the aim of producing a public prototype for experimentation and learning.
- Warnings
- Local variables revisited
- Opt-in mechanisms
Aug 9, 2017
C# Language Design Notes for Aug 9, 2017
We discussed how nullable reference types should work in a number of different situations.
- Default expressions
- Array creation
- Struct fields
- Unconstrained type parameters
Aug 14, 2017
C# Language Design Notes for Aug 14, 2017
We looked at the interaction between generics and nullable reference types
- Unconstrained type parameters
- Nullable constraints
- Conversions between constructed types
Aug 16, 2017
C# Language Design Notes for Aug 16, 2017
- The null-forgiving operator
Aug 23, 2017
C# Language Design Notes for Aug 23, 2017
We discussed various aspects of nullable reference types
- How does flow analysis silence the warning
- Problems with dotted names
- Type inference
- Structs with fields of non-nullable type
Oct 4, 2017
C# Language Design Review, Oct 4, 2017
We looked at nullable reference types with the reviewers, Anders Hejlsberg and Kevin Pilch.
- Overall philosophy
- Switches
- Libraries
- Dotted names
- Type narrowing
- The dammit operator
- Array covariance
- Null warnings
- Special methods
- Conclusion
Oct 11, 2017
C# Language Design Notes for Oct 11, 2017
We looked at the Oct 4 design review feedback for nullable reference types, and considered how to react to it.
- Philosophy
- Switches
- Dotted names
- Type narrowing
- Dammit operator type narrowing
- Dammit operator stickiness
- Array covariance
- Null warnings
Nov 8, 2017
C# Language Design Notes for Nov 8, 2017
We went over the status of the prototype for nullable reference types, to address outstanding questions and make any last minute calls before release.
- Constructors
- Dotted names
- Default expressions
- Should we track null state for nonnullable ref types?
- Inferred types for method type inference
- Inferred nullability in hover tips
- Smaller things not yet done
- Unconstrained generics
- Other issues
Nov 27, 2017
C# Language Design Notes for Nov 27, 2017
We went over the feedback on the nullable reference types prototype, and discussed how to address the top issues that people had found using the feature on their own source code.
- Interacting with existing, unannotated APIs
- Accommodating alternative initialization patterns
- Tracking nullable value types
- Tracking dotted names
- Special methods
- Filtering out nulls
Overview (`meetings/2018/README.md`)
C# Language Design Notes for 2018
Overview of meetings and agendas for 2018
Jan 3, 2018
C# Language Design Notes for Jan 3, 2018
- Scoping of expression variables in constructor initializer
- Scoping of expression variables in field initializer
- Scoping of expression variables in query clauses
- Caller argument expression attribute
- Other caller attributes
- New constraints
Jan 10, 2018
C# Language Design Notes for Jan 10, 2018
- Ranges and endpoint types
Jan 18, 2018
C# Language Design Notes for Jan 18, 2018
We discussed the range operator in C# and the underlying types for it.
- Scope of the feature
- Range types
- Type name
- Open-ended ranges
- Empty ranges
- Enumerability
- Language questions
Jan 22, 2018
C# Language Design Notes for Jan 22, 2018
We continued to discuss the range operator in C# and the underlying types for it.
- Inclusive or exclusive?
- Natural type of range expressions
- Start/length notation
Jan 24, 2018
C# Language Design Notes for Jan 24, 2018
- Ref reassignment
- New constraints
- Target typed stackalloc initializers
- Deconstruct as ref extension method
July 9, 2018
C# Language Design Notes for July 9, 2018
using varfeature- Overview
- Tuple deconstruction grammar form
using expr;grammar form- Flow control safety
- Pattern-based Dispose in the
usingstatement - Relax Multiline interpolated string syntax (
$@)
July 11, 2018
C# Language Design Notes for July 11, 2018
- Controlling nullable reference types with feature flags
- Interaction with NonNullTypesAttribute
- Feature flag and 'warning waves'
- How 'oblivious' null types interact with generics
- Nullable and interface generic constraints
July 16, 2018
C# Language Design Notes for July 16, 2018
- Null-coalescing assignment
- User-defined operators
- Unconstrained type parameters
- Throw expression the right-hand side
- Nullable await
- Nullable pointer access
- Non-nullable reference types feature flag follow-up
August 20, 2018
C# Language Design Notes for August 20, 2018
- Remaining questions on suppression operator (and possibly cast)
- Does a dereference update the null-state?
- Null contract attributes
- Expanding the feature
- Is T? where T : class? allowed or meaningful?
- Typing judgments containing oblivious types
- Unconstrained T in List<T> then
FirstOrDefault(). What attribute to annotateFirstOrDefault?
August 22, 2018
C# Language Design Notes for August 22, 2018
- Target-typed new
- Clarification on constraints with nullable reference types enabled
September 5, 2018
C# Language Design Notes for September 5, 2018
- Index operator: is it a unary operator?
- Compiler intrinsics
September 10, 2018
C# Language Design Notes for September 10, 2018
- Nullability of constraints in inheritance and interface implementation
- Static local functions
Sep 19, 2018
C# Language Design Notes for September 19, 2018
Triage:
- XML doc comment features
- New
foreachpattern usingLengthand indexer - Object initializers for
readonlymembers readonlystruct methodsparams Span<T>- Nullable reference type features on
Nullable<T>
Sep 24, 2018
C# Language Design Notes for September 24, 2018
Combined C#/F# LDM
- What new C# features are going to require work to get F# support?
- How can the design of C# features play well with the broader .NET environment?
Sep 26, 2018
C# Language Design Notes for September 26, 2018
- Warning waves
Oct 1, 2018
C# Language Design Notes for Oct 1, 2018
- Nullable type inference
- Type parameters and nullability context
Oct 3, 2018
C# Language Design Notes for Oct 3, 2018
- How is the nullable context expressed?
- Async streams - which interface shape?
Oct 10, 2018
C# Language Design Notes for Oct 10, 2018
- Pattern matching open questions
Oct 15, 2018
C# Language Design Notes for Oct 15, 2018
- Readonly methods in structs
- Intrinsics update with function pointers
- Finalize syntax for async-streams. Per last notes, the current tentative syntax is
foreach await (var x in ...) ....
Oct 17, 2018
C# Language Design Notes for Oct 17, 2018
- Open issues with default interface methods
- target typed new with default constructors on structs
Oct 22, 2018
C# Language Design Notes for Oct 22, 2018
Discussion of records proposals:
Oct 24, 2018
- Adding Nullable Reference Type features to Nullable Value Types
- Open issues with pattern matching
Oct 29, 2018
C# Language Design Notes for Oct 29, 2018
Oct 31, 2018
C# Language Design Notes for Oct 31, 2018
- Design review
Nov 5, 2018
C# Language Design Notes for Nov 5, 2018
- Where can #nullable go?
- Open issues with pattern matching
Nov 14, 2018
C# Language Design Notes for Nov 14, 2018
- Base call syntax for default interface implementations
- Switch exhaustiveness and null
Nov 28, 2018
C# Language Design Notes for Nov 28, 2018
- Are nullable annotations part of array specifiers?
- Cancellation of async-streams
Dec 3, 2018
C# Language Design Notes for Dec 3, 2018
usingdeclaration open issues- Return type of
Rangeindexer on array and FX types
Dec 5, 2018
C# Language Design Notes for Dec 5, 2018
- Tracked nullable states, their correspondence to source and the rules they follow in flow analysis
Dec 12, 2018
C# Language Design Notes for Dec 12, 2018
- Async-streams misc. questions
- Compat issue with Dispose pattern in
foreach
Upcoming meetings
Dec 17, 2018
- Review the Nullable Reference Types Specification
Recurring topics
- Triage championed features
- Triage milestones
- Design review
Overview (`meetings/2019/README.md`)
C# Language Design Notes for 2019
Overview of meetings and agendas for 2019
Dec 18, 2019
C# Language Design Notes for Dec 18, 2019
- Pure null checks
var?
Dec 16, 2019
C# Language Design Notes for Dec 16, 2019
- Switch Expression as a Statement Expression (continued) (Neal, Fred)
- Triage
Dec 11, 2019
C# Language Design Notes for Dec 11, 2019
- Design review feedback
Dec 9, 2019
(not yet transcribed)
- https://github.com/dotnet/csharplang/issues/2850 Proposed changes for pattern-matching (continued) (Neal)
- https://github.com/dotnet/csharplang/issues/2860 Switch Expression as a Statement Expression (Neal)
Dec 4, 2019 (Design Review)
(not yet transcribed)
Nov 25, 2019
C# Language Design Notes for Nov 25, 2019
- Revisit unconstrained
T?(Mads, Jared)
Nov 20, 2019
(not yet transcribed)
- https://github.com/dotnet/csharplang/issues/2911 Utf8 String Literals (Neal)
- https://github.com/dotnet/csharplang/issues/2850 Proposed changes for pattern-matching (continued) (Neal)
Nov 18, 2019
C# Language Design Notes for Nov. 18, 2019
- Proposed changes for pattern-matching
Nov 13, 2019
C# Language Design Notes for Nov 13, 2019
- Discriminated unions
- Improve analysis of
[MaybeNull]Tvalues
Nov 11, 2019
C# Language Design Notes for Nov 11, 2019
- Confirm removal of warning calling a method that returns
[MaybeNull]T - Allow interpolated string constant
- Enhancing the Common Type Specification
- Type pattern
- Simple name binding with target type
Oct 30, 2019
C# Language Design Notes for Oct 30, 2019
- Function Pointer syntax
- Enhancing the Common Type Specification
Oct 28, 2019
C# Language Design Notes for Oct 28, 2019
- Discard parameters in lambdas and other methods
- Enhancing the common type algorithm
Oct 23, 2019
C# Language Design Notes for Oct 23, 2019
- New primitive types
https://github.com/dotnet/csharplang/issues/435
Oct 21, 2019
C# Language Design Notes for Oct 21, 2019
- Records
- Init-only members
- Static lambdas
Sep 18, 2019
C# Language Design Notes for Sep 18, 2019
Triage:
Proposals with complete designs:
- https://github.com/dotnet/csharplang/issues/1888 Champion "Permit attributes on local functions"
- https://github.com/dotnet/csharplang/issues/100 Champion "Target-typed new expression"
Target typing and best-common-type features:
- https://github.com/dotnet/csharplang/issues/2473 Proposal: Target typed null coalescing (??) expression
- https://github.com/dotnet/csharplang/issues/2460 Champion: target-typed conditional expression
- https://github.com/dotnet/csharplang/issues/881 Permit ternary operation with int? and double operands
- https://github.com/dotnet/csharplang/issues/33 Champion "Nullable-enhanced common type"
Sep 16, 2019
C# Language Design Notes for Sep 16, 2019
- Support for Utf8 strings
- Triage remaining features out of the 8.X milestone
Sep 11, 2019
C# Language Design Notes for Sep 11, 2019
- Close https://github.com/dotnet/roslyn/issues/37313
- Triage new proposed 9.0 features
- Finish triaging away 8.X milestone
Sep 4, 2019
C# Language Design Notes for Sep 4, 2019
- AllowNull on properties https://github.com/dotnet/roslyn/issues/37313
Aug 28, 2019
C# Language Design Notes for Aug 28, 2019
- Triage language features
Jul 22, 2019
C# Language Design Notes for July 22, 2019
- Discuss the new records proposal
Jul 17, 2019
C# Language Design Notes for July 17, 2019
Triage, see https://github.com/dotnet/csharplang/projects/4
- Triage championed features https://github.com/dotnet/csharplang/projects/4#column-4649189
- Triage milestones
Jul 10, 2019
C# Language Design Notes for July 10, 2019
- Empty switch statement
[DoesNotReturn]attribute- Revisiting the
param!null-checking feature
May 15, 2019
C# Language Design Notes for May 15, 2019
- Close on nullable attributes (Mads and Steve)
May 13, 2019
C# Language Design Notes for May 13, 2019
- Close on desired rules for warning suppressions and
#nullableinteracting
Apr 29, 2019
C# Language Design Notes for Apr 29, 2019
- Default interface implementations and
base()calls - Async iterator cancellation
- Attributes on local functions
Apr 24, 2019
C# Language Design Notes for Apr 24, 2019
MaybeNull and related nullable reference type attributes
Apr 22, 2019
C# Language Design Notes for Apr 22, 2019
- Inferred nullable state from a finally block
- Implied constraint for a type parameter of a partial?
- Target-typed switch expression
- DefaultCancellationAttribute and overriding/hiding/interface implementation
Apr 15, 2019
C# Language Design Notes for Apr 15, 2019
- CancellationToken in iterators
- Implied nullable constraints in nullable disabled code
- Inheriting constraints in nullable disabled code
- Declarations with constraints declared in #nullable disabled code
- Result type of
??=expression - Use annotation context to compute the annotations?
- Follow-up decisions for pattern-based Index/Range
Apr 3, 2019
C# Language Design Notes for Apr 3, 2019
- Ambiguous implementations/overrides with generic methods and NRTs
- NRT and
dynamic
Apr 1, 2019
C# Language Design Notes for Apr 1, 2019
Pattern-based Index/Range translation
Default interface implementations: Is object.MemberwiseClone() accessible in
an interface?
Mar 27, 2019
C# Language Design Notes for Mar 27, 2019
Switch expression syntax
Default interface implementations
Reabstraction
Explicit interface abstract overrides in classes
object.MemberwiseClone()static int P {get; set}semanticspartialon interface methods
?on unconstrained generic paramT
Mar 25, 2019
C# Design Review Notes for Mar 25, 2019
We brought in the design review team to look at some of our recent and open decisions in C# LDM.
- Nullable reference types: shipping annotations
- Pattern-based indexing with
IndexandRange - Cancellation tokens in async streams
Mar 19, 2019
C# Language Design Notes for March 19, 2019
We held a live LDM during the MVP summit with some Q&A about C# 8 and the future
Topics:
- Records
- "Extension interfaces"/roles
- Macros
- IAsyncEnumerable
- "Partially automatic" properties
- More integration with reactive extensions
Mar 13, 2019
C# Language Design Notes for March 13, 2019
- Interface "reabstraction" with default interface implementations
- Precedence of the switch expression
orkeyword in patterns- "Pure" null tests and the switch statement/expression
Mar 6, 2019
C# Language Design Notes for March 6th, 2019
- Pure checks in the switch expression
- Nullable analysis of unreachable code
- Warnings about nullability on expressions with errors
- Handling of type parameters that cannot be annotated
- Should anonymous type fields have top-level nullability?
- Element-wise analysis of tuple conversions
Mar 4, 2019
C# Language Design Notes for March 4, 2019
- Nullable user studies
- Interpolated string and string.Format optimizations
Feb 27, 2019
C# Language Design Notes for Feb 27, 2019
- Allow ObsoleteAttribute on property accessors
- More Default Interface Member questions
Feb 25, 2019
C# Language Design Notes for Feb 25, 2019
- Open issues in default interface methods (https://github.com/dotnet/csharplang/issues/406).
- Base calls
- We currently have open issues around
protected,internal, reabstraction, andstaticfields among others.
Feb 20, 2019
C# Language Design Notes for Feb 20, 2019
- Nullable Reference Types: Open LDM Issues https://github.com/dotnet/csharplang/issues/2201
Feb 13, 2019
C# Language Design Notes for Feb 13, 2019
- Nullable Reference Types: Open LDM Issues https://github.com/dotnet/csharplang/issues/2201
Jan 23, 2019
C# Language Design Notes for Jan 23, 2019
Function pointers (Updated proposal)
Jan 16, 2019
C# Language Design Notes for Jan 16, 2019
- Shadowing in lambdas
- Pattern-based disposal in
await foreach
Jan 14, 2019
C# Language Design Notes for Jan 14, 2019
- Generating null-check for
parameter!
https://github.com/dotnet/csharplang/pull/2144
Jan 9, 2019
C# Language Design Notes for Jan 9, 2019
- GetAsyncEnumerator signature
- Ambiguities in nullable array type syntax
- Recursive Patterns Open Language Issues https://github.com/dotnet/csharplang/issues/2095
Jan 7, 2019
C# Language Design Notes for Jan 7, 2019
Nullable:
- Variance in overriding/interface implementation
- Breaking change in parsing array specifiers
Overview (`meetings/2020/README.md`)
C# Language Design Notes for 2020
Overview of meetings and agendas for 2020
Dec 16, 2020
C# Language Design Notes for December 16th, 2020
- List patterns
- Definite assignment changes
Dec 14, 2020
C# Language Design Notes for December 14th, 2020
- List patterns
Dec 7, 2020
C# Language Design Notes for December 7th, 2020
- Required Properties
Dec 2, 2020
C# Language Design Notes for December 2nd, 2020
- Partner scenarios in roles and extensions
Nov 16, 2020
C# Language Design Notes for November 16th, 2020
- Triage
Nov 11, 2020
C# Language Design Notes for November 11th, 2020
- IsRecord in metadata
- Triage
Nov 4, 2020
C# Language Design Notes for November 4th, 2020
- Nullable parameter defaults
- Argument state after call for AllowNull parameters
Oct 26, 2020
C# Language Design Notes for October 26st, 2020
- Pointer types in records
- Triage
Oct 21, 2020
C# Language Design Notes for October 21st, 2020
- Primary Constructors
- Direct Parameter Constructors
Oct 14, 2020
C# Language Design Notes for October 14th, 2020
- Triage
- Milestone Simplification
Oct 12, 2020
C# Language Design Notes for October 12th, 2020
- General improvements to the
structexperience (continued)
Oct 7, 2020
C# Language Design Notes for October 7th, 2020
record structsyntaxdatamembers reduxReadOnlySpan<char>patterns
Oct 5, 2020
C# Language Design Notes for October 5th, 2020
record structprimary constructor defaults- Changing the member type of a primary constructor parameter
datamembers
Sep 30, 2020
C# Language Design Notes for September 30th, 2020
record structsstructequalitywithexpressions- Primary constructors and
dataproperties
Sep 28, 2020
C# Language Design Notes for September 28th, 2020
- Warning on
double.NaN - Triage
Sep 23, 2020
C# Language Design Notes for September 23rd, 2020
- General improvements to the
structexperience
Sep 16, 2020
C# Language Design Notes for September 16th, 2020
- Required Properties
- Triage
Sep 14, 2020
C# Language Design Notes for September 14th, 2020
- Partial method signature matching
- Null-conditional handling of the nullable suppression operator
- Annotating IEnumerable.Cast
- Nullability warnings in user-written record code
- Tuple deconstruction mixed assignment and declaration
Sep 9, 2020
C# Language Design Notes for September 9th, 2020
- Triage issues still in C# 9.0 candidate
- Triage issues in C# 10.0 candidate
Aug 24, 2020
C# Language Design Notes for August 24th, 2020
- Warnings on types named
record basecalls on parameterlessrecords- Omitting unnecessary synthesized
recordmembers recordToStringbehavior review- Behavior of trailing commas
- Handling stack overflows
- Should we omit the implementation of
ToStringonabstractrecords - Should we call
ToStringprior toStringBuilder.Appendon value types - Should we try and avoid the double-space in an empty record
- Should we try and make the typename header print more economic
- Reference equality short circuiting
Jul 27, 2020
C# Language Design Notes for July 27th, 2020
- Improved nullable analysis in constructors (Rikki)
- Equality operators (
==and!=) in records (Fred) .ToString()orGetDebuggerDisplay()on records? (Julien)- Restore W-warning to
T t = default;for genericT, now you can writeT?? (Julien)
Jul 20, 2020
C# Language Design Notes for July 20th, 2020
- struct private fields in definite assignment (Neal/Julien)
- Finish Triage
- Records-related features to pick up in the next version of C# (Mads)
Jul 13, 2020
C# Language Design Notes for July 13th, 2020
- Triage open issues
Jul 6, 2020
C# Language Design Notes for July 6, 2020
- Repeat Attributes in Partial Members (Rikki)
sealedondatamembers- Required properties (Fred)
Jul 1, 2020
C# Language Design Notes for July 1, 2020
- Non-defaultable struct types (Sam, Chuck)
- Confirm unspeakable
Clonemethod and long-term implications (Jared/Julien)
Jun 29, 2020
C# Language Design Notes for June 29, 2020
- Static interface members (Miguel, Aaron, Mads, Carol)
Jun 24, 2020
C# Language Design Notes for June 24, 2020
- Parameter null checking: finalize syntax
- https://github.com/dotnet/csharplang/issues/3275 Variance on static interface members (Aleksey)
- Function pointer question (Fred)
Jun 22, 2020
C# Language Design Notes for June 22, 2020
Data properties
Clarifying what's supported in records for C# 9
Structs
Inheritance with records and classes
Jun 17, 2020
C# Language Design Notes for June 17, 2020
- Null-suppression & null-conditional operator
parameter!syntaxT??
Jun 15, 2020
C# Language Design Notes for June 15, 2020
Record:
modreqfor init accessorsInitializing
readonlyfields in same typeinitmethodsEquality dispatch
Confirming some previous design decisions
IEnumerable.Current
Jun 10, 2020
C# Language Design Notes for June 10, 2020
- https://github.com/dotnet/csharplang/issues/1711 Roles and extensions
Jun 1, 2020
C# Language Design Notes for June 1, 2020
Records:
1. Base call syntax
2. Synthesizing positional record members and assignments
3. Record equality through inheritance
May 27, 2020
C# Language Design Notes for May 27, 2020
Record syntax
1. Record structs?
2. Record syntax/keyword
3. Details on property shorthand syntax
May 11, 2020
C# Language Design Notes for May 11, 2020
Records
May 6, 2020
C# Language Design Notes for May 6, 2020
- Target-typing ?: when the natural type isn't convertible to the target type.
- Allow
if (x is not string y)pattern. - Open issues in extension
GetEnumerator - Args in top-level programs
May 4, 2020
C# Language Design Notes for May 4, 2020
- Reviewing design review feedback
April 27, 2020
C# Language Design Notes for April 27, 2020
Records: positional & primary constructors
April 20, 2020
C# Language Design Notes for April 20, 2020
Records: Factories
April 15, 2020
C# Language Design Notes for April 15, 2020
- Non-void and non-private partial methods
- Top-level programs
April 13. 2020
C# Language Design Notes for April 13, 2020
- Roadmap for records
- Init-only properties
April 8, 2020
C# Language Design Notes for April 8, 2020
e is dynamicpure null check- Target typing
?: - Inferred type of an
orpattern - Module initializers
April 6, 2020
C# Language Design Notes for April 6, 2020
- Record Monday: Init-only members
April 1, 2020
C# Language Design Notes for April 1, 2020
Function pointer design adjustments
fieldkeyword in properties
March 30, 2020
- Record Monday
C# Language Design Notes for March 30, 2020
March 25, 2020
C# Language Design Notes for March 25, 2020
Open issues with native int
Open issues with target-typed new
March 23, 2020
C# Language Design Notes for March 23, 2020
- Triage
- Builder-based records
March 9, 2020
C# Language Design Notes for March 9, 2020
Simple programs
Records
Feb 26, 2020
C# Language Design Notes for Feb. 26, 2020
Design Review
Feb 24
C# Language Design Notes for Feb. 24, 2020
Taking another look at "nominal" records
Feb 19
C# Language Design Notes for Feb. 19, 2020
State-based value equality
Feb 12
C# Language Design Notes for Feb. 12, 2020
Records
Feb 10
C# Language Design Notes for Feb. 10, 2020
Records
Feb 5
C# Language Design Notes for Feb. 5, 2020
- Nullability of dependent calls (Chuck, Julien)
- https://github.com/dotnet/csharplang/issues/3137 Records as individual features (Mads)
Feb 3
C# Language Design Notes for Feb. 3, 2020
Value Equality
Jan 29, 2020
C# Language Design Notes for Jan. 29, 2020
Records: "With-ers"
Jan 22, 2020
C# Language Design Notes for Jan 22, 2020
- Top-level statements and functions
- Expression Blocks
Jan 15, 2020
C# Language Design Notes for Jan 15, 2020
Records
- "programming with data"
- Decomposing subfeatures of records
Jan 8, 2020
C# Language Design Notes for Jan 8, 2020
- Unconstrained type parameter annotation
- Covariant returns
Jan 6, 2020
C# Language Design Notes for Jan 6, 2020
- Use attribute info inside method bodies
- Making Task-like types covariant for nullability
- Casting to non-nullable reference type
- Triage
Overview (`meetings/2021/README.md`)
C# Language Design Notes for 2021
Overview of meetings and agendas for 2021
Dec 15, 2021
C# Language Design Notes for December 15th, 2021
- Required parsing
- Warnings for parameterless struct constructor
Dec 1, 2021
C# Language Design Notes for December 1st, 2021
- Roles and extensions
Nov 10, 2021
C# Language Design Notes for November 10th, 2021
- Self types
Nov 3, 2021
C# Language Design Notes for November 3rd, 2021
- Name shadowing in local functions
params Span<T>
Nov 1, 2021
C# Language Design Notes for November 1st, 2021
- Order of evaluation for Index and Range
- Collection literals
Oct 27, 2021
C# Language Design Notes for October 27th, 2021
- UTF-8 String Literals
- Readonly modifiers for primary constructors
Oct 25, 2021
C# Language Design Notes for October 25th, 2021
- Required members
- Delegate type argument improvements
Oct 20, 2021
C# Language Design Notes for October 20th, 2021
- Open questions in list patterns
- Types that define both Length and Count
- Slices that return null
- Primary constructors
Oct 13, 2021
C# Language Design Notes for October 13th, 2021
- Revisiting DoesNotReturn
- Warning on lowercase type names
- Length pattern backcompat
Sep 22, 2021
C# Language Design Notes for September 22nd, 2021
- Open questions in list patterns
- Breaking change confirmation
- Positional patterns on ITuple
- Slicing rules
- Slice syntax recommendations
- Other list pattern features
- Nested members in
withand object creation - CallerIdentityAttribute
- Attributes on
Mainfor top level programs
Sep 20, 2021
C# Language Design Notes for September 20th, 2021
- Lambda breaking changes
- Newlines in non-verbatim interpolated strings
- Object initializer event hookup
- Type alias improvements
Sep 15, 2021
C# Language Design Notes for September 15th, 2021
- Feedback from the C# standardization committee
- Permit pattern variables under disjunctive patterns
Sep 13, 2021
C# Language Design Notes for September 13th, 2021
- Feedback on static abstracts in interfaces
Sep 1, 2021
C# Language Design Notes for September 1st, 2021
- Lambda expression conversions to
Delegate - C# 11 Initialization Triage
- Required properties
- Primary constructors
- Immutable collection initializers
Aug 30, 2021
C# Language Design Notes for August 30th, 2021
- C# 11 Initial Triage
- Generic attributes
- List patterns
- Static abstracts in interfaces
- Declarations under
orpatterns - Records and initialization
- Discriminated unions
- Params
Span<T> - Statements as expressions
- Expression trees
- Type system extensions
Aug 25, 2021
C# Language Design Notes for August 25th, 2021
- Interpolated string handler user-defined conversion recommendations
- Interpolated string handler additive expressions
Aug 23, 2021
C# Language Design Notes for August 23rd, 2021
- Nullability differences in partial type base clauses
- Top-level statements default type accessibility
- Lambda expression and method group type inference issues
- Better function member now ambiguous in some cases
- Conversions from method group to
object
- Interpolated string betterness in older language versions
Jul 26, 2021
C# Language Design Notes for July 26th, 2021
- Lambda conversion to System.Delegate
- Direct invocation of lambdas
- Speakable names for top-level statements
Jul 19, 2021
C# Language Design Notes for July 19th, 2021
- Global using scoping revisited
Jul 12, 2021
C# Language Design Notes for July 12th, 2021
- C# 10 Feature Status
- Speakable names for top-level statements
Jun 21, 2021
C# Language Design Notes for June 21st, 2021
- Open questions for lambda return types
- List patterns in recursive patterns
- Open questions in async method builder
- Email Decision: Duplicate global using warnings
Jun 14, 2021
C# Language Design Notes for June 14th, 2021
- Open questions in CallerArgumentExpressionAttribute
- List pattern syntax
Jun 7, 2021
C# Language Design Notes for June 7th, 2021
- Runtime checks for parameterless struct constructors
- List patterns
a. Exhaustiveness
b. Length pattern feedback
Jun 2, 2021
C# Language Design Notes for June 2nd, 2021
- Enhanced #line directives
- Lambda return type parsing
- Records with circular references
May 26, 2021
C# Language Design Notes for May 26th, 2021
- Open questions in list patterns
May 19, 2021
C# Language Design Notes for May 19th, 2021
- Triage
- Checked operators
- Relaxing shift operator requirements
- Unsigned right shift operator
- Opaque parameters
- Column mapping directive
- Only allow lexical keywords
- Allow nullable types in declaration patterns
- Protected interface methods
May 17, 2021
C# Language Design Notes for May 17th, 2021
- Raw string literals
May 12, 2021
C# Language Design Notes for May 12th, 2021
- Experimental attribute
- Simple C# programs
May 10, 2021
C# Language Design Notes for May 10th, 2021
- Lambda improvements
May 3, 2021
C# Language Design Notes for May 3rd, 2021
- Improved interpolated strings
- Open questions in record structs
Apr 28, 2021
C# Language Design Notes for April 28th, 2021
- Open questions in record and parameterless structs
- Improved interpolated strings
Apr 21, 2021
C# Language Design Notes for April 21st, 2021
- Inferred types for lambdas and method groups
- Improved interpolated strings
Apr 19, 2021
C# Language Design Notes for April 19th, 2021
- Improved interpolated strings
Apr 14, 2021
C# Language Design Notes for April 14th, 2021
- Shadowing in record types
fieldkeyword- Improved interpolated strings
Apr 12, 2021
C# Language Design Notes for April 12th, 2021
- List patterns
- Lambda improvements
Apr 7, 2021
C# Language Design Notes for April 7th, 2021
- MVP session
Apr 5, 2021
C# Language Design Notes for April 5th, 2021
- Interpolated string improvements
- Abstract statics in interfaces
Mar 29, 2021
C# Language Design Notes for March 29th, 2021
- Parameterless struct constructors
- AsyncMethodBuilder
Mar 24, 2021
C# Language Design Notes for March 24th, 2021
- Improved interpolated strings
fieldkeyword
Mar 22, 2021
- Design review (No notes published)
Mar 15, 2021
C# Language Design Notes for March 15th, 2021
- Interpolated string improvements
- Global usings
Mar 10, 2021
C# Language Design Notes for March 10th, 2021
- Property improvements
fieldkeyword- Property scoped fields
- Parameterless struct constructors
Mar 3, 2021
C# Language Design Notes for March 3rd, 2021
- Natural type for lambdas
- Attributes
- Return types
- Natural delegate types
- Required members
Mar 1, 2021
C# Language Design Notes for March 1st, 2021
- Async method builder override
- Async exception filters
- Interpolated string improvements
Feb 24, 2021
C# Language Design Notes for February 24th, 2021
- Static abstract members in interfaces
Feb 22, 2021
C# Language Design Notes for February 22nd, 2021
- Global
usings usingalias improvements
Feb 10, 2021
C# Language Design Notes for February 10th, 2021
- Follow up on record equality
- Namespace directives in top-level programs
- Global usings
- Triage
- Nominal And Collection Deconstruction
- Sealed record ToString
usingaliases for tuple syntax- Raw string literals
- Allow
varvariables to be used in anameofin their initializers - First-class native integer support
- Extended property patterns
Feb 8, 2021
C# Language Design Notes for February 8th, 2021
- Virtual statics in interfaces
- Syntax Clashes
- Self-applicability as a constraint
- Relaxed operator operand types
- Constructors
Feb 3, 2021
C# Language Design Notes for February 3rd, 2021
- List patterns on
IEnumerable - Global usings
Jan 27, 2021
C# Language Design Notes for January 27th, 2021
- Init-only access on conversion on
this - Record structs
- Copy constructors and Clone methods
PrintMembers- Implemented equality algorithms
- Field initializers
- GetHashcode determinism
Jan 13, 2021
C# Language Design Notes for January 13th, 2021
- Global usings
- File-scoped namespaces
Jan 11, 2021
C# Language Design Notes for January 11th, 2021
- Required properties simple form
Jan 6, 2021
C# Language Design Notes for January 5th, 2021
- File scoped namespaces
Overview (`meetings/2022/README.md`)
C# Language Design Notes for 2022
Overview of meetings and agendas for 2022
Wed Dec 14, 2022
C# Language Design Meeting for December 14th, 2022
- Breaking change for raw string literals
- Program as internal by default
Wed Nov 30, 2022
C# Language Design Meeting for November 30th, 2022
- Revise
MemberNotNullforrequired params Span<T>
Wed Nov 2, 2022
C# Language Design Meeting for November 2nd, 2022
- Partial Properties
- Default parameter values in lambdas
Wed Oct 26, 2022
C# Language Design Meeting for October 26th, 2022
- Null-conditional assignment
Wed Oct 19, 2022
C# Language Design Meeting for October 19th, 2022
- Open questions in list patterns on
IEnumerable- Allowing patterns after slices
- Allowing slicing to capture
Mon Oct 17, 2022
C# Language Design Meeting for October 17th, 2022
- Primary Constructors
- Permit variable declarations under disjunctive patterns
Wed Oct 12, 2022
C# Language Design Meeting for October 12th, 2022
- Keywordness of
field
Mon Oct 10, 2022
C# Language Design Meeting for October 10th, 2022
- Working set triage
- Static classes implementing interfaces
- Null-conditional assignment
- Lambda default parameters
- Working groups
paramssupport for lambda default parameters- Conclusion
Wed Oct 5, 2022
C# Language Design Meeting for October 5th, 2022
- Review of
reffieldsRefSafetyRulesAttribute- Return-only scope
Wed Sep 28, 2022
C# Language Design Meeting for September 28th, 2022
- Working set triage
- Discriminated Unions
- Collection literals
- Nullability improvements
- Ungrouped
Mon Sep 26, 2022
C# Language Design Meeting for September 26th, 2022
- Working set triage
- Roles & Extensions
- Discriminated Unions
- Bridging statements and expressions
- Construction improvements
ref structimprovementsparamsimprovements- Ungrouped
Wed Sep 21, 2022
C# Language Design Meeting for September 21st, 2022
- Unchampioned issue triage
- Track subtype exhaustiveness for classes with only private constructors
- ReadOnlySpan initialization from static data
- Embedded Language Indicators for raw string literals
- Implicit Parameters
- Unsafer Unsafeness
- Conclusion
Wed Aug 31, 2022
C# Language Design Meeting for August 31st, 2022
- Short term work triage
- Partial properties
- Using aliases for any type
- Null-conditional assignment
await?params IEnumerable- Discriminated Unions
- Roles
pragma warning enable- Ignored directives support
- Primary constructors
- Switch expression as a statement
Wed Aug 24, 2022
C# Language Design Meeting for August 24th, 2022
- C# feature triage
Wed Aug 10, 2022
C# Language Design Meeting for August 10th, 2022
requiredproperty default nullability
Wed Aug 3, 2022
C# Language Design Meeting for August 3rd, 2022
reffields specification updates
Wed Jul 27, 2022
C# Language Design Meeting for July 27th, 2022
scopedfor local declarations
Wed Jul 13, 2022
C# Language Design Meeting for July 13th, 2022
- Lambda default parameters
Jun 29, 2022
C# Language Design Meeting for June 29th, 2022
- UTF-8 literal concatenation operator
Jun 6, 2022
C# Language Design Meeting for June 6, 2022
- Open issues for
reffields - Open issues for static virtual members
- Concatenation of Utf8 literals
May 23, 2022
C# Language Design Meeting for May 23rd, 2022
- Open issues for
reffields
May 11, 2022
C# Language Design Meeting for May 11th, 2022
- Inconsistency around accessibility checks for interface implementations
ref readonlymethod parameters- Pattern matching with UTF-8 String Literals
May 9, 2022
C# Language Design Meeting for May 9th, 2022
- Numeric IntPtr
- Ref readonly parameters
May 2, 2022
C# Language Design Meeting for May 2nd, 2022
- Effect of
SetsRequiredMemberson nullable analysis fieldquestions- Partial overrides of virtual properties
- Definite assignment of manually implemented setters
Apr 27, 2022
C# Language Design Meeting for April 27th, 2022
- Default parameter values in lambdas
- Null-conditional assignment
Apr 25, 2022
C# Language Design Meeting for April 25th, 2022
ref readonlymethod parameters- Inconsistencies around accessibility checks for interface implementations
Apr 18, 2022
C# Language Design Meeting for April 18th, 2022
- Issues with Utf8 string literals
- Ref and ref struct scoping modifiers
Apr 13, 2022
C# Language Design Meeting for April 13th, 2022
- Parameter null checking
- File-scoped types
Apr 11, 2022
C# Language Design Meeting for April 11th, 2022
- Relax restrictions on braces on raw interpolated strings
- Self-type stopgap attribute
Apr 6, 2022
C# Language Design Meeting for April 6th, 2022
- Unresolved questions for static virtual members
- Parameter null checking
Mar 30, 2022
C# Language Design Meeting for March 30th, 2022
- Definite assignment in struct constructors calling
: this() file privateaccessibility
Mar 28, 2022
C# Language Design Meeting for March 28th, 2022
- Variable declarations under disjunctive patterns
- Type hole in static abstracts
- Self types
Mar 23, 2022
C# Language Design Meeting for March 23rd, 2022
- Open questions in required members
- Emitting
SetsRequiredMembersfor record copy constructors - Should
SetsRequiredMemberssuppress errors? - Unsettable members
- Ref returning properties
- Obsolete members
- Emitting
Mar 21, 2022
C# Language Design Meeting for March 21st, 2022
- file private visibility
- Open question in semi-auto properties
- Open question in required members
Mar 14, 2022
C# Language Design Meeting for March 14th, 2022
- file private visibility
Mar 9, 2022
C# Language Design Meeting for March 9th, 2022
- Ambiguity of
..in collection expressions mainattributesnameof(param)
Mar 7, 2022
- Design review. No published notes.
Mar 2, 2022
C# Language Design Meeting for March 2nd, 2022
- Open questions in
field- Initializers
- Property assignment in structs
Feb 28, 2022
C# Language Design Meeting for February 28th, 2022
- Ref fields
- Encoding strategy
- Keywords vs Attributes
- Breaking existing lifetime rules
Feb 23, 2022
C# Language Design Meeting for February 23rd, 2022
- Pattern matching over
Span<char> - Checked operators
Feb 16, 2022
C# Language Design Meeting for February 16th, 2022
- Open questions in
field - Triage
- User-defined positional patterns
- Delegate type arguments improvements
- Practical existential types for interfaces
- Static abstract interfaces and static classes
Feb 14, 2022
C# Language Design Meeting for February 14th, 2022
- Definite assignment in structs
- Checked operators
Feb 9, 2022
C# Language Design Meeting for February 9th, 2022
- Continue discussion of checked user-defined operators
- Review proposal for unsigned right shift operator
- Review proposal for relaxing shift operator requirements
- Triage champion features
Feb 7, 2022
C# Language Design Meeting for February 7th, 2022
- Checked user-defined operators
Jan 26, 2022
C# Language Design Notes for January 26th, 2022
- Open questions in UTF-8 string literals
Jan 24, 2022
C# Language Design Notes for January 24th, 2022
- Required members metadata representation
- Default implementations of abstract statics
- Triage
- Nested members in with and object creation
- Binary Compat Only
- Attribute for passing caller identity implicitly
- Attributes on Main for top level programs
Jan 12, 2022
C# Language Design Notes for January 12th, 2022
- Open questions for
field- Initializers for semi-auto properties
- Definite assignment for struct types
- Generic Math Operator Enhancements
Jan 5, 2022
C# Language Design Notes for January 5th, 2022
- Required Members
Jan 3, 2022
C# Language Design Notes for January 3rd, 2022
- Slicing assumptions in list patterns, revisited
- Parameterless struct constructors, revisited
Overview (`meetings/2023/README.md`)
C# Language Design Notes for 2023
Mon Dec 11, 2023
C# Language Design Meeting for December 11th, 2023
- Extensions
Mon Dec 4, 2023
C# Language Design Meeting for December 4th, 2023
- Lock statement pattern
BinaryCompatOnlyAttribute
Mon Nov 27, 2023
C# Language Design Meeting for November 27th, 2023
- Pattern order optimizations
- Subarray slicing breaking change
- Making patterns constant expressions
Wed Nov 15, 2023
C# Language Design Meeting for November 15th, 2023
paramsimprovements- Nullability analysis of collection expressions
- Evaluation of implicit indexers in object initializers
Mon Oct 16, 2023
C# Language Design Meeting for October 16th, 2023
- Triage
- Breaking change warnings
- Determine natural type of method group by looking scope-by-scope
- u8 string interpolation
- Lock statement pattern
- String/Character escape sequence \e as a short-hand for \u001b
- New operator %% for canonical Modulus operations
Wed Oct 11, 2023
C# Language Design Meeting for October 11th, 2023
- C# spec update
- Collection expressions
Mon Oct 9, 2023
C# Language Design Meeting for October 9th, 2023
- Triage
- ReadOnlySpan initialization from static data
- Embedded Language Indicators for raw string literals
- list-patterns on enumerables
- Make generated `Program`` for top-level statements public by default
- CallerCharacterNumberAttribute
- Add private and namespace accessibility modifiers for top-level types
- Require await to apply nullable postconditions to task-returning calls
isexpression evaluatingconstexpression should be considered constant
Wed Oct 4, 2023
C# Language Design Meeting for October 4th, 2023
- Trimming and AOT
Mon Oct 2, 2023
C# Language Design Meeting for October 2nd, 2023
- Collection expressions
Wed Sept 27, 2023
C# Language Design Meeting for September 27th, 2023
- Collection expressions
Mon Sept 25, 2023
C# Language Design Meeting for September 25th, 2023
- Primary constructors
- Defining well-defined behavior for collection expression types
Wed Sept 20, 2023
C# Language Design Meeting for September 20th, 2023
- Collection expressions
- Type inference from spreads
- Overload resolution fallbacks
Mon Sept 18, 2023
C# Language Design Meeting for September 18th, 2023
- Collection expression questions
- Optimizing non-pattern collection construction
- Avoiding intermediate buffers for known-length cases
Wed Aug 16 2023
C# Language Design Meeting for August 16th, 2023
- Ref-safety scope for collection expressions
- Experimental attribute
Mon Aug 14, 2023
C# Language Design Meeting for August 14th, 2023
- Betterness for collection expressions and span types
- Type inference from collection expression elements
- Collection expression conversions
Wed Aug 9, 2023
C# Language Design Meeting for August 9th, 2023
- Lambdas with explicit return types
- Target typing of collection expressions to core interfaces
- Loosening requirements for collection builder methods
Mon Aug 7, 2023
C# Language Design Meeting for August 7th, 2023
- Improvements to method group natural types
Mon Jul 31, 2023
C# Language Design Meeting for July 31st, 2023
- Primary constructor parameters and
readonly
Wed Jul 26, 2023
C# Language Design Meeting for July 26th, 2023
- Primary constructor parameters and
readonly
Mon Jul 24, 2023
C# Language Design Meeting for July 24th, 2023
- Method group natural types with extension members
- Interceptors
Mon Jul 17, 2023
C# Language Design Meeting for July 17th, 2023
- Compiler Check-in
readonlyparameters
Wed Jul 12, 2023
C# Language Design Meeting for July 12th, 2023
- Collection Literals
Createmethods- Extension methods
- Interceptors
Mon Jun 19, 2023
C# Language Design Meeting for June 19th, 2023
- Prefer spans over interfaces in overload resolution
- Collection literals
Mon Jun 5, 2023
C# Language Design Meeting for June 5th, 2023
- Collection literals
Wed May 31, 2023
C# Language Design Meeting for May 31st, 2023
- Collection literals
Wed May 17, 2023
C# Language Design Meeting for May 17th, 2023
- Inline arrays
Mon May 15, 2023
C# Language Design Meeting for May 15th, 2023
- Breaking Change Warnings
- Primary Constructors
Mon May 8, 2023
C# Language Design Meeting for May 8th, 2023
- Primary Constructors
Wed May 3, 2023
C# Language Design Meeting for May 3rd, 2023
- Inline Arrays
- Primary constructors
- Attributes on captured parameters
- Warning for shadowing base members
- Collection literal natural type
Mon May 1, 2023
C# Language Design Meeting for May 1st, 2023
- Fixed Size Buffers
lockstatement improvements
Wed Apr 26, 2023
C# Language Design Meeting for April 26th, 2023
- Collection literals
Mon Apr 10, 2023
C# Language Design Meeting for April 10th, 2023
- Fixed Size Buffers
Mon Apr 3, 2023
C# Language Design Meeting for April 3rd, 2023
- Collection Literals
- Fixed-size buffers
Wed Mar 15, 2023 (No notes)
- Discriminated Unions
- Interceptors
Mon Mar 13, 2023 (Shorter meeting)
C# Language Design Meeting for March 13th, 2023
- Unsafe in aliases hole
- Attributes on primary ctors
Wed Mar 8, 2023
C# Language Design Meeting for March 8th, 2023
- Discriminated Unions
- Limited Breaking Changes in C#
Wed Mar 1, 2023 (Shorter meeting)
C# Language Design Meeting for March 1st, 2023
- Discriminated Unions Summary
Mon Feb 27, 2023
C# Language Design Meeting for February 27th, 2023
- Interceptors
Wed Feb 22, 2023
C# Language Design Meeting for February 22nd, 2023
- Primary Constructors
- Extensions
Wed Feb 15, 2023
C# Language Design Meeting for February 15th, 2023
- Open questions in primary constructors
- Capturing parameters in lambdas
- Assigning to
thisin astruct
Wed Feb 1, 2023
C# Language Design Meeting for February 1st, 2023
- Position of
unsafein aliases - Roles and extensions
Wed Jan 18, 2023
C# Language Design Meeting for January 18th, 2023
- Nullable post-conditions and
async/await - Semi-colon bodies for type declarations
Wed Jan 11, 2023
C# Language Design Meeting for January 11th, 2023
usingaliases for any types- Pointer types in aliases
- Reference nullability in aliases
- Value nullability in aliases
Mon Jan 9, 2023
C# Language Design Meeting for January 9th, 2023
- Working group re-evaluation
Overview (`meetings/2024/README.md`)
C# Language Design Notes for 2024
Mon Dec 9, 2024
C# Language Design Meeting for December 9th, 2024
- First-class span open questions
- Simple Lambda Parameters
- Collection expression arguments
Wed Dec 4, 2024
C# Language Design Meeting for December 4th, 2024
- First-class span open questions
- Preferring
ReadOnlySpan<T>overSpan<T>conversions - Conversions in expression trees
- Preferring
Wed Nov 20, 2024
C# Language Design Meeting for November 20th, 2024
- Extensions
- Dictionary Expressions
Wed Nov 13, 2024
C# Language Design Meeting for November 13th, 2024
- Extensions
Mon Nov 4, 2024
C# Language Design Meeting for November 4th, 2024
notandorpatterns- Notes on notes
Wed Oct 30, 2024
C# Language Design Meeting for October 30th, 2024
- Extensions
Mon Oct 28, 2024
C# Language Design Meeting for October 28th, 2024
- Increment and Decrement Operators in null conditional access
yieldintry/catch
Mon Oct 21, 2024
Canceled
Wed Oct 16, 2024
C# Language Design Meeting for October 16th, 2024
- Simple lambda parameters
- Unbound generic types in
nameof typeofstring constants
Mon Oct 14, 2024
C# Language Design Meeting for October 14th, 2024
- Extensions
Wed Oct 9, 2024
C# Language Design Meeting for October 9th, 2024
- Extensions
Mon Oct 7, 2024
C# Language Design Meeting for October 7th, 2024
- Extensions
Wed Oct 2, 2024
C# Language Design Meeting for October 2nd, 2024
- Open questions in field
readonlycontexts andsetConditionalcode- Interface properties and auto-accessors
- Extensions
Mon Sep 30, 2024
C# Language Design Meeting for September 30th, 2024
- Extensions
Wed Sep 25, 2024
- C# 14 (no notes)
Mon Sep 23, 2024
- Design review (no notes)
Wed Sep 18, 2024
C# Language Design Meeting for September 18th, 2024
- Nullability in
field - Extensions naming
Wed Sep 11, 2024
C# Language Design Meeting for September 11th, 2024
- Better conversion from collection expression and
paramscollections - First-class span types
Reverse- New ambiguities
- Covariant arrays
Wed Sep 4, 2024
C# Language Design Meeting for September 4th, 2024
- Triage (no milestone)
- Type inference using method group natural type
- Collection Expressions Next (C#13 and beyond)
- Dictionary expressions
- Extending patterns to "as"
params inparameters
- Triage (working set)
- Only Allow Lexical Keywords in the Language
- Permit variable declarations under disjunctive patterns
- CallerCharacterNumberAttribute
Task<T>nullability covariance- Nullable analysis of LINQ queries
Wed Aug 28, 2024
C# Language Design Meeting for August 28th, 2024
- Nullable in
refternaries - Block-bodied switch expression arms
Mon Aug 26, 2024
C# Language Design Meeting for August 26th, 2024
fieldkeyword open questionsfieldin property initializers- Interaction with partial properties
readonlyfield
Wed Aug 21, 2024
C# Language Design Meeting for August 21st, 2024
- Better conversion from collection expression
fieldkeyword nullability
Mon Aug 19, 2024
C# Language Design Meeting for August 19th, 2024
- Better conversion from collection expression
Wed Aug 14, 2024
C# Language Design Meeting for August 14th, 2024
fieldkeywordfieldnullabilityfieldin event accessor- Scenarios similar to
set;
Wed Jul 24, 2024
C# Language Design Meeting for July 24th, 2024
- Discriminated Unions
- Better conversion from collection expression with
ReadOnlySpan<T>overloads
Mon Jul 22, 2024
C# Language Design Meeting for July 22nd, 2024
- Extensions
- Ref structs implementing interfaces
Wed Jul 17, 2024
C# Language Design Meeting for July 17th, 2024
- Overload resolution priority open questions
- Better conversion from collection expression with
ReadOnlySpan<T>overloads
Mon Jul 15, 2024
C# Language Design Meeting for July 15th, 2024
fieldkeyword- First-Class Spans Open Question
Wed Jun 26, 2024
C# Language Design Meeting for June 26th, 2024
- Extensions
Mon Jun 24, 2024
C# Language Design Meeting for June 24th, 2024
- First-Class Spans
fieldquestions- Mixing auto-accessors
- Nullability
Mon Jun 17, 2024
C# Language Design Meeting for June 17th, 2024
paramsSpan breaks- Overload resolution priority questions
- Application error or warning on
overrides - Implicit interface implementation
- Application error or warning on
- Inline arrays as
record structs
Wed Jun 12, 2024
C# Language Design Meeting for June 12th, 2024
params Spanbreaks- Extensions
Mon Jun 10, 2024
C# Language Design Meeting for June 10th, 2024
ref structs implementing interfaces and in generics
Mon Jun 3, 2024
C# Language Design Meeting for June 3rd, 2024
- Params collections and dynamic
- Allow ref and unsafe in iterators and async
Wed May 15, 2024
C# Language Design Meeting for May 15th, 2024
fieldandvalueas contextual keywords- Usage in
nameof - Should
valuebe a keyword in a property or indexer get? Shouldfieldbe a keyword in an indexer? - Should
fieldandvaluebe considered keywords in lambdas and local functions within property accessors? - Should
fieldandvaluebe keywords in property or accessor signatures? What aboutnameofin those spaces?
- Usage in
- Dictionary expressions
Mon May 13, 2024
C# Language Design Meeting for May 13th, 2024
- First-class span types questions
- Delegate conversions
- Variant conversion existence
- Overload resolution priority questions
- Attribute shape and inheritance
- Extension overload resolution
Wed May 8, 2024
C# Language Design Meeting for May 8th, 2024
readonlyfor primary constructor parameters
Wed May 1, 2024
C# Language Design Meeting for May 1st, 2024
- Adjust binding rules in the presence of a single candidate
Wed Apr 24, 2024
C# Language Design Meeting for Apr 24th, 2024
- Adjust dynamic binding rules for a situation of a single applicable candidate
Mon Apr 22, 2024
C# Language Design Meeting for Apr 22nd, 2024
- Effect of language version on overload resolution in presence of
paramscollections - Partial type inference: '_' in method and object creation type argument lists
Wed Apr 17, 2024
C# Language Design Meeting for Apr 17th, 2024
- Relax
Addrequirement for collection expression conversions to types implementingIEnumerable - Extensions
Mon Apr 15, 2024
C# Language Design Meeting for Apr 15th, 2024
- Non-enumerable collection types
- Interceptors
- Relax
Addrequirement for collection expression conversions to types implementingIEnumerable
Mon Apr 8, 2024
C# Language Design Meeting for Apr 8th, 2024
- Implementation specific documentation
Mon Apr 1, 2024
C# Language Design Meeting for Apr 1st, 2024
- Async improvements (Async2)
Wed Mar 27, 2024
C# Language Design Meeting for Mar 27th, 2024
- Discriminated Unions
Mon Mar 11, 2024
C# Language Design Meeting for Mar 11th, 2024
- Dictionary expressions
Mon Mar 4, 2024
C# Language Design Meeting for Mar 4th, 2024
- Breaking changes: making
fieldandvaluecontextual keywords - Overload resolution priority
Wed Feb 28, 2024
C# Language Design Meeting for Feb 28th, 2024
- Extensions
Mon Feb 26, 2024
C# Language Design Meeting for Feb 26th, 2024
ref structs in generics- Collection expressions
Wed Feb 21, 2024
C# Language Design Meeting for Feb 21st, 2024
- Declaration of ref/out parameters in lambdas without typename
paramscollections- Metadata format
paramsandscopedacrossoverridesrequiredmembers andparamsparameters
Wed Feb 7, 2024
C# Language Design Meeting for Feb 7th, 2024
- Partial type inference
- Breaking change warnings
Mon Feb 5, 2024
C# Language Design Meeting for Feb 5th, 2024
- First-class span types
- Collection expressions: inline collections
Wed Jan 31, 2024
C# Language Design Meeting for January 31st, 2024
- Relax "enumerable" requirement for collection expressions
paramscollections evaluation orders
Mon Jan 29, 2024
C# Language Design Meeting for January 29th, 2024
paramscollections- Better function member changes
dynamicsupport
dynamicandreflocal function bugfixing
Mon Jan 22, 2024
C# Language Design Meeting for January 22nd, 2024
Wed Jan 10, 2024
C# Language Design Meeting for January 10th, 2024
- Collection expressions: conversion vs construction
Mon Jan 8, 2024
C# Language Design Meeting for January 8th, 2024
- Collection expressions
- Iteration type of
CollectionBuilderAttributecollections - Iteration type in conversions
- Iteration type of
Overview (`meetings/2025/README.md`)
C# Language Design Notes for 2025
Wed December 17, 2025
C# Language Design Meeting for December 17th, 2025
- Collection expression arguments parsing question
- Null-conditionals evaluating to a pointer type
- Triage
- Top-Level Members
- Using local declaration improvements
Wed Dec 10, 2025
C# Language Design Meeting for December 10th, 2025
- Collection expression arguments
Wed Nov 12, 2025
C# Language Design Meeting for November 12th, 2025
- Unsafe evolution
Wed Nov 5, 2025
C# Language Design Meeting for November 5th, 2025
- Unsafe evolution
Wed Oct 29, 2025
C# Language Design Meeting for October 29th, 2025
- Unsafe evolution
Mon Oct 13, 2025
C# Language Design Meeting for October 13th, 2025
- Collection expression safe-context bug fix
- Immediately-enumerated collection expressions
Wed Oct 1, 2025
C# Language Design Meeting for October 1st, 2025
- Closed enums
- Closed Hierarchies
Mon Sep 29, 2025
C# Language Design Meeting for September 29th, 2025
- Union Syntax Thunderdome Part 2
- Enums vs Unions
Wed Sep 24, 2025
C# Language Design Meeting for September 24th, 2025
- Union Syntax Thunderdome Part 1
Wed Sep 17, 2025
C# Language Design Meeting for September 17th, 2025
- Unsafe evolution
Wed Sep 10, 2025
C# Language Design Meeting for September 10th, 2025
- Unions overview
Wed Aug 27, 2025
C# Language Design Meeting for August 27th, 2025
- Type inference in patterns
- Type value conversion
- Union syntax
Wed Aug 20, 2025
C# Language Design Meeting for August 20th, 2025
- Union interfaces
- Target-type inference improvements
Mon Aug 18, 2025
C# Language Design Meeting for August 18th, 2025
- C# 15 Kickoff and Themes
- Unions
- Extensions
- Dictionary expressions
- Type inference
- Continuing the null monad
- Object initialization
- Top-level methods
- Caller type name
- Switch statement/expression improvements
Wed Aug 13, 2025
C# Language Design Meeting for August 13th, 2025
- Unions
Wed Jul 30, 2025
C# Language Design Meeting for July 30th, 2025
- '/main' and top-level statements
- Union proposals overview
- Add type parameter restriction to closed hierarchies
- Standard unions
- Union interfaces
- Custom unions
- Non-boxing access pattern
Mon Jun 30, 2025
C# Language Design Meeting for June 30th, 2025
- Type parameter inference from constraints
- Target-typed static member lookup
Wed Jun 25, 2025
C# Language Design Meeting for June 25th, 2025
- Unions
- Stand-alone issues
- Mutually exclusive issues
Mon Jun 23, 2025
C# Language Design Meeting for June 23rd, 2025
- Extensions
- Use of extension operators in LINQ expression trees
refencoding and conflict checks- Extern support
- Lookup
Wed Jun 18, 2025
C# Language Design Meeting for June 18th, 2025
- Iterators in lambdas
- Extensions
Wed Jun 11, 2025
C# Language Design Meeting for June 11th, 2025
- Extensions
- Dynamic resolution of operator
true/false - Extension operators in LINQ expression trees
- Built-in operator protection rules
- Extension module initializers
- Extension methods as entry points
- Langversion behavior for new extensions
nameof
- Dynamic resolution of operator
Mon Jun 9, 2025
C# Language Design Meeting for June 9th, 2025
- Extensions - crefs
Wed Jun 4, 2025
C# Language Design Meeting for June 4th, 2025
- Extensions
- Should extension operators on nullable of extended type be disallowed
- Applicability of bitwise operators during evaluation of user-defined conditional logical operators
- Extension user-defined conditional logical operators
- Extension compound assignment operators
- Delegate returning properties
- Extension declaration validation
- Cref references
Wed May 28, 2025
C# Language Design Meeting for May 28th, 2025
- Nominal type unions
Mon May 12, 2025
C# Language Design Meeting for May 12th, 2025
- Collection expression arguments
- Empty argument lists
- Constructor binding behavior
- Syntax
- Dictionary expressions
Wed May 7, 2025
C# Language Design Meeting for May 7th, 2025
- Collection Expression Arguments
- Interface target type
- Constructor binding behavior
- Syntax
Mon May 5, 2025
C# Language Design Meeting for May 5th, 2025
- Extensions
- XML Docs
- Participation in pattern-based constructs
- Skeleton type metadata
- Single-phase consequences
Wed, Apr 23, 2025
C# Language Design Meeting for April 23rd, 2025
- Extensions
- Extension operators
- Overload resolution priority
- Dictionary Expressions
Wed Apr 16, 2025
C# Language Design Meeting for April 16th, 2025
- Extensions
Mon Apr 14, 2025
C# Language Design Meeting for April 14th, 2025
- Dictionary expressions
- Collection expression arguments
Wed Apr 9, 2025
C# Language Design Meeting for April 9th, 2025
- Dictionary expressions
- Collection expression arguments
Mon Apr 7, 2025
C# Language Design Meeting for April 7th, 2025
- Breaking change discussion: making partial members in interfaces virtual and/or public
- Interpolated string handler argument values
April 2, 2025
C# Language Design Meeting for April 2nd, 2025
- User Defined Compound Assignment Operators
- Should readonly modifier be allowed in structures?
- Should shadowing be allowed
- Should we have any consistency enforcement between declared += and + operators?
- Readonly setters
- Expansions
Mon Mar 24, 2025
C# Language Design Meeting for March 24th, 2025
- Dictionary Expressions
- Support dictionary types as
paramstype - Type inference for
KeyValuePair<K, V>collections - Overload resolution for
KeyValuePair<K, V>collections
- Support dictionary types as
- Extensions
- Signature conflict rules
extensionvsextensions
Wed Mar 19, 2025
C# Language Design Meeting for March 19th, 2025
- Readonly setters on non-variables
Mon Mar 17, 2025
C# Language Design Meeting for March 17th, 2025
- Collection expression arguments
withbreaking change- Collection expression arguments and conversions
- Dictionary expressions
- Extensions
- Accessibility
- Static factory scenarios
Mon Mar 12, 2025
C# Language Design Meeting for March 12th, 2025
- Optional and named parameters in expression trees
- Collection builder method parameter order
- Ignored directives
Mon Mar 10, 2025
C# Language Design Meeting for March 10th, 2025
- Extensions
- Property method calling
- Scoping and Shadowing
- Type parameter inferrability
- Accessibility
Wed Mar 5, 2025
C# Language Design Meeting for March 5th, 2025
- Dictionary expressions
- Target-typed static member lookup
Mon Mar 3, 2025
C# Language Design Meeting for March 3rd, 2025
- Extensions
Wed Feb 26, 2025
C# Language Design Meeting for February 26th, 2025
- Extensions
Mon Feb 24, 2025
C# Language Design Meeting for February 24th, 2025
- Extensions
- Interpolated string handler method names
Wed Feb 19, 2025
C# Language Design Meeting for February 19th, 2025
- Extensions
Wed Feb 12, 2025
C# Language Design Meeting for February 12th, 2025
- User-defined instance-based operators
- Left-right join in query expressions
Wed Jan 22, 2025
C# Language Design Meeting for January 22nd, 2025
- Partial events and constructors
- Collection expression arguments
- Extensions disambiguation syntax
Wed Jan 15, 2025
C# Language Design Meeting for January 15th, 2025
fieldof- Simple lambda parameters
- Interpolated string handler method names
Mon Jan 13th, 2025
C# Language Design Meeting for January 13th, 2025
- Discriminated Unions
Mon Jan 6, 2025
C# Language Design Meeting for January 6th, 2025
- Ignoring
ref structs inExpressions - Extensions
Overview (`meetings/2026/README.md`)
Upcoming meetings for 2026
All schedule items must have a public issue or checked-in proposal that can be linked from the notes.
Schedule ASAP
Schedule when convenient
- Labeled
breakandcontinueStatements (CyrusNajmabadi) Finalize specification. - Final initializers
- LDM in 2020 approved the syntax. Next is discussing semantics.
- Anonymous using declarations (jnm2, 333fred, CyrusNajmabadi)
- Extension members on typeless receivers (CyrusNajmabadi, jnm2)
- Collection expression spread optimization question (Rikki)
- Ref and ref-like parameters of async methods (jnm2)
- Mixed object and collection initializers (CyrusNajmabadi)
- Triage (working set)
Recurring topics
- Triage championed features and milestones
- Design review
Schedule
Mon Nov 30, 2026
Mon Nov 23, 2026
Mon Nov 9, 2026
Mon Nov 2, 2026
Mon Oct 12, 2026
- More type inference (Mads)
- Final initializers (Joseph)
- LDM in 2020 approved the syntax. Next is discussing semantics.
Mon Oct 5, 2026
- Simple LDM decisions (Fred, Mads)
- Target typed generic inference (Mads)
C# Language Design Notes for 2026
Wed Aug 19, 2026
C# Language Design Meeting for August 19th, 2026
- Type parameter inference for constructor calls
- Generalized generic type inference
- Type groups
- Constructor type inference
Wed Aug 12, 2026
C# Language Design Meeting for August 12th, 2026
- Type parameter inference from constraints implementation review
- Union pattern matching targets
Wed Aug 5, 2026
C# Language Design Meeting for August 5th, 2026
- C# 16 feature focus
- Unsafe v2
- Dictionary expressions
- Closed enums
- Type inference improvements
- Declarative UI construction
- Other areas
Wed Jul 22, 2026
C# Language Design Meeting for July 22nd, 2026
- Allowing
safeon non-externmembers
Wed Jul 15, 2026
C# Language Design Meeting for July 15th, 2026
- Declarative UI construction
Wed Jul 1, 2026
C# Language Design Meeting for July 1, 2026
- Unsafe awaits
- Extension constants
- Partial extension members
Mon Jun 8, 2026
C# Language Design Meeting for June 8, 2026
- Dictionary expressions
- IReadOnlyDictionary comparer binding
- KeyValuePair variance in params
- Unions
- Union pattern target for custom unions
- Labeled break and continue
Wed May 27, 2026
C# Language Design Meeting for May 27th, 2026
- Unsafe evolution
- Unsafe expressions
- Await in unsafe blocks
- Safety comments
Wed May 20, 2026
C# Language Design Meeting for May 20th, 2026
- Unions
- Union pattern matching target for custom unions
- Missing required APIs in custom union declarations
- Direct value property matching and union rules
Mon May 18, 2026
C# Language Design Meeting for May 18th, 2026
- Closed hierarchies open questions
- Exhaustiveness when no subtypes exist
- Matching the base type after all subtypes
- Type parameters constrained to closed types
- Constraint-based ruling out of generic subtypes
Wed May 13, 2026
C# Language Design Meeting for May 13th, 2026
- Unsafe evolution, continued
safemarker syntaxunsafeon typesunsafefields- Explicit and extended layout fields
- Implicit calls and constructor edge cases
Wed Apr 29, 2026
C# Language Design Meeting for April 29th, 2026
- Unsafe evolution
- Finer-grained opt-in
- More gradual opt-in
- Members with pointers in their signature
Mon Apr 27, 2026
C# Language Design Meeting for April 27th, 2026
- Relaxed partial ordering
- Labeled break and continue
- Null-conditional await
- Chained relational comparisons
- Compound assignment in initializers
- Prioritization
Wed Apr 22, 2026
C# Language Design Meeting for April 22nd, 2026
- Unsafe evolution, continued
- Signature
unsafeand unsafe contexts - Transitional diagnostics for pointer-signature calls
- Signature
Mon Apr 20, 2026
C# Language Design Meeting for April 20th, 2026
- Closed hierarchies continued
- Generics and exhaustiveness
- Accessibility and exhaustiveness
- Interface convertibility of sealed classes
- Concrete intermediate nodes
Wed Apr 15, 2026
C# Language Design Meeting for April 15th, 2026
- Deconstruction in lambda parameters
- Labeled
breakandcontinue
Mon Apr 13, 2026
C# Language Design Meeting for April 13th, 2026
- Unsafe evolution, continued
- Safe markers for members with internal
unsafecode - Members with pointers in their signatures
- Choosing a temporary spelling for
safe
- Safe markers for members with internal
Wed Apr 8, 2026
C# Language Design Meeting for April 8th, 2026
- Target-typed static member access
- Scope review and motivating examples
- Dot or no dot
- Initial rollout scope
Mon Apr 6, 2026
C# Language Design Meeting for April 6th, 2026
- Unsafe evolution, continued
- Simple core model
externmembers and explicit safety markers
Wed Apr 1, 2026
C# Language Design Meeting for April 1st, 2026
- Unsafe evolution migration and explicit safety markers
- Marking
externmembers as explicitly safe - Avoiding easy but incorrect unsafe evolution migration paths
- Marking
Wed Mar 11, 2026
C# Language Design Meeting for March 11th, 2026
- Target-typed static member access
- Overview and smorgasbord of parts
- Factory containers
- Ambiguity with parenthesized expression
- Ambiguity with conditional expression
Mon Mar 9, 2026
C# Language Design Meeting for March 9th, 2026
- Extension indexers
- Ordering for implicit indexers and list patterns
- Slice extensions for range access
- Spread optimization in collection expressions
Wed Feb 11, 2026
C# Language Design Meeting for February 11th, 2026
- Union patterns update
Mon Feb 9, 2026
C# Language Design Meeting for February 9th, 2026
- Closed hierarchies open questions
- Confirming API shape
- Blocking subtyping from other languages
- Multiple
CompilerFeatureRequiredattributes - Same module restriction
- Permit explicit use of
abstractmodifier - Subtype metadata
Wed Feb 4, 2026
C# Language Design Meeting for February 4th, 2026
- Discriminated unions patterns
- Null ambiguity in constructor selection
- Marking unions with an attribute instead of IUnion interface
- Factory method support
- Union member providers
Mon Feb 2, 2026
C# Language Design Meeting for February 2nd, 2026
- Extension indexers
Mon Jan 26, 2026
C# Language Design Meeting for January 26th, 2026
- Alternative syntax for caller-unsafe
Wed Jan 21, 2026
C# Language Design Meeting for January 21st, 2026
- Unsafe evolution
Mon Jan 12, 2026
C# Language Design Meeting for January 12, 2026
- Triage
- Relaxed ordering for
partialandrefmodifiers - Deconstruction in lambda parameters
- Unsigned sizeof
- Labeled
breakandcontinueStatements - Extra accessor in property override
- Immediately Enumerated Collection Expressions
- Allow arrays as CollectionBuilder Create parameter type
- Relaxed ordering for
Overview (`proposals/csharp-7.1/README.md`)
C# 7.1
Overview (`proposals/discriminated-unions/README.md`)
Discriminated Unions
This directory explores two alternative designs for bringing the traditional programming concept of discriminated unions to C#. One builds on C# unions, the other on enums.
Start Here
Start with either of the two main proposals. Each introduces its syntax with a complete example before describing the design:
Discriminated unions adds
casedeclarations to unions.csharpunion struct Option<T> { case None = default; case Some(T Value); }Data-carrying enums adds cases with associated data through
enum classandenum struct.csharpclosed enum struct Option<T> { None = default, Some(T Value) }
Readers can follow either proposal without reading the other first. Most supporting documents are shared between the two approaches.
The design comparison examines the advantages and tradeoffs of each approach.
Supporting Documents
The main proposals link to shared details as needed:
- Common design covers contextual construction and inference, equality and hashing, nullability, metadata, and other shared behavior and open questions.
- Non-boxed storage explores an internal layout for
union structandenum structthat avoids boxing during construction and extraction. - Per-case records and generated layouts explores choosing each case's record kind independently and selecting storage through attributes and source generators, including native layout and Swift interop.
- Ref-like types explores an optional extension for ref-like payloads and its open questions. Neither main design depends on it.
- Switch emission discusses implementation strategies and possible compiler and JIT optimizations for both designs.
Enum members is specific to enums. It proposes allowing user-declared members in ordinary enums and supports those members in the data-carrying enum design.
--- METRICS ---
- Files Extracted: 20
- Estimated Token Budget: ~42850 tokens
- Canonical Reference: https://codewiki.google/github.com/dotnet/csharplang