# Technical Documentation: dotnet/csharplang

> ℹ️ **Provenance:** Multi-Tier Ingestion · [CodeWiki Reference](https://codewiki.google/github.com/dotnet/csharplang)

### Overview (`README.md`)

# C# Language Design

[](https://gitter.im/dotnet/csharplang?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://aka.ms/dotnet-discord-csharp)

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](https://github.com/dotnet/roslyn) project, which implements the language.

You can find:

- Active C# language feature proposals in the [proposals folder](proposals)
- Notes from C# language design meetings in the [meetings folder](meetings)
- Summary of the [language version history here](Language-Version-History.md).

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](https://github.com/dotnet/csharplang/labels/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](Design-Process.md). A shorter overview is below.

## Discussions

Debate pertaining to language features takes place in the form of [Discussions](https://github.com/dotnet/csharplang/discussions) in this repo.

If you want to suggest a feature, discuss current design notes or proposals, etc., please [open a new Discussion topic](https://github.com/dotnet/csharplang/discussions/new).

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](https://docs.microsoft.com/visualstudio/extensibility/getting-started-with-roslyn-analyzers). 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](https://github.com/dotnet/csharplang/issues?q=is%3Aopen+is%3Aissue+label%3A%22Proposal+champion%22) 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](proposals) evolve as a result of decisions in [Language Design Meetings](meetings), which are informed by [discussions](https://github.com/dotnet/csharplang/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](https://github.com/dotnet/roslyn) 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](https://github.com/dotnet/roslyn), and fully specified in the [language specification](spec), whereupon the proposal is moved into the appropriate folder for a completed feature, e.g. [C# 7.1 proposals](proposals/csharp-7.1).

**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](https://github.com/dotnet/csharplang/milestone/19) 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](https://github.com/dotnet/csharplang/milestone/10) 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](https://github.com/dotnet/csharplang/milestone/14) 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](https://github.com/dotnet/csharplang/milestone/13) 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](meetings) folder, organized in folders by year. The lifetime of a design meeting note is described in [meetings/README.md](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](https://github.com/dotnet/csharpstandard/) repository.

## Implementation

The reference implementation of the C# language can be found in the [Roslyn repository](https://github.com/dotnet/roslyn). This repository also tracks the [implementation status for language features](https://github.com/dotnet/roslyn/blob/main/docs/Language%20Feature%20Status.md). 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](https://github.com/dotnet/csharplang/labels/Meeting%20notes) work item will track the task of cleaning up the notes.
- When the notes are finalized, a notification is posted as a [discussion issue](https://github.com/dotnet/csharplang/labels/Discussion) 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](https://github.com/dotnet/csharplang/labels/Proposal) work items will track updating those proposals, assigned to their [champions](https://github.com/dotnet/csharplang/labels/Proposal%20champion).
- 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](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](inactive) and [rejected](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](https://github.com/dotnet/csharplang/labels/Discussion), 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](https://github.com/dotnet/csharplang/labels/Proposal%20champion). 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](rejected). If a feature has reasonable promise but is not currently being prioritized to work on, it may be declared [inactive](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](proposal-template.md). 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](https://github.com/dotnet/csharplang/labels/Discussion). 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`](https://github.com/dotnet/csharpstandard) repository.

The full table of contents is in the [standard folder](https://github.com/dotnet/csharpstandard/tree/draft-v6/standard).

> To view the text of the Microsoft spec before merging with the ECMA text, checkout the [ms-spec-text](https://github.com/dotnet/csharplang/releases/tag/ms-spec-text) tag in this repository.

* [Lexical structure](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/lexical-structure.md)
  - [§6.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/lexical-structure.md#61-programs)  Programs
  - [§6.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/lexical-structure.md#62-grammars)  Grammars
  - [§6.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/lexical-structure.md#63-lexical-analysis)  Lexical analysis
  - [§6.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/lexical-structure.md#64-tokens)  Tokens
  - [§6.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/lexical-structure.md#65-pre-processing-directives)  Pre-processing directives
- [§7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#7-basic-concepts)  Basic concepts
  - [§7.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#71-application-startup)  Application startup
  - [§7.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#72-application-termination)  Application termination
  - [§7.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#73-declarations)  Declarations
  - [§7.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#74-members)  Members
  - [§7.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#75-member-access)  Member access
  - [§7.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#76-signatures-and-overloading)  Signatures and overloading
  - [§7.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#77-scopes)  Scopes
  - [§7.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#78-namespace-and-type-names)  Namespace and type names
  - [§7.9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#79-automatic-memory-management)  Automatic memory management
  - [§7.10](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/basic-concepts.md#710-execution-order)  Execution order
- [§8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#8-types)  Types
  - [§8.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#81-general)  General
  - [§8.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#82-reference-types)  Reference types
  - [§8.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#83-value-types)  Value types
  - [§8.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#84-constructed-types)  Constructed types
  - [§8.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#85-type-parameters)  Type parameters
  - [§8.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#86-expression-tree-types)  Expression tree types
  - [§8.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#87-the-dynamic-type)  The dynamic type
  - [§8.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/types.md#88-unmanaged-types)  Unmanaged types
- [§9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#9-variables)  Variables
  - [§9.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#91-general)  General
  - [§9.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#92-variable-categories)  Variable categories
  - [§9.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#93-default-values)  Default values
  - [§9.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#94-definite-assignment)  Definite assignment
  - [§9.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#95-variable-references)  Variable references
  - [§9.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/variables.md#96-atomicity-of-variable-references)  Atomicity of variable references
- [§10](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#10-conversions)  Conversions
  - [§10.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#101-general)  General
  - [§10.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#102-implicit-conversions)  Implicit conversions
  - [§10.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#103-explicit-conversions)  Explicit conversions
  - [§10.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#104-standard-conversions)  Standard conversions
  - [§10.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#105-user-defined-conversions)  User-defined conversions
  - [§10.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#106-conversions-involving-nullable-types)  Conversions involving nullable types
  - [§10.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#107-anonymous-function-conversions)  Anonymous function conversions
  - [§10.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/conversions.md#108-method-group-conversions)  Method group conversions
- [§11](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#11-expressions)  Expressions
  - [§11.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#111-general)  General
  - [§11.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#112-expression-classifications)  Expression classifications
  - [§11.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#113-static-and-dynamic-binding)  Static and Dynamic Binding
  - [§11.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#114-operators)  Operators
  - [§11.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#115-member-lookup)  Member lookup
  - [§11.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#116-function-members)  Function members
  - [§11.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#117-primary-expressions)  Primary expressions
  - [§11.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#118-unary-operators)  Unary operators
  - [§11.9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#119-arithmetic-operators)  Arithmetic operators
  - [§11.10](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1110-shift-operators)  Shift operators
  - [§11.11](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1111-relational-and-type-testing-operators)  Relational and type-testing operators
  - [§11.12](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1112-logical-operators)  Logical operators
  - [§11.13](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1113-conditional-logical-operators)  Conditional logical operators
  - [§11.14](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1114-the-null-coalescing-operator)  The null coalescing operator
  - [§11.15](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1115-conditional-operator)  Conditional operator
  - [§11.16](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1116-anonymous-function-expressions)  Anonymous function expressions
  - [§11.17](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1117-query-expressions)  Query expressions
  - [§11.18](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1118-assignment-operators)  Assignment operators
  - [§11.19](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1119-expression)  Expression
  - [§11.20](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1120-constant-expressions)  Constant expressions
  - [§11.21](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/expressions.md#1121-boolean-expressions)  Boolean expressions
- [§12](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#12-statements)  Statements
  - [§12.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#121-general)  General
  - [§12.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#122-end-points-and-reachability)  End points and reachability
  - [§12.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#123-blocks)  Blocks
  - [§12.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#124-the-empty-statement)  The empty statement
  - [§12.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#125-labeled-statements)  Labeled statements
  - [§12.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#126-declaration-statements)  Declaration statements
  - [§12.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#127-expression-statements)  Expression statements
  - [§12.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#128-selection-statements)  Selection statements
  - [§12.9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#129-iteration-statements)  Iteration statements
  - [§12.10](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#1210-jump-statements)  Jump statements
  - [§12.11](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#1211-the-try-statement)  The try statement
  - [§12.12](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#1212-the-checked-and-unchecked-statements)  The checked and unchecked statements
  - [§12.13](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#1213-the-lock-statement)  The lock statement
  - [§12.14](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#1214-the-using-statement)  The using statement
  - [§12.15](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/statements.md#1215-the-yield-statement)  The yield statement
- [§13](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#13-namespaces)  Namespaces
  - [§13.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#131-general)  General
  - [§13.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#132-compilation-units)  Compilation units
  - [§13.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#133-namespace-declarations)  Namespace declarations
  - [§13.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#134-extern-alias-directives)  Extern alias directives
  - [§13.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#135-using-directives)  Using directives
  - [§13.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#136-namespace-member-declarations)  Namespace member declarations
  - [§13.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#137-type-declarations)  Type declarations
  - [§13.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/namespaces.md#138-qualified-alias-member)  Qualified alias member
- [§14](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#14-classes)  Classes
  - [§14.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#141-general)  General
  - [§14.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#142-class-declarations)  Class declarations
  - [§14.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#143-class-members)  Class members
  - [§14.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#144-constants)  Constants
  - [§14.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#145-fields)  Fields
  - [§14.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#146-methods)  Methods
  - [§14.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#147-properties)  Properties
  - [§14.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#148-events)  Events
  - [§14.9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#149-indexers)  Indexers
  - [§14.10](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#1410-operators)  Operators
  - [§14.11](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#1411-instance-constructors)  Instance constructors
  - [§14.12](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#1412-static-constructors)  Static constructors
  - [§14.13](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#1413-finalizers)  Finalizers
  - [§14.14](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#1414-iterators)  Iterators
  - [§14.15](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/classes.md#1415-async-functions)  Async Functions
- [§15](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/structs.md#15-structs)  Structs
  - [§15.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/structs.md#151-general)  General
  - [§15.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/structs.md#152-struct-declarations)  Struct declarations
  - [§15.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/structs.md#153-struct-members)  Struct members
  - [§15.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/structs.md#154-class-and-struct-differences)  Class and struct differences
- [§16](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#16-arrays)  Arrays
  - [§16.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#161-general)  General
  - [§16.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#162-array-types)  Array types
  - [§16.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#163-array-creation)  Array creation
  - [§16.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#164-array-element-access)  Array element access
  - [§16.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#165-array-members)  Array members
  - [§16.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#166-array-covariance)  Array covariance
  - [§16.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/arrays.md#167-array-initializers)  Array initializers
- [§17](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#17-interfaces)  Interfaces
  - [§17.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#171-general)  General
  - [§17.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#172-interface-declarations)  Interface declarations
  - [§17.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#173-interface-body)  Interface body
  - [§17.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#174-interface-members)  Interface members
  - [§17.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#175-qualified-interface-member-names)  Qualified interface member names
  - [§17.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/interfaces.md#176-interface-implementations)  Interface implementations
- [§18](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#18-enums)  Enums
  - [§18.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#181-general)  General
  - [§18.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#182-enum-declarations)  Enum declarations
  - [§18.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#183-enum-modifiers)  Enum modifiers
  - [§18.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#184-enum-members)  Enum members
  - [§18.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#185-the-systemenum-type)  The System.Enum type
  - [§18.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/enums.md#186-enum-values-and-operations)  Enum values and operations
- [§19](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#19-delegates)  Delegates
  - [§19.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#191-general)  General
  - [§19.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#192-delegate-declarations)  Delegate declarations
  - [§19.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#193-delegate-members)  Delegate members
  - [§19.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#194-delegate-compatibility)  Delegate compatibility
  - [§19.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#195-delegate-instantiation)  Delegate instantiation
  - [§19.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/delegates.md#196-delegate-invocation)  Delegate invocation
- [§20](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/exceptions.md#20-exceptions)  Exceptions
  - [§20.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/exceptions.md#201-general)  General
  - [§20.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/exceptions.md#202-causes-of-exceptions)  Causes of exceptions
  - [§20.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/exceptions.md#203-the-systemexception-class)  The System.Exception class
  - [§20.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/exceptions.md#204-how-exceptions-are-handled)  How exceptions are handled
  - [§20.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/exceptions.md#205-common-exception-classes)  Common exception classes
- [§21](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#21-attributes)  Attributes
  - [§21.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#211-general)  General
  - [§21.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#212-attribute-classes)  Attribute classes
  - [§21.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#213-attribute-specification)  Attribute specification
  - [§21.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#214-attribute-instances)  Attribute instances
  - [§21.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#215-reserved-attributes)  Reserved attributes
  - [§21.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/attributes.md#216-attributes-for-interoperation)  Attributes for interoperation
- [§22](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#22-unsafe-code)  Unsafe code
  - [§22.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#221-general)  General
  - [§22.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#222-unsafe-contexts)  Unsafe contexts
  - [§22.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#223-pointer-types)  Pointer types
  - [§22.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#224-fixed-and-moveable-variables)  Fixed and moveable variables
  - [§22.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#225-pointer-conversions)  Pointer conversions
  - [§22.6](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#226-pointers-in-expressions)  Pointers in expressions
  - [§22.7](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#227-the-fixed-statement)  The fixed statement
  - [§22.8](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#228-fixed-size-buffers)  Fixed-size buffers
  - [§22.9](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/unsafe-code.md#229-stack-allocation)  Stack allocation
- [§D](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/documentation-comments.md#annex-d-documentation-comments)  Documentation comments
  - [§D.1](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/documentation-comments.md#d1-general)  General
  - [§D.2](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/documentation-comments.md#d2-introduction)  Introduction
  - [§D.3](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/documentation-comments.md#d3-recommended-tags)  Recommended tags
  - [§D.4](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/documentation-comments.md#d4-processing-the-documentation-file)  Processing the documentation file
  - [§D.5](https://github.com/dotnet/csharpstandard/blob/draft-v6/standard/documentation-comments.md#d5-an-example)  An example

---

### 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](LDM-2013-10-07.md)

1.	Invariant meaning of names <*scrap the rule*>
2.	Type testing expression <*can’t decide on good syntax*>
3.	Local functions <*not enough scenarios*>
4.	nameof operator <*yes*>

[C# Language Design Notes for Oct 21, 2013](LDM-2013-10-21.md)

1.	Primary Constructors <*fleshed out a few more details*>
2.	Lightweight Dynamic <*we examined a much simpler approach*>

## Nov 4, 2013

[C# Language Design Notes for Nov 4, 2013](LDM-2013-11-04.md)

1. Initialized and getter-only auto-properties <*details decided*>
2. Expression-bodied function members <*details decided*>
3. Lightweight dynamic <*member access model and syntax discussed*>

## Dec 16, 2013

[C# Language Design Notes for Dec 16, 2013](LDM-2013-12-16.md)

1. Declaration expressions <*reaffirmed scope rules, clarified variable introduction*>
2. Semicolon operator <*reaffirmed enclosing parentheses*>
3. 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](LDM-2014-01-06.md)

1.	Syntactic ambiguities with declaration expressions <_a solution adopted_>
2.	Scopes for declaration expressions <_more refinement added to rules_>

## Feb 3, 2014

[C# Language Design Notes for Feb 3, 2014](LDM-2014-02-03.md)

1.  Capture of primary constructor parameters <_only when explicitly asked for with new syntax_>
2.  Grammar around indexed names <_details settled_>
3.  Null-propagating operator details <_allow indexing, bail with unconstrained generics_>


## Feb 10, 2014

[C# Language Design Notes for Feb 10, 2014](LDM-2014-02-10.md)

1.	Design of using static <_design adopted_>
2.	Initializers in structs <_allow in certain situations_>
3.	Null-propagation and unconstrained generics <_keep current design_>


## Apr 21, 2014

[C# Language Design Notes for Apr 21, 2014](LDM-2014-04-21.md)

1.	Indexed members <_lukewarm response, feature withdrawn_>
2.	Initializer scope <_new scope solves all kinds of problems with initialization_>
3.	Primary constructor bodies <_added syntax for a primary constructor body_>
4.	Assignment to getter-only auto-properties from constructors <_added_>
5.	Separate accessibility for type and primary constructor <_not worthy of new syntax_>
6.	Separate doc comments for field parameters and fields <_not worthy of new syntax_>
7.	Left associative vs short circuiting null propagation <_short circuiting_>


## May 7, 2014

[C# Language Design Notes for May 7, 2014](LDM-2014-05-07.md)

1.	protected and internal <_feature cut – not worth the confusion_>
2.	Field parameters in primary constructors <_feature cut – we want to keep the design space open_>
3.	Property declarations in primary constructors <_interesting but not now_>
4.	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](LDM-2014-05-21.md)

1.	Limit the nameof feature? <_keep current design_>
2.	Extend params IEnumerable? <_keep current design_>
3.	String interpolation <_design nailed down_>


## Jul 9, 2014

[C# Language Design Notes for Jul 9, 2014](LDM-2014-07-09.md)

1.	Detailed design of nameof <_details settled_>
2.	Design of #pragma warning extensions <_allow identifiers_>


## Aug 27, 2014

[C# Language Design Notes for Aug 27, 2014](LDM-2014-08-27.md)

1.	Allowing parameterless constructors in structs <_allow, but some unresolved details_>
2.	Definite assignment for imported structs <_revert to Dev12 behavior_>


## Sep 3, 2014

[C# Language Design Notes for Sep 3, 2014](LDM-2014-09-03.md)

1.	Removing “spill out” from declaration expressions in simple statements <_yes, remove_>
2.	Same name declared in subsequent else-if’s <_condition decls out of scope in else-branch_>
3.	Add semicolon expressions <_not in this version_>
4.	Make variables in declaration expressions readonly <_no_>

## Oct 1, 2014

[C# Language Design Notes for Oct 1, 2014](LDM-2014-10-01.md)

1. Assignment to readonly autoprops in constructors (we fleshed out details)
2. 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](LDM-2014-10-15.md)

1. nameof operator: spec v5
2. [String Interpolation for C#](http://1drv.ms/1tFUvbq)

---

### 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](LDM-2015-01-21.md)

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.

1. Design process
2. Themes
3. Features


## Jan 28, 2015

[C# Design Meeting Notes for Jan 28, 2015](LDM-2015-01-28.md)

1. Immutable types
2. Safe fixed-size buffers
3. Pattern matching
4. Records


## Feb 4, 2015

[C# Design Meeting Notes for Feb 4, 2015](LDM-2015-02-04.md)

1. Internal Implementation Only (C# 6 investigation)
2. Tuples, records and deconstruction
3. Classes with value semantics


## Feb 11, 2015

[C# Design Meeting Notes for Feb 11, 2015](LDM-2015-02-11.md)

1. Destructible types <*we recognize the problem but do not think this is quite the right solution for C#*>
2. Tuples <*we like the proposal, but there are several things to iron out*>


## Mar 4, 2015

[C# Design Meeting Notes for Mar 4, 2015](LDM-2015-03-04.md)

1. `InternalImplementationOnly` attribute <*no*>
2. Should `var x = nameof(x)` work? <*no*>
3. Record types with serialization, data binding, etc. <*keep thinking*>
4. "If I had a [billion dollars](http://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare)...": nullability <*daunting but worth pursuing*>


## Mar 10 and 17, 2015

[C# Design Meeting Notes for Mar 10 and 17, 2015](LDM-2015-03-10-17.md)

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.

1. Nullable and non-nullable reference types
2. Opt-in diagnostics
3. Representation
4. Potentially useful rules
5. Safely dereferencing nullable reference types
6. Generating null checks


## Mar 18, 2015

[C# Design Meeting Notes for Mar 18, 2015](LDM-2015-03-18.md)

In this meeting we looked over the top [C# language feature requests on UserVoice](http://visualstudio.uservoice.com/forums/121579-visual-studio/category/30931-languages-c) to see which ones are reasonable to push on further in C# 7.

1. Non-nullable reference types (*already working on them*)
2. Non-nullary constructor constraints (*require CLR support*)
3. Support for INotifyPropertyChanged (*too specific; metaprogramming?*)
4. GPU and DirectX support (*mostly library work; numeric constraints?*)
5. Extension properties and static members (*certainly interesting*)
6. More code analysis (*this is what Roslyn analyzers are for*)
7. Extension methods in instance members (*fair request, small*)
8. XML comments (*Not a language request*) 
9. Unmanaged constraint (*requires CLR support*)
10. Compilable strings (*this is what nameof is for*)
11. Multiple returns (*working on it, via tuples*)
12. ISupportInitialize (*too specific; hooks on object initializers?*)
13. ToNullable (*potentially part of nullability support*)
14. Statement lambdas in expression trees (*fair request, big feature!*)
15. 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](LDM-2015-03-24.md)

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:

1. ref returns and locals <*green*> (#118)
2. readonly locals and parameters <*green*> (#115)
3. Method contracts <*green*> (#119)
4. Does not return <*green*> (#1226)
5. Slicing <*green*> (#120)
6. Lambda capture lists <*yellow - maybe attributes on lambdas*> (#117)
7. Immutable types <*yellow in current form, but warrants more discussion*> (#159)
8. Destructible types <*yellow - fixing deterministic disposal is interesting*> (#161)
9. Move <*red*> (#160)
10. Exception contracts <*red*>
11. Static delegates <*red*>
12. 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](LDM-2015-03-25-Design-Review.md)
[Additional Notes](LDM-2015-03-25-Notes.md)

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.

1. Overall direction
2. Nullability features
3. Performance and reliability features
4. Tuples
5. Records
6. Pattern matching


## Apr 1 and Apr 8, 2015

[C# Design Meeting Notes for Apr 1 and Apr 8, 2015](LDM-2015-04-01-08.md)

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](https://github.com/mattwar/nullaby).


## Apr 14, 2015

[C# Design Meeting Notes for Apr 14, 2015](LDM-2015-04-14.md)

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](LDM-2015-04-15.md)

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.

1. Unconstrained generics
2. Overriding annotations
3. FirstOrDefault
4. TryGet


## Apr 22, 2015 (Design Review)

[C# Language Design Review, Apr 22, 2015](LDM-2015-04-22-Design-Review.md)

1. Expression tree extension
2. Nullable reference types
3. Facilitating wire formats
4. Bucketing


## May 20, 2015

[C# Design Meeting Notes for May 20, 2015](LDM-2015-05-20.md)

1. 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](LDM-2015-05-25.md)

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](LDM-2015-07-01.md)

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](LDM-2015-07-07.md)

With Eric Lippert from Coverity as an honored guest, we looked further at the nullability feature.

1. Adding new warnings
2. Generics and nullability


## Aug 18, 2015

[C# Design Meeting Notes for Aug 18, 2015](LDM-2015-08-18.md)

A summary of the design we (roughly) landed on in #5031 was put out on GitHub as #5032, and this meeting further discussed it.

1. Array creation
2. Null checking operator
3. Generics


## Sep 1, 2015

[C# Design Meeting Notes for Sep 1, 2015](LDM-2015-09-01.md)

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.

1. ref returns and ref locals
2. pattern matching


## Sep 2, 2015

[C# Design Meeting Notes for Sep 2, 2015](LDM-2015-09-02.md)

1. Extending nameof
2. What do branches mean
3. Supersedes


## Sep 8, 2015

[C# Design Meeting Notes for Sep 8, 2015](LDM-2015-09-08.md)

1. Check-in on some of our desirable features to see if we have further thoughts
2. Start brainstorming on async streams


## Oct 7, 2015 (Design Review)

[Preparatory Notes on Records and Pattern Matching for Oct 7, 2015 Design Review](LDM-2015-10-07-Design-Review.md)

## Nov 2, 2015 (Design Demo)

[Outline of demo at the Nov 2, 2015 MVP summit](LDM-2015-11-02-Design-Demo.md)

---

### 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](LDM-2016-02-29.md)

*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](LDM-2016-04-06.md)

We settled several open design questions concerning tuples and pattern matching.


## Apr 12-22, 2016

[C# Language Design Notes for Apr 12-22, 2016](LDM-2016-04-12-22.md)

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](LDM-2016-05-03-04.md)

This pair of meetings further explored the space around tuple syntax, pattern matching and deconstruction. 
1. Deconstructors - how to specify them
2. Switch conversions - how to deal with them
3. Tuple conversions - how to do them
4. Tuple-like types - how to construct them

## May 10, 2016

[C# Language Design Notes for May 10, 2016](LDM-2016-05-10.md)

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](LDM-2016-07-12.md)

Several design details pertaining to tuples and deconstruction resolved.

## Jul 13, 2016

[C# Language Design Notes for Jul 13, 2016](LDM-2016-07-13.md)

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](LDM-2016-07-15.md)

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](LDM-2016-08-24.md)

After a meeting-free period of implementation work on C# 7.0, we had a few issues come up for resolution.

1. What does it take to be task-like?
2. Scope of expression variables in initializers

## Sep 6, 2016

[C# Language Design Notes for Sep 6, 2016](LDM-2016-09-06.md)

1. How do we select `Deconstruct` methods?

## Oct 18, 2016

[C# Language Design Meeting Notes, Oct 18, 2016](LDM-2016-10-18.md)

1. Wildcard syntax
2. Design "room" between tuples and patterns
3. Local functions
4. Digit separators
5. Throw expressions
6. Tuple name mismatch warnings
7. Tuple types in `new` expressions


## Oct 25-26, 2016

[C# Language Design Meeting Notes, Oct 25-26, 2016](LDM-2016-10-25-26.md)

1. Declaration expressions as a generalizing concept
2. Irrefutable patterns and definite assignment
3. Allowing tuple-returning deconstructors
4. Avoiding accidental reuse of out variables
5. Allowing underbar as wildcard character

## Nov 1, 2016

[C# Language Design Meeting Notes, Nov 1, 2016](LDM-2016-11-01.md)

1. Abstracting over memory with `Span<T>`

## Nov 15, 2016

[C# Language Design Meeting Notes, Nov 15, 2016](LDM-2016-11-15.md)

1. Tuple name warnings
2. "Discards"

## Nov 16, 2016

[C# Language Design Meeting Notes, Nov 16, 2016](LDM-2016-11-16.md)


1. Nullable reference types

## Nov 30, 2016

[C# Language Design Meeting Notes, Nov 30, 2016](LDM-2016-11-30.md)


1. Scope of while condition expression variables
2. Mixed deconstruction
3. Unused expression variables
4. Declarations in embedded statements
5. Not-null pattern

## Dec 7 and 14, 2016

[C# Language Design Meeting Notes, Dec 7 and 14, 2016](LDM-2016-12-07-14.md)

1. Expression variables in query expressions
2. Irrefutable patterns and reachability
3. 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](LDM-2017-01-10.md)

1. Discriminated unions via "closed" types


## Jan 11, 2017
[C# Language Design Notes for Jan 11, 2017](LDM-2017-01-11.md)

1. Language aspects of [compiler intrinsics](https://github.com/dotnet/roslyn/issues/11475)


## Jan 17, 2017
[C# Language Design Notes for Jan 17, 2017](LDM-2017-01-17.md)

1. Constant pattern semantics: which equality exactly?
2. Extension methods on tuples: should tuple conversions apply?


## Jan 18, 2017
[C# Language Design Notes for Jan 18, 2017](LDM-2017-01-18.md)

1. Async streams (visit from Oren Novotny)


## Feb 21, 2017
[C# Language Design Notes for Feb 21, 2017](LDM-2017-02-21.md)

We triaged some of the [championed features](https://github.com/dotnet/csharplang/issues?q=is%3Aopen+is%3Aissue+label%3A%22Proposal+champion%22), 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.

1. Implicit interface implementation in Visual Basic *(VB 16)*
2. Delegate and enum constraints *(C# X.X)*
3. Generic attributes *(C# X.0 if even practical)*
4. Replace/original *(C# X.0 if and when relevant)*
5. Bestest betterness *(C# 7.X)*
6. Null-coalescing assignments and awaits *(C# 7.X)*
7. Deconstruction in from and let clauses *(C# 7.X)*
8. Target-typed `new` expressions *(C# 7.X)*
9. Mixing fresh and existing variables in deconstruction *(C# 7.1)*
10. Implementing `==` and `!=` on tuple types *(C# 7.X)*
11. Declarations in embedded statements *(No)*
12. Field targeted attributes on auto-properties *(C# 7.1)*


## Feb 22, 2017
[C# Language Design Notes for Feb 22, 2017](LDM-2017-02-22.md)

We went over the proposal for `ref readonly`: [Champion "Readonly ref"](https://github.com/dotnet/csharplang/issues/38).


## Feb 28, 2017
[C# Language Design Notes for Feb 28, 2017](LDM-2017-02-28.md)

1. Conditional operator over refs (*Yes, but no decision on syntax*)
2. Async Main (*Allow Task-returning Main methods*)


## Mar 1, 2017
[C# Language Design Notes for Mar 1, 2017](LDM-2017-03-01.md)

1. Shapes and extensions (*exploration*)
2. Conditional refs (*original design adopted*)


## Mar 7, 2017
[C# Language Design Notes for Mar 7, 2017](LDM-2017-03-07.md)

We continued to flesh out the designs for features currently considered for C# 7.1.

1. Default expressions (*design adopted*)
2. Field target on auto-properties (*yes*)
3. private protected (*yes, if things work as expected*)


## Mar 8, 2017
[C# Language Design Notes for Mar 8, 2017](LDM-2017-03-08.md)

We looked at default interface member implementations.

1. Xamarin interop scenario
2. Proposal
3. Inheritance from interface to class
4. Overriding and base calls
5. The diamond problem
6. Binary compatibility
7. Other semantic challenges


## Mar 15, 2017
[C# Language Design Notes for Mar 8, 2017](LDM-2017-03-15.md)

Triage of championed features

1. JSON literals
2. Fixing of captured locals
3. Allow shadowing of parameters
4. Weak delegates
5. Protocols/duck typing/concepts/type classes
6. Zero and one element tuples
7. Deconstruction in lambda parameters
8. Private protected


## Mar 21, 2017
[C# Language Design Notes for Mar 21, 2017](LDM-2017-03-21.md)

Discussion of default interface member implementations, based on [this guided tour](https://github.com/dotnet/csharplang/issues/288).

1. Concerns raised on GitHub and elsewhere
2. Inheritance?
3. Breaking name lookup on `this`
4. Events
5. Modifiers
6. Methods
7. Properties
8. Overrides
9. Reabstraction
10. Most specific override
11. Static non-virtual members
12. Accessibility levels
13. Existing programs


## Mar 28, 2017
[C# Language Design Notes for Mar 28, 2017](LDM-2017-03-28.md)

Design some remaining 7.1 features

1. Fix pattern matching restriction with generics
2. Better best common type


## Mar 29, 2017
[C# Language Design Notes for Mar 29, 2017](LDM-2017-03-29.md)

1. Nullable scenarios
2. `Span<T>` safety


## Apr 5, 2017
[C# Language Design Notes for Apr 5, 2017](LDM-2017-04-05.md)

1. Non-virtual members in interfaces
2. Inferred tuple element names
3. Tuple element names in generic constraints


## Apr 11, 2017
[C# Language Design Notes for Apr 11, 2017](LDM-2017-04-11.md)

1. Runtime behavior of ambiguous default implementation


## Apr 18, 2017
[C# Language Design Notes for Apr 18, 2017](LDM-2017-04-18.md)

1. Default implementations for event accessors in interfaces
2. Reabstraction in a class of default-implemented member
3. `sealed override` with default implementations
4. Use of `sealed` keyword for non-virtual interface members
5. Implementing inaccessible interface members
6. Implicitly implementing non-public interface members
7. Not quite implementing a member
8. asynchronous `Main`


## Apr 19, 2017
[C# Language Design Notes for Apr 19, 2017](LDM-2017-04-19.md)

1. Improved best common type
2. Diamonds with classes
3. Structs and default implementations
4. Base invocation


## May 16, 2017
[C# Language Design Notes for May 16, 2017](LDM-2017-05-16.md)

1. Triage C# 7.1 features that didn't make it
2. Look at C# 7.2 features
3. GitHub procedure around new design notes and proposals
4. Triage of championed features


## May 17, 2017
[C# Language Design Notes for May 17, 2017](LDM-2017-05-17.md)

More questions about default interface member implementations

1. Conflicting override of default implementations
2. Can the Main entry point method be in an interface?
3. Static constructors in interfaces?
4. Virtual properties with private accessors
5. Does an override introduce a member?
6. Parameter names


## May 26, 2017
[C# Language Design Notes for May 26, 2017](LDM-2017-05-26.md)

1. Native ints


## May 31, 2017
[C# Language Design Notes for May 31, 2017](LDM-2017-05-31.md)

1. Default interface members: overriding or implementing?
2. Downlevel poisoning of ref readonly in signatures
3. Extension methods with ref this and generics
4. Default in operators


## Jun 13, 2017
[C# Language Design Notes for Jun 13, 2017](LDM-2017-06-13.md)

1. Native-size ints
2. Native-size floats


## Jun 14, 2017
[C# Language Design Notes for Jun 14, 2017](LDM-2017-06-14.md)

Several issues related to default implementations of interface members

1. Virtual properties with private accessors
2. Requiring interfaces to have a most specific implementation of all members
3. Member declaration syntax revisited
4. Base calls


## Jun 27, 2017
[C# Language Design Notes for Jun 27, 2017](LDM-2017-06-27.md)

1. User-defined operators in interfaces
2. return/break/continue as expressions


## Jun 28, 2017 
[C# Language Design Notes for Jun 28, 2017](LDM-2017-06-28.md)

1. Tuple name round-tripping between C# 6.0 and C# 7.0
2. Deconstruction without `ValueTuple`
3. Non-trailing named arguments


## Jul 5, 2017
[C# Language Design Notes for Jul 5, 2017](LDM-2017-07-05.md)

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?

1. Static delegates *(8.0)*
2. Native int and IntPtr operators *(7.X)*
3. Field target *(anytime)*
4. Utf8 strings *(8.0)*
5. Slicing *(7.X)*
6. Blittable *(7.2)*
7. Ref structs *(7.2)*
8. Ref readonly *(7.2)*
9. Conditional ref *(7.2)*
10. Ref extensions on structs *(7.2)*
11. Readonly locals and params *(X.X)*
12. ref structs in tuples *(don't)*
13. Overload resolution tie breakers with long tuples *(use underlying generics)*


## Jul 26, 2017
[C# Language Design Notes for Jul 24 and 26, 2017](LDM-2017-07-26.md)

We started putting a series of stakes in the ground for nullable reference types, based on the evolving strawman proposal [here](https://github.com/dotnet/csharplang/issues/790). We're doing our first implementation of the feature based on this, and can then refine as we learn things from usage.

1. Goals
2. Nullable reference types
3. Rarely-null members


## Aug 7, 2017
[C# Language Design Notes for Aug 7, 2017](LDM-2017-08-07.md)

We continued refining the nullable reference types feature set with the aim of producing a public prototype for experimentation and learning.

1. Warnings
2. Local variables revisited
3. Opt-in mechanisms


## Aug 9, 2017

[C# Language Design Notes for Aug 9, 2017](LDM-2017-08-09.md)

We discussed how nullable reference types should work in a number of different situations.

1. Default expressions
2. Array creation
3. Struct fields
4. Unconstrained type parameters


## Aug 14, 2017

[C# Language Design Notes for Aug 14, 2017](LDM-2017-08-14.md)

We looked at the interaction between generics and nullable reference types

1. Unconstrained type parameters
2. Nullable constraints
3. Conversions between constructed types


## Aug 16, 2017

[C# Language Design Notes for Aug 16, 2017](LDM-2017-08-16.md)

1. The null-forgiving operator


## Aug 23, 2017

[C# Language Design Notes for Aug 23, 2017](LDM-2017-08-23.md)

We discussed various aspects of nullable reference types

1. How does flow analysis silence the warning
2. Problems with dotted names
3. Type inference
4. Structs with fields of non-nullable type


## Oct 4, 2017

[C# Language Design Review, Oct 4, 2017](LDM-2017-10-04.md)

We looked at nullable reference types with the reviewers, Anders Hejlsberg and Kevin Pilch.

1. Overall philosophy
2. Switches
3. Libraries
4. Dotted names
5. Type narrowing
6. The dammit operator
7. Array covariance
8. Null warnings
9. Special methods
10. Conclusion


## Oct 11, 2017

[C# Language Design Notes for Oct 11, 2017](LDM-2017-10-11.md)

We looked at the Oct 4 design review feedback for nullable reference types, and considered how to react to it.

1. Philosophy
2. Switches
3. Dotted names
4. Type narrowing
5. Dammit operator type narrowing
6. Dammit operator stickiness
7. Array covariance
8. Null warnings


## Nov 8, 2017

[C# Language Design Notes for Nov 8, 2017](LDM-2017-11-08.md)

We went over the status of the prototype for nullable reference types, to address outstanding questions and make any last minute calls before release.

1. Constructors
2. Dotted names
3. Default expressions
4. Should we track null state for nonnullable ref types?
5. Inferred types for method type inference
6. Inferred nullability in hover tips
7. Smaller things not yet done
8. Unconstrained generics
9. Other issues


## Nov 27, 2017

[C# Language Design Notes for Nov 27, 2017](LDM-2017-11-27.md)

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.

1. Interacting with existing, unannotated APIs
2. Accommodating alternative initialization patterns
3. Tracking nullable value types
4. Tracking dotted names
5. Special methods
6. 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](LDM-2018-01-03.md)

1. Scoping of expression variables in constructor initializer
2. Scoping of expression variables in field initializer
3. Scoping of expression variables in query clauses
4. Caller argument expression attribute
5. Other caller attributes
6. New constraints


## Jan 10, 2018
[C# Language Design Notes for Jan 10, 2018](LDM-2018-01-10.md)

1. Ranges and endpoint types


## Jan 18, 2018 
[C# Language Design Notes for Jan 18, 2018](LDM-2018-01-18.md)

We discussed the range operator in C# and the underlying types for it.

1. Scope of the feature
2. Range types
3. Type name
4. Open-ended ranges
5. Empty ranges
6. Enumerability
7. Language questions


## Jan 22, 2018
[C# Language Design Notes for Jan 22, 2018](LDM-2018-01-22.md)

We continued to discuss the range operator in C# and the underlying types for it.

1. Inclusive or exclusive?
2. Natural type of range expressions
3. Start/length notation


## Jan 24, 2018
[C# Language Design Notes for Jan 24, 2018](LDM-2018-01-24.md)

1. Ref reassignment
2. New constraints
3. Target typed stackalloc initializers
4. Deconstruct as ref extension method

## July 9, 2018
[C# Language Design Notes for July 9, 2018](LDM-2018-07-09.md)

1. `using var` feature
   1. Overview
   2. Tuple deconstruction grammar form
   3. `using expr;` grammar form
   4. Flow control safety
2. Pattern-based Dispose in the `using` statement
3. Relax Multiline interpolated string syntax (`$@`)

## July 11, 2018
[C# Language Design Notes for July 11, 2018](LDM-2018-07-11.md)

1. Controlling nullable reference types with feature flags
1. Interaction with NonNullTypesAttribute
1. Feature flag and 'warning waves'
1. How 'oblivious' null types interact with generics
1. Nullable and interface generic constraints

## July 16, 2018
[C# Language Design Notes for July 16, 2018](LDM-2018-07-16.md)

1. Null-coalescing assignment
   1. User-defined operators
   1. Unconstrained type parameters
   1. Throw expression the right-hand side
1. Nullable await
1. Nullable pointer access
1. Non-nullable reference types feature flag follow-up

##  August 20, 2018

[C# Language Design Notes for August 20, 2018](LDM-2018-08-20.md)

1. Remaining questions on [suppression operator](https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fdotnet%2Froslyn%2Fissues%2F28271&data=02%7C01%7C%7C6defe1e21ab54cce8d0008d606be5d23%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636703812006445395&sdata=DAdh5dev1mnr%2F5zxtvuJVcHP%2Bzewrzz4z9iuGkl%2BUHg%3D&reserved=0) (and possibly cast)
2. Does a dereference update the null-state?
3. Null contract attributes
4. Expanding the feature
5. Is T? where T : class? allowed or meaningful?
6. Typing judgments containing oblivious types
7. Unconstrained T in List\<T> then `FirstOrDefault()`. What attribute to annotate `FirstOrDefault`?

## August 22, 2018

[C# Language Design Notes for August 22, 2018](LDM-2018-08-22.md)

1. Target-typed new
1. Clarification on constraints with nullable reference types enabled

## September 5, 2018

[C# Language Design Notes for September 5, 2018](LDM-2018-09-05.md)

1. Index operator: is it a unary operator?
1. Compiler intrinsics

## September 10, 2018

[C# Language Design Notes for September 10, 2018](LDM-2018-09-10.md)

1. Nullability of constraints in inheritance and interface implementation
2. Static local functions

## Sep 19, 2018

[C# Language Design Notes for September 19, 2018](LDM-2018-09-19.md)

Triage:

1. XML doc comment features
2. New `foreach` pattern using `Length` and indexer
3. Object initializers for `readonly` members
4. `readonly` struct methods
5. `params Span<T>`
6. Nullable reference type features on `Nullable<T>`

## Sep 24, 2018

[C# Language Design Notes for September 24, 2018](LDM-2018-09-24.md)

Combined C#/F# LDM

1. What new C# features are going to require work to get F# support?
2. 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](LDM-2018-09-26.md)

1. Warning waves

## Oct 1, 2018

[C# Language Design Notes for Oct 1, 2018](LDM-2018-10-01.md)

1. Nullable type inference
2. Type parameters and nullability context

## Oct 3, 2018

[C# Language Design Notes for Oct 3, 2018](LDM-2018-10-03.md)

1. How is the nullable context expressed?
2. Async streams - which interface shape?

## Oct 10, 2018

[C# Language Design Notes for Oct 10, 2018](LDM-2018-10-10.md)

1. Pattern matching open questions

## Oct 15, 2018

[C# Language Design Notes for Oct 15, 2018](LDM-2018-10-15.md)

1. Readonly methods in structs
2. Intrinsics update with function pointers
3. Finalize syntax for async-streams. Per [last notes](https://github.com/dotnet/csharplang/blob/95c9267d0d54a9984086ca327b1f892790e6c2cf/meetings/2017/LDM-2017-08-30.md#syntax-options), the current tentative syntax is `foreach await (var x in ...) ...`.

## Oct 17, 2018

[C# Language Design Notes for Oct 17, 2018](LDM-2018-10-17.md)

1. [Open issues](https://github.com/dotnet/csharplang/issues/406) with default interface methods
1. target typed new with default constructors on structs

## Oct 22, 2018

[C# Language Design Notes for Oct 22, 2018](LDM-2018-10-22.md)

Discussion of records proposals:

1. [The existing old one](https://github.com/dotnet/csharplang/blob/master/proposals/records.md)
2. [The data classes proposal](https://github.com/dotnet/csharplang/pull/1667)

## Oct 24, 2018

- [Adding Nullable Reference Type features to Nullable Value Types](https://github.com/dotnet/csharplang/issues/1865)
- Open issues with pattern matching

## Oct 29, 2018

[C# Language Design Notes for Oct 29, 2018](LDM-2018-10-29.md)

- [Source-level opt-in to nullable reference types](https://github.com/dotnet/csharplang/issues/1939)

## Oct 31, 2018

[C# Language Design Notes for Oct 31, 2018](LDM-2018-10-31.md)

- *Design review*

## Nov 5, 2018

[C# Language Design Notes for Nov 5, 2018](LDM-2018-11-05.md)

1. Where can #nullable go?
2. Open issues with pattern matching

## Nov 14, 2018

[C# Language Design Notes for Nov 14, 2018](LDM-2018-11-14.md)

1. Base call syntax for default interface implementations
2. Switch exhaustiveness and null

## Nov 28, 2018

[C# Language Design Notes for Nov 28, 2018](LDM-2018-11-28.md)

1. Are nullable annotations part of array specifiers?
2. Cancellation of async-streams

## Dec 3, 2018

[C# Language Design Notes for Dec 3, 2018](LDM-2018-12-03.md)

1. `using` declaration open issues
2. Return type of `Range` indexer on array and FX types

## Dec 5, 2018

[C# Language Design Notes for Dec 5, 2018](LDM-2018-12-05.md)

- 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](LDM-2018-12-12.md)

- Async-streams misc. questions
- Compat issue with Dispose pattern in `foreach`

# Upcoming meetings

## Dec 17, 2018

- Review the [Nullable Reference Types Specification](https://github.com/dotnet/csharplang/blob/master/proposals/nullable-reference-types-specification.md)

## 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](LDM-2019-12-18.md)

1. Pure null checks
2. `var?`

## Dec 16, 2019

[C# Language Design Notes for Dec 16, 2019](LDM-2019-12-16.md)

1. Switch Expression as a Statement Expression (continued) (Neal, Fred)
2. Triage

## Dec 11, 2019

[C# Language Design Notes for Dec 11, 2019](LDM-2019-12-11.md)

1. 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](LDM-2019-11-25.md)

1. 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](LDM-2019-11-18.md)

1. Proposed changes for pattern-matching

## Nov 13, 2019

[C# Language Design Notes for Nov 13, 2019](LDM-2019-11-13.md)

1. Discriminated unions
2. Improve analysis of `[MaybeNull]T` values

## Nov 11, 2019

[C# Language Design Notes for Nov 11, 2019](LDM-2019-11-11.md)

1. Confirm removal of warning calling a method that returns `[MaybeNull]T`
2. Allow interpolated string constant
3. Enhancing the Common Type Specification
4. Type pattern
5. Simple name binding with target type

## Oct 30, 2019

[C# Language Design Notes for Oct 30, 2019](LDM-2019-10-30.md)

1. Function Pointer syntax
2. Enhancing the Common Type Specification

## Oct 28, 2019

[C# Language Design Notes for Oct 28, 2019](LDM-2019-10-28.md)

1. Discard parameters in lambdas and other methods
1. Enhancing the common type algorithm

## Oct 23, 2019

[C# Language Design Notes for Oct 23, 2019](LDM-2019-10-23.md)

1. New primitive types 

https://github.com/dotnet/csharplang/issues/435

## Oct 21, 2019

[C# Language Design Notes for Oct 21, 2019](LDM-2019-10-21.md)

1. Records
2. Init-only members
3. Static lambdas

## Sep 18, 2019

[C# Language Design Notes for Sep 18, 2019](LDM-2019-09-18.md)

Triage:

1. 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"

2. 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](LDM-2019-09-16.md)

- Support for Utf8 strings
- Triage remaining features out of the [8.X milestone](https://github.com/dotnet/csharplang/issues?q=is%3Aopen+is%3Aissue+milestone%3A%228.X+candidate%22)

## Sep 11, 2019

[C# Language Design Notes for Sep 11, 2019](LDM-2019-09-11.md)

1. Close https://github.com/dotnet/roslyn/issues/37313
2. Triage new proposed [9.0 features](https://github.com/dotnet/csharplang/issues?q=is%3Aopen+is%3Aissue+no%3Amilestone+label%3A%22Proposal+champion%22)
2. Finish triaging away [8.X milestone](https://github.com/dotnet/csharplang/issues?q=is%3Aopen+is%3Aissue+label%3A%22Proposal+champion%22+milestone%3A%228.X+candidate%22)

## Sep 4, 2019

[C# Language Design Notes for Sep 4, 2019](LDM-2019-09-04.md)

1. AllowNull on properties https://github.com/dotnet/roslyn/issues/37313

## Aug 28, 2019

[C# Language Design Notes for Aug 28, 2019](LDM-2019-08-28.md)

1. Triage language features

## Jul 22, 2019

[C# Language Design Notes for July 22, 2019](LDM-2019-07-22.md)

1. Discuss the [new records proposal](https://github.com/dotnet/csharplang/blob/856c335cc584eda2178f0604cc845ef200d89f97/proposals/recordsv2.md)

## Jul 17, 2019

[C# Language Design Notes for July 17, 2019](LDM-2019-07-17.md)

1. [Nullability of events](https://github.com/dotnet/roslyn/issues/34982)

1.  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](LDM-2019-07-10.md)

1. Empty switch statement
1. `[DoesNotReturn]` attribute
1. Revisiting the `param!` null-checking feature

## May 15, 2019
[C# Language Design Notes for May 15, 2019](LDM-2019-05-15.md)

- Close on nullable attributes (Mads and Steve)

## May 13, 2019
[C# Language Design Notes for May 13, 2019](LDM-2019-05-13.md)

- Close on desired rules for warning suppressions and `#nullable` interacting

## Apr 29, 2019

[C# Language Design Notes for Apr 29, 2019](LDM-2019-04-29.md)

1. Default interface implementations and `base()` calls
2. Async iterator cancellation
3. Attributes on local functions

## Apr 24, 2019

[C# Language Design Notes for Apr 24, 2019](LDM-2019-04-24.md)

MaybeNull and related nullable reference type attributes

## Apr 22, 2019

[C# Language Design Notes for Apr 22, 2019](LDM-2019-04-22.md)

1. Inferred nullable state from a finally block
2. Implied constraint for a type parameter of a partial?
3. Target-typed switch expression
4. DefaultCancellationAttribute and overriding/hiding/interface implementation

## Apr 15, 2019

[C# Language Design Notes for Apr 15, 2019](LDM-2019-04-15.md)

1. CancellationToken in iterators
2. Implied nullable constraints in nullable disabled code
3. Inheriting constraints in nullable disabled code
4. Declarations with constraints declared in #nullable disabled code
5. Result type of `??=` expression
6. Use annotation context to compute the annotations?
7. Follow-up decisions for pattern-based Index/Range

## Apr 3, 2019

[C# Language Design Notes for Apr 3, 2019](LDM-2019-04-03.md)

1. Ambiguous implementations/overrides with generic methods and NRTs
2. NRT and `dynamic`

## Apr 1, 2019

[C# Language Design Notes for Apr 1, 2019](LDM-2019-04-01.md)

1. Pattern-based Index/Range translation

2. Default interface implementations: Is object.MemberwiseClone() accessible in
an interface?


## Mar 27, 2019

[C# Language Design Notes for Mar 27, 2019](LDM-2019-03-27.md)

1. Switch expression syntax

1. Default interface implementations

    1. Reabstraction

    2. Explicit interface abstract overrides in classes

    3. `object.MemberwiseClone()`

    4. `static int P {get; set}` semantics

    5. `partial` on interface methods

2. `?` on unconstrained generic param `T`

## Mar 25, 2019

[C# Design Review Notes for Mar 25, 2019](LDM-2019-03-25.md)

We brought in the design review team to look at some of our recent and open decisions in C# LDM.

1. Nullable reference types: shipping annotations
2. Pattern-based indexing with `Index` and `Range`
3. Cancellation tokens in async streams

## Mar 19, 2019

[C# Language Design Notes for March 19, 2019](LDM-2019-03-19.md)

We held a live LDM during the MVP summit with some Q&A about C# 8 and the future

Topics:

1. Records
2. "Extension interfaces"/roles
3. Macros
4. IAsyncEnumerable
5. "Partially automatic" properties
6. More integration with reactive extensions

## Mar 13, 2019

[C# Language Design Notes for March 13, 2019](LDM-2019-03-13.md)

1. Interface "reabstraction" with default interface implementations
2. Precedence of the switch expression
3. `or` keyword in patterns
4. "Pure" null tests and the switch statement/expression

## Mar 6, 2019

[C# Language Design Notes for March 6th, 2019](LDM-2019-03-06.md)

1. Pure checks in the switch expression
2. Nullable analysis of unreachable code
3. Warnings about nullability on expressions with errors
4. Handling of type parameters that cannot be annotated
5. Should anonymous type fields have top-level nullability?
6. Element-wise analysis of tuple conversions

## Mar 4, 2019

[C# Language Design Notes for March 4, 2019](LDM-2019-03-04.md)

1. Nullable user studies
2. Interpolated string and string.Format optimizations

## Feb 27, 2019

[C# Language Design Notes for Feb 27, 2019](LDM-2019-02-27.md)

1. Allow ObsoleteAttribute on property accessors
2. More Default Interface Member questions

## Feb 25, 2019

[C# Language Design Notes for Feb 25, 2019](LDM-2019-02-25.md)

- Open issues in default interface methods (https://github.com/dotnet/csharplang/issues/406). 
    - Base calls
    - We currently have open issues around `protected`, `internal`, reabstraction, and `static` fields among others.

## Feb 20, 2019

[C# Language Design Notes for Feb 20, 2019](LDM-2019-02-20.md)

- Nullable Reference Types: Open LDM Issues https://github.com/dotnet/csharplang/issues/2201

## Feb 13, 2019

[C# Language Design Notes for Feb 13, 2019](LDM-2019-02-13.md)

- Nullable Reference Types: Open LDM Issues https://github.com/dotnet/csharplang/issues/2201

## Jan 23, 2019

[C# Language Design Notes for Jan 23, 2019](LDM-2019-01-23.md)

Function pointers ([Updated proposal](https://github.com/dotnet/csharplang/blob/master/proposals/function-pointers.md))

## Jan 16, 2019

[C# Language Design Notes for Jan 16, 2019](LDM-2019-01-16.md)

1. Shadowing in lambdas
2. Pattern-based disposal in `await foreach`

## Jan 14, 2019

[C# Language Design Notes for Jan 14, 2019](LDM-2019-01-14.md)

- Generating null-check for `parameter!`
https://github.com/dotnet/csharplang/pull/2144

## Jan 9, 2019

[C# Language Design Notes for Jan 9, 2019](LDM-2019-01-09.md)

1. GetAsyncEnumerator signature
2. Ambiguities in nullable array type syntax
2. Recursive Patterns Open Language Issues https://github.com/dotnet/csharplang/issues/2095

## Jan 7, 2019

[C# Language Design Notes for Jan 7, 2019](LDM-2019-01-07.md)

Nullable:

1. Variance in overriding/interface implementation
2. 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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-12-16.md)

- List patterns
- Definite assignment changes

## Dec 14, 2020

[C# Language Design Notes for December 14th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-12-14.md)

- List patterns

## Dec 7, 2020

[C# Language Design Notes for December 7th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-12-07.md)

- Required Properties

## Dec 2, 2020

[C# Language Design Notes for December 2nd, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-12-02.md)

- Partner scenarios in roles and extensions

## Nov 16, 2020

[C# Language Design Notes for November 16th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-11-16.md)

- Triage

## Nov 11, 2020

[C# Language Design Notes for November 11th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-11-11.md)

- IsRecord in metadata
- Triage

## Nov 4, 2020

[C# Language Design Notes for November 4th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-11-04.md)

- Nullable parameter defaults
- Argument state after call for AllowNull parameters

## Oct 26, 2020

[C# Language Design Notes for October 26st, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-10-26.md)

- Pointer types in records
- Triage

## Oct 21, 2020

[C# Language Design Notes for October 21st, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-10-21.md)

- Primary Constructors
- Direct Parameter Constructors

## Oct 14, 2020

[C# Language Design Notes for October 14th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-10-14.md)

- Triage
- Milestone Simplification

## Oct 12, 2020

[C# Language Design Notes for October 12th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-10-12.md)

- General improvements to the `struct` experience (continued)

## Oct 7, 2020

[C# Language Design Notes for October 7th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-10-07.md)

- `record struct` syntax
- `data` members redux
- `ReadOnlySpan<char>` patterns

## Oct 5, 2020

[C# Language Design Notes for October 5th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-10-05.md)

- `record struct` primary constructor defaults
- Changing the member type of a primary constructor parameter
- `data` members

## Sep 30, 2020

[C# Language Design Notes for September 30th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-09-30.md)

- `record structs`
    - `struct` equality
    - `with` expressions
    - Primary constructors and `data` properties

## Sep 28, 2020

[C# Language Design Notes for September 28th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-09-28.md)

- Warning on `double.NaN`
- Triage

## Sep 23, 2020

[C# Language Design Notes for September 23rd, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-09-23.md)

- General improvements to the `struct` experience

## Sep 16, 2020

[C# Language Design Notes for September 16th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-09-16.md)

- Required Properties
- Triage

## Sep 14, 2020

[C# Language Design Notes for September 14th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-09-14.md)

- 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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-09-09.md)

- 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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-08-24.md)

- Warnings on types named `record`
- `base` calls on parameterless `record`s
- Omitting unnecessary synthesized `record` members
- [`record` `ToString` behavior review](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-9.0/records.md#printing-members-printmembers-and-tostring-methods)
    - Behavior of trailing commas
    - Handling stack overflows
    - Should we omit the implementation of `ToString` on `abstract` records
    - Should we call `ToString` prior to `StringBuilder.Append` on 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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-07-27.md)

- [Improved nullable analysis in constructors](https://github.com/RikkiGibson/csharplang/blob/nullable-ctor/proposals/nullable-constructor-analysis.md) (Rikki)
- [Equality operators (`==` and `!=`) in records](https://github.com/dotnet/csharplang/issues/3707#issuecomment-661800278) (Fred)
- `.ToString()` or `GetDebuggerDisplay()` on records? (Julien)
- Restore W-warning to `T t = default;` for generic `T`, now you can write `T?`? (Julien) 

## Jul 20, 2020

[C# Language Design Notes for July 20th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-07-20.md)

- [struct private fields in definite assignment](https://github.com/dotnet/csharplang/issues/3431) (Neal/Julien)
    - [Proposal 1](https://github.com/dotnet/roslyn/issues/30194#issuecomment-657858716)
    - [Proposal 2](https://github.com/dotnet/roslyn/issues/30194#issuecomment-657900257)
- Finish [Triage](https://github.com/dotnet/csharplang/issues?q=is%3Aopen+is%3Aissue+label%3A%22Proposal+champion%22+no%3Amilestone)
- Records-related features to pick up in the next version of C# (Mads)


## Jul 13, 2020

[C# Language Design Notes for July 13th, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-07-13.md)

- Triage open issues

## Jul 6, 2020

[C# Language Design Notes for July 6, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-07-06.md)

- [Repeat Attributes in Partial Members](https://github.com/RikkiGibson/csharplang/blob/repeated-attributes/proposals/repeat-attributes.md) (Rikki)
- `sealed` on `data` members
- [Required properties](https://github.com/dotnet/csharplang/issues/3630) (Fred)


## Jul 1, 2020

[C# Language Design Notes for July 1, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-07-01.md)

- [Non-defaultable struct types](https://github.com/dotnet/csharplang/issues/99#issuecomment-601792573) (Sam, Chuck)
- Confirm unspeakable `Clone` method and long-term implications (Jared/Julien)

## Jun 29, 2020

[C# Language Design Notes for June 29, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-29.md)

- [Static interface members](https://github.com/Partydonk/partydonk/issues/1)  (Miguel, Aaron, Mads, Carol)

## Jun 24, 2020

[C# Language Design Notes for June 24, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-24.md)

- Parameter null checking: finalize syntax
- https://github.com/dotnet/csharplang/issues/3275 Variance on static interface members (Aleksey)
- [Function pointer question](https://github.com/dotnet/roslyn/issues/39865#issuecomment-647692516) (Fred)


## Jun 22, 2020

[C# Language Design Notes for June 22, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-22.md)

1. Data properties

1. 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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-17.md)

1. Null-suppression & null-conditional operator
1. `parameter!` syntax
1. `T??`

## Jun 15, 2020

[C# Language Design Notes for June 15, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-15.md)

Record:

1. `modreq` for init accessors

1. Initializing `readonly` fields in same type

1. `init` methods

1. Equality dispatch

1. Confirming some previous design decisions

1. `IEnumerable.Current`

## Jun 10, 2020

[C# Language Design Notes for June 10, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-10.md)

- https://github.com/dotnet/csharplang/issues/1711 Roles and extensions

## Jun 1, 2020

[C# Language Design Notes for June 1, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-06-01.md)

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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-05-27.md)

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](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-05-11.md)

Records

## May 6, 2020

[C# Language Design Notes for May 6, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-05-06.md)

1. Target-typing ?: when the natural type isn't convertible to the target type.
1. Allow `if (x is not string y)` pattern.
1. Open issues in extension `GetEnumerator`
1. Args in top-level programs

## May 4, 2020

[C# Language Design Notes for May 4, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-05-04.md)

1. Reviewing design review feedback

## April 27, 2020

[C# Language Design Notes for April 27, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-27.md)

Records: positional & primary constructors

## April 20, 2020

[C# Language Design Notes for April 20, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-20.md)

Records: Factories

## April 15, 2020

[C# Language Design Notes for April 15, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-15.md)

1. Non-void and non-private partial methods
2. Top-level programs

## April 13. 2020

[C# Language Design Notes for April 13, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-13.md)

1. Roadmap for records
2. Init-only properties

## April 8, 2020

[C# Language Design Notes for April 8, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-08.md)

1. `e is dynamic` pure null check
2. Target typing `?:`
3. Inferred type of an `or` pattern
4. Module initializers

## April 6, 2020

[C# Language Design Notes for April 6, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-06.md)

1. Record Monday: Init-only members

## April 1, 2020

[C# Language Design Notes for April 1, 2020](https://github.com/dotnet/csharplang/blob/master/meetings/2020/LDM-2020-04-01.md)

1. Function pointer design adjustments

2. `field` keyword in properties

## March 30, 2020

1. Record Monday

[C# Language Design Notes for March 30, 2020](LDM-2020-03-30.md)

## March 25, 2020

[C# Language Design Notes for March 25, 2020](LDM-2020-03-25.md)

1. Open issues with native int

2. Open issues with target-typed new

## March 23, 2020

[C# Language Design Notes for March 23, 2020](LDM-2020-03-23.md)

1. Triage
2. Builder-based records

## March 9, 2020

[C# Language Design Notes for March 9, 2020](LDM-2020-03-09.md)

1. Simple programs

2. Records

## Feb 26, 2020

[C# Language Design Notes for Feb. 26, 2020](LDM-2020-02-26.md)

Design Review

## Feb 24

[C# Language Design Notes for Feb. 24, 2020](LDM-2020-02-24.md)

Taking another look at "nominal" records

## Feb 19

[C# Language Design Notes for Feb. 19, 2020](LDM-2020-02-19.md)

State-based value equality

## Feb 12

[C# Language Design Notes for Feb. 12, 2020](LDM-2020-02-12.md)

Records

## Feb 10

[C# Language Design Notes for Feb. 10, 2020](LDM-2020-02-10.md)

Records

## Feb 5

[C# Language Design Notes for Feb. 5, 2020](LDM-2020-02-05.md)

- 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](LDM-2020-02-03.md)

Value Equality

## Jan 29, 2020

[C# Language Design Notes for Jan. 29, 2020](LDM-2020-01-29.md)

Records: "With-ers"

## Jan 22, 2020

[C# Language Design Notes for Jan 22, 2020](LDM-2020-01-22.md)

1. Top-level statements and functions
2. Expression Blocks

## Jan 15, 2020

[C# Language Design Notes for Jan 15, 2020](LDM-2020-01-15.md)

Records

1. "programming with data"
1. Decomposing subfeatures of records

## Jan 8, 2020

[C# Language Design Notes for Jan 8, 2020](LDM-2020-01-08.md)

1. Unconstrained type parameter annotation
2. Covariant returns

## Jan 6, 2020

[C# Language Design Notes for Jan 6, 2020](LDM-2020-01-06.md)

1. Use attribute info inside method bodies
1. Making Task-like types covariant for nullability
1. Casting to non-nullable reference type
1. 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](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-12-15.md)

1. Required parsing
2. Warnings for parameterless struct constructor

## Dec 1, 2021

[C# Language Design Notes for December 1st, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-12-01.md)

1. Roles and extensions

## Nov 10, 2021

[C# Language Design Notes for November 10th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-11-10.md)

1. Self types

## Nov 3, 2021

[C# Language Design Notes for November 3rd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-11-03.md)

1. Name shadowing in local functions
2. `params Span<T>`

## Nov 1, 2021

[C# Language Design Notes for November 1st, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-11-01.md)

1. Order of evaluation for Index and Range
2. Collection literals

## Oct 27, 2021

[C# Language Design Notes for October 27th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-10-27.md)

1. UTF-8 String Literals
2. Readonly modifiers for primary constructors

## Oct 25, 2021

[C# Language Design Notes for October 25th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-10-25.md)

1. Required members
2. Delegate type argument improvements

## Oct 20, 2021

[C# Language Design Notes for October 20th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-10-20.md)

1. Open questions in list patterns
    1. Types that define both Length and Count
    2. Slices that return null
2. Primary constructors

## Oct 13, 2021

[C# Language Design Notes for October 13th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-10-13.md)

1. Revisiting DoesNotReturn
2. Warning on lowercase type names
3. Length pattern backcompat

## Sep 22, 2021

[C# Language Design Notes for September 22nd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-22.md)

1. Open questions in list patterns
    1. Breaking change confirmation
    2. Positional patterns on ITuple
    3. Slicing rules
    4. Slice syntax recommendations
    5. Other list pattern features
2. Nested members in `with` and object creation
3. CallerIdentityAttribute
4. Attributes on `Main` for top level programs

## Sep 20, 2021

[C# Language Design Notes for September 20th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-20.md)

1. Lambda breaking changes
2. Newlines in non-verbatim interpolated strings
3. Object initializer event hookup
4. Type alias improvements

## Sep 15, 2021

[C# Language Design Notes for September 15th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-15.md)

* Feedback from the C# standardization committee
* Permit pattern variables under disjunctive patterns

## Sep 13, 2021

[C# Language Design Notes for September 13th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-13.md)

1. Feedback on static abstracts in interfaces

## Sep 1, 2021

[C# Language Design Notes for September 1st, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-01.md)

1. Lambda expression conversions to `Delegate`
2. C# 11 Initialization Triage
    1. Required properties
    2. Primary constructors
    3. Immutable collection initializers

## Aug 30, 2021

[C# Language Design Notes for August 30th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-08-30.md)

1. C# 11 Initial Triage
    1. Generic attributes
    2. List patterns
    3. Static abstracts in interfaces
    4. Declarations under `or` patterns
    5. Records and initialization
    6. Discriminated unions
    7. Params `Span<T>`
    8. Statements as expressions
    9. Expression trees
    10. Type system extensions

## Aug 25, 2021

[C# Language Design Notes for August 25th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-08-25.md)

1. Interpolated string handler user-defined conversion recommendations
2. Interpolated string handler additive expressions

## Aug 23, 2021

[C# Language Design Notes for August 23rd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-08-23.md)

1. Nullability differences in partial type base clauses
2. Top-level statements default type accessibility
3. Lambda expression and method group type inference issues
    1. Better function member now ambiguous in some cases
    2. Conversions from method group to `object`
4. Interpolated string betterness in older language versions

## Jul 26, 2021

[C# Language Design Notes for July 26th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-07-26.md)

1. Lambda conversion to System.Delegate
2. Direct invocation of lambdas
3. Speakable names for top-level statements

## Jul 19, 2021

[C# Language Design Notes for July 19th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-07-19.md)

1. Global using scoping revisited

## Jul 12, 2021

[C# Language Design Notes for July 12th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-07-12.md)

1. C# 10 Feature Status
2. Speakable names for top-level statements

## Jun 21, 2021

[C# Language Design Notes for June 21st, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-06-21.md)

1. Open questions for lambda return types
2. List patterns in recursive patterns
3. Open questions in async method builder
4. Email Decision: Duplicate global using warnings

## Jun 14, 2021

[C# Language Design Notes for June 14th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-06-14.md)

1. Open questions in CallerArgumentExpressionAttribute
2. List pattern syntax

## Jun 7, 2021

[C# Language Design Notes for June 7th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-06-07.md)

1. Runtime checks for parameterless struct constructors
2. List patterns
    a. Exhaustiveness
    b. Length pattern feedback

## Jun 2, 2021

[C# Language Design Notes for June 2nd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-06-02.md)

1. Enhanced #line directives
2. Lambda return type parsing
3. Records with circular references

## May 26, 2021

[C# Language Design Notes for May 26th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-05-26.md)

1. Open questions in list patterns

## May 19, 2021

[C# Language Design Notes for May 19th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-05-19.md)

1. Triage
    1. Checked operators
    2. Relaxing shift operator requirements
    3. Unsigned right shift operator
    4. Opaque parameters
    5. Column mapping directive
    6. Only allow lexical keywords
    7. Allow nullable types in declaration patterns
2. Protected interface methods

## May 17, 2021

[C# Language Design Notes for May 17th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-05-17.md)

1. Raw string literals

## May 12, 2021

[C# Language Design Notes for May 12th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-05-12.md)

1. Experimental attribute
2. Simple C# programs

## May 10, 2021

[C# Language Design Notes for May 10th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-05-10.md)

- Lambda improvements

## May 3, 2021

[C# Language Design Notes for May 3rd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-05-03.md)

1. Improved interpolated strings
2. Open questions in record structs

## Apr 28, 2021

[C# Language Design Notes for April 28th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-28.md)

1. Open questions in record and parameterless structs
2. Improved interpolated strings

## Apr 21, 2021

[C# Language Design Notes for April 21st, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-21.md)

1. Inferred types for lambdas and method groups
2. Improved interpolated strings

## Apr 19, 2021

[C# Language Design Notes for April 19th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-19.md)

1. Improved interpolated strings

## Apr 14, 2021

[C# Language Design Notes for April 14th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-14.md)

1. Shadowing in record types
2. `field` keyword
3. Improved interpolated strings

## Apr 12, 2021

[C# Language Design Notes for April 12th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-12.md)

1. List patterns
2. Lambda improvements

## Apr 7, 2021

[C# Language Design Notes for April 7th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-07.md)

- MVP session

## Apr 5, 2021

[C# Language Design Notes for April 5th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-04-05.md)

1. Interpolated string improvements
2. Abstract statics in interfaces

## Mar 29, 2021

[C# Language Design Notes for March 29th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-03-29.md)

1. Parameterless struct constructors
2. AsyncMethodBuilder

## Mar 24, 2021

[C# Language Design Notes for March 24th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-03-24.md)

1. Improved interpolated strings
2. `field` keyword

## Mar 22, 2021

- *Design review* (No notes published)

## Mar 15, 2021

[C# Language Design Notes for March 15th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-03-15.md)

1. Interpolated string improvements
2. Global usings

## Mar 10, 2021

[C# Language Design Notes for March 10th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-03-10.md)

1. Property improvements
    1. `field` keyword
    2. Property scoped fields
2. Parameterless struct constructors

## Mar 3, 2021

[C# Language Design Notes for March 3rd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-03-03.md)

1. Natural type for lambdas
    1. Attributes
    2. Return types
    3. Natural delegate types
2. Required members

## Mar 1, 2021

[C# Language Design Notes for March 1st, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-03-01.md)

1. Async method builder override
2. Async exception filters
3. Interpolated string improvements

## Feb 24, 2021

[C# Language Design Notes for February 24th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-02-24.md)

1. Static abstract members in interfaces

## Feb 22, 2021

[C# Language Design Notes for February 22nd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-02-22.md)

1. Global `using`s
2. `using` alias improvements

## Feb 10, 2021

[C# Language Design Notes for February 10th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-02-10.md)

1. Follow up on record equality
2. Namespace directives in top-level programs
3. Global usings
4. Triage
    1. Nominal And Collection Deconstruction
    2. Sealed record ToString
    3. `using` aliases for tuple syntax
    4. Raw string literals
    5. Allow `var` variables to be used in a `nameof` in their initializers
    6. First-class native integer support
    7. Extended property patterns

## Feb 8, 2021

[C# Language Design Notes for February 8th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-02-08.md)

1. Virtual statics in interfaces
    1. Syntax Clashes
    2. Self-applicability as a constraint
    3. Relaxed operator operand types
    4. Constructors

## Feb 3, 2021

[C# Language Design Notes for February 3rd, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-02-03.md)

1. List patterns on `IEnumerable`
2. Global usings

## Jan 27, 2021

[C# Language Design Notes for January 27th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-01-27.md)

1. Init-only access on conversion on `this`
2. Record structs
    1. Copy constructors and Clone methods
    2. `PrintMembers`
    3. Implemented equality algorithms
    4. Field initializers
    5. GetHashcode determinism

## Jan 13, 2021

[C# Language Design Notes for January 13th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-01-13.md)

- Global usings
- File-scoped namespaces

## Jan 11, 2021

[C# Language Design Notes for January 11th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-01-11.md)

- Required properties simple form

## Jan 6, 2021

[C# Language Design Notes for January 5th, 2021](https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-01-05.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-12-14.md)

- Breaking change for raw string literals
- Program as internal by default

## Wed Nov 30, 2022

[C# Language Design Meeting for November 30th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-11-30.md)

- Revise `MemberNotNull` for `required`
- `params Span<T>`

## Wed Nov 2, 2022

[C# Language Design Meeting for November 2nd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-11-02.md)

- Partial Properties
- Default parameter values in lambdas

## Wed Oct 26, 2022

[C# Language Design Meeting for October 26th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-10-26.md)

- Null-conditional assignment

## Wed Oct 19, 2022

[C# Language Design Meeting for October 19th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-10-19.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-10-17.md)

- Primary Constructors
- Permit variable declarations under disjunctive patterns

## Wed Oct 12, 2022

[C# Language Design Meeting for October 12th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-10-12.md)

- Keywordness of `field`

## Mon Oct 10, 2022

[C# Language Design Meeting for October 10th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-10-10.md)

- Working set triage
    - Static classes implementing interfaces
    - Null-conditional assignment
    - Lambda default parameters
- Working groups
- `params` support for lambda default parameters
    - Conclusion

## Wed Oct 5, 2022

[C# Language Design Meeting for October 5th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-10-05.md)

- Review of `ref` fields
    - `RefSafetyRulesAttribute`
    - Return-only scope

## Wed Sep 28, 2022

[C# Language Design Meeting for September 28th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-09-28.md)

- Working set triage
    - Discriminated Unions
    - Collection literals
    - Nullability improvements
    - Ungrouped

## Mon Sep 26, 2022

[C# Language Design Meeting for September 26th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-09-26.md)

- Working set triage
    - Roles & Extensions
    - Discriminated Unions
    - Bridging statements and expressions
    - Construction improvements
    - `ref struct` improvements
    - `params` improvements
    - Ungrouped

## Wed Sep 21, 2022

[C# Language Design Meeting for September 21st, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-09-21.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-08-31.md)

1. Short term work triage
    1. Partial properties
    2. Using aliases for any type
    3. Null-conditional assignment
    4. `await?`
    5. `params IEnumerable`
    6. Discriminated Unions
    7. Roles
    8. `pragma warning enable`
    9. Ignored directives support
    10. Primary constructors
    11. Switch expression as a statement

## Wed Aug 24, 2022

[C# Language Design Meeting for August 24th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-08-24.md)

1. C# feature triage

## Wed Aug 10, 2022

[C# Language Design Meeting for August 10th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-08-10.md)

1. `required` property default nullability

## Wed Aug 3, 2022

[C# Language Design Meeting for August 3rd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-08-03.md)

1. `ref` fields specification updates

## Wed Jul 27, 2022

[C# Language Design Meeting for July 27th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-07-27.md)

1. `scoped` for local declarations

## Wed Jul 13, 2022

[C# Language Design Meeting for July 13th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-07-13.md)

1. Lambda default parameters

## Jun 29, 2022

[C# Language Design Meeting for June 29th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-06-29.md)

- UTF-8 literal concatenation operator

## Jun 6, 2022

[C# Language Design Meeting for June 6, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-06-06.md)

1. Open issues for `ref` fields
2. Open issues for static virtual members
3. Concatenation of Utf8 literals

## May 23, 2022

[C# Language Design Meeting for May 23rd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-05-23.md)

1. Open issues for `ref` fields

## May 11, 2022

[C# Language Design Meeting for May 11th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-05-11.md)

1. Inconsistency around accessibility checks for interface implementations
2. `ref readonly` method parameters
3. Pattern matching with UTF-8 String Literals

## May 9, 2022

[C# Language Design Meeting for May 9th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-05-09.md)

1. Numeric IntPtr
2. Ref readonly parameters

## May 2, 2022

[C# Language Design Meeting for May 2nd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-05-02.md)

- Effect of `SetsRequiredMembers` on nullable analysis
- `field` questions
    - Partial overrides of virtual properties
    - Definite assignment of manually implemented setters

## Apr 27, 2022

[C# Language Design Meeting for April 27th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-04-27.md)

- Default parameter values in lambdas
- Null-conditional assignment

## Apr 25, 2022

[C# Language Design Meeting for April 25th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-04-25.md)

- `ref readonly` method parameters
- Inconsistencies around accessibility checks for interface implementations

## Apr 18, 2022

[C# Language Design Meeting for April 18th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-04-18.md)

1. Issues with Utf8 string literals
2. Ref and ref struct scoping modifiers

## Apr 13, 2022

[C# Language Design Meeting for April 13th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-04-13.md)

1. Parameter null checking
2. File-scoped types

## Apr 11, 2022

[C# Language Design Meeting for April 11th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-04-11.md)

1. Relax restrictions on braces on raw interpolated strings
2. Self-type stopgap attribute

## Apr 6, 2022

[C# Language Design Meeting for April 6th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-04-06.md)

1. Unresolved questions for static virtual members
2. Parameter null checking

## Mar 30, 2022

[C# Language Design Meeting for March 30th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-30.md)

1. Definite assignment in struct constructors calling `: this()`
2. `file private` accessibility

## Mar 28, 2022

[C# Language Design Meeting for March 28th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-28.md)

1. Variable declarations under disjunctive patterns
2. Type hole in static abstracts
3. Self types

## Mar 23, 2022

[C# Language Design Meeting for March 23rd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-23.md)

1. Open questions in required members
    1. Emitting `SetsRequiredMembers` for record copy constructors
    2. Should `SetsRequiredMembers` suppress errors?
    3. Unsettable members
    4. Ref returning properties
    5. Obsolete members

## Mar 21, 2022

[C# Language Design Meeting for March 21st, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-21.md)

1. file private visibility
2. Open question in semi-auto properties
3. Open question in required members

## Mar 14, 2022

[C# Language Design Meeting for March 14th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-14.md)

1. file private visibility

## Mar 9, 2022

[C# Language Design Meeting for March 9th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-09.md)

1. Ambiguity of `..` in collection expressions
2. `main` attributes
3. `nameof(param)`

## Mar 7, 2022

- Design review. No published notes.

## Mar 2, 2022

[C# Language Design Meeting for March 2nd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-03-02.md)

1. Open questions in `field`
    1. Initializers
    2. Property assignment in structs

## Feb 28, 2022

[C# Language Design Meeting for February 28th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-02-28.md)

1. Ref fields
    1. Encoding strategy
    2. Keywords vs Attributes
    3. Breaking existing lifetime rules

## Feb 23, 2022

[C# Language Design Meeting for February 23rd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-02-23.md)

1. Pattern matching over `Span<char>`
2. Checked operators

## Feb 16, 2022

[C# Language Design Meeting for February 16th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-02-16.md)

1. Open questions in `field`
2. Triage
    1. User-defined positional patterns
    2. Delegate type arguments improvements
    3. Practical existential types for interfaces
    4. Static abstract interfaces and static classes

## Feb 14, 2022

[C# Language Design Meeting for February 14th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-02-14.md)

1. Definite assignment in structs
2. Checked operators

## Feb 9, 2022

[C# Language Design Meeting for February 9th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-02-09.md)

1. Continue discussion of checked user-defined operators
2. Review proposal for unsigned right shift operator
3. Review proposal for relaxing shift operator requirements
4. Triage champion features

## Feb 7, 2022

[C# Language Design Meeting for February 7th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-02-07.md)

1. Checked user-defined operators

## Jan 26, 2022

[C# Language Design Notes for January 26th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-01-26.md)

1. Open questions in UTF-8 string literals

## Jan 24, 2022

[C# Language Design Notes for January 24th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-01-24.md)

1. Required members metadata representation
2. Default implementations of abstract statics
3. Triage
    1. Nested members in with and object creation
    2. Binary Compat Only
    3. Attribute for passing caller identity implicitly
    4. Attributes on Main for top level programs

## Jan 12, 2022

[C# Language Design Notes for January 12th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-01-12.md)

1. Open questions for `field`
    1. Initializers for semi-auto properties
    2. Definite assignment for struct types
2. Generic Math Operator Enhancements

## Jan 5, 2022

[C# Language Design Notes for January 5th, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-01-05.md)

1. Required Members

## Jan 3, 2022

[C# Language Design Notes for January 3rd, 2022](https://github.com/dotnet/csharplang/blob/main/meetings/2022/LDM-2022-01-03.md)

1. Slicing assumptions in list patterns, revisited
2. 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-12-11.md)

- Extensions

## Mon Dec 4, 2023

[C# Language Design Meeting for December 4th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-12-04.md)

- Lock statement pattern
- `BinaryCompatOnlyAttribute`

## Mon Nov 27, 2023

[C# Language Design Meeting for November 27th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-11-27.md)

- Pattern order optimizations
- Subarray slicing breaking change
- Making patterns constant expressions

## Wed Nov 15, 2023

[C# Language Design Meeting for November 15th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-11-15.md)

- `params` improvements
- Nullability analysis of collection expressions
- Evaluation of implicit indexers in object initializers

## Mon Oct 16, 2023

[C# Language Design Meeting for October 16th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-10-16.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-10-11.md)

- C# spec update
- Collection expressions

## Mon Oct 9, 2023

[C# Language Design Meeting for October 9th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-10-09.md)

- 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
    - `is` expression evaluating `const` expression should be considered constant

## Wed Oct 4, 2023

[C# Language Design Meeting for October 4th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-10-04.md)

- Trimming and AOT

## Mon Oct 2, 2023

[C# Language Design Meeting for October 2nd, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-10-02.md)

- Collection expressions

## Wed Sept 27, 2023

[C# Language Design Meeting for September 27th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-09-27.md)

- Collection expressions

## Mon Sept 25, 2023

[C# Language Design Meeting for September 25th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-09-25.md)

- Primary constructors
- Defining well-defined behavior for collection expression types

## Wed Sept 20, 2023

[C# Language Design Meeting for September 20th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-09-20.md)

- Collection expressions
    - Type inference from spreads
    - Overload resolution fallbacks

## Mon Sept 18, 2023

[C# Language Design Meeting for September 18th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-09-18.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-08-16.md)

- Ref-safety scope for collection expressions
- Experimental attribute

## Mon Aug 14, 2023

[C# Language Design Meeting for August 14th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-08-14.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-08-09.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-08-07.md)

- Improvements to method group natural types

## Mon Jul 31, 2023

[C# Language Design Meeting for July 31st, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-07-31.md)

- Primary constructor parameters and `readonly`

## Wed Jul 26, 2023

[C# Language Design Meeting for July 26th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-07-26.md)

- Primary constructor parameters and `readonly`

## Mon Jul 24, 2023

[C# Language Design Meeting for July 24th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-07-24.md)

- Method group natural types with extension members
- Interceptors

## Mon Jul 17, 2023

[C# Language Design Meeting for July 17th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-07-17.md)

- Compiler Check-in
- `readonly` parameters

## Wed Jul 12, 2023

[C# Language Design Meeting for July 12th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-07-12.md)

- Collection Literals
    - `Create` methods
    - Extension methods
- Interceptors

## Mon Jun 19, 2023

[C# Language Design Meeting for June 19th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-06-19.md)

- Prefer spans over interfaces in overload resolution
- Collection literals

## Mon Jun 5, 2023

[C# Language Design Meeting for June 5th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-06-05.md)

- Collection literals

## Wed May 31, 2023

[C# Language Design Meeting for May 31st, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-05-31.md)

- Collection literals

## Wed May 17, 2023

[C# Language Design Meeting for May 17th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-05-17.md)

- Inline arrays

## Mon May 15, 2023

[C# Language Design Meeting for May 15th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-05-15.md)

- Breaking Change Warnings
- Primary Constructors

## Mon May 8, 2023

[C# Language Design Meeting for May 8th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-05-08.md)

- Primary Constructors

## Wed May 3, 2023

[C# Language Design Meeting for May 3rd, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-05-03.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-05-01.md)

- Fixed Size Buffers
- `lock` statement improvements

## Wed Apr 26, 2023

[C# Language Design Meeting for April 26th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-04-26.md)

- Collection literals

## Mon Apr 10, 2023

[C# Language Design Meeting for April 10th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-04-10.md)

* Fixed Size Buffers

## Mon Apr 3, 2023

[C# Language Design Meeting for April 3rd, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-04-03.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-03-13.md)

- Unsafe in aliases hole
- Attributes on primary ctors

## Wed Mar 8, 2023

[C# Language Design Meeting for March 8th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-03-08.md)

- Discriminated Unions
- Limited Breaking Changes in C#

## Wed Mar 1, 2023 (Shorter meeting)

[C# Language Design Meeting for March 1st, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-03-01.md)

- Discriminated Unions Summary

## Mon Feb 27, 2023

[C# Language Design Meeting for February 27th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-02-27.md)

- Interceptors

## Wed Feb 22, 2023

[C# Language Design Meeting for February 22nd, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-02-22.md)

- Primary Constructors
- Extensions

## Wed Feb 15, 2023

[C# Language Design Meeting for February 15th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-02-15.md)

- Open questions in primary constructors
    - Capturing parameters in lambdas
    - Assigning to `this` in a `struct`

## Wed Feb 1, 2023

[C# Language Design Meeting for February 1st, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-02-01.md)

- Position of `unsafe` in aliases
- Roles and extensions

## Wed Jan 18, 2023

[C# Language Design Meeting for January 18th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-01-18.md)

- Nullable post-conditions and `async`/`await`
- Semi-colon bodies for type declarations

## Wed Jan 11, 2023

[C# Language Design Meeting for January 11th, 2023](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-01-11.md)

- `using` aliases 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](https://github.com/dotnet/csharplang/blob/main/meetings/2023/LDM-2023-01-09.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-12-09.md)

- First-class span open questions
- Simple Lambda Parameters
- Collection expression arguments

### Wed Dec 4, 2024

[C# Language Design Meeting for December 4th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-12-04.md)

- First-class span open questions
    - Preferring `ReadOnlySpan<T>` over `Span<T>` conversions
    - Conversions in expression trees

### Wed Nov 20, 2024

[C# Language Design Meeting for November 20th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-11-20.md)

- Extensions
- Dictionary Expressions

### Wed Nov 13, 2024

[C# Language Design Meeting for November 13th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-11-13.md)

- Extensions

### Mon Nov 4, 2024

[C# Language Design Meeting for November 4th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-11-04.md)

- `not` and `or` patterns
- Notes on notes

### Wed Oct 30, 2024

[C# Language Design Meeting for October 30th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-30.md)

- Extensions

### Mon Oct 28, 2024

[C# Language Design Meeting for October 28th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-28.md)

- Increment and Decrement Operators in null conditional access
- `yield` in `try` / `catch`

### Mon Oct 21, 2024

Canceled

### Wed Oct 16, 2024

[C# Language Design Meeting for October 16th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-16.md)

- Simple lambda parameters
- Unbound generic types in `nameof`
- `typeof` string constants

### Mon Oct 14, 2024

[C# Language Design Meeting for October 14th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-14.md)

- Extensions

### Wed Oct 9, 2024

[C# Language Design Meeting for October 9th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-09.md)

- Extensions

### Mon Oct 7, 2024

[C# Language Design Meeting for October 7th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-07.md)

- Extensions

### Wed Oct 2, 2024

[C# Language Design Meeting for October 2nd, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-10-02.md)

- Open questions in field
    - `readonly` contexts and `set`
    - `Conditional` code
    - Interface properties and auto-accessors
- Extensions

### Mon Sep 30, 2024

[C# Language Design Meeting for September 30th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-09-30.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-09-18.md)

- Nullability in `field`
- Extensions naming

### Wed Sep 11, 2024

[C# Language Design Meeting for September 11th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-09-11.md)

- Better conversion from collection expression and `params` collections
- First-class span types
    - `Reverse`
    - New ambiguities
    - Covariant arrays

### Wed Sep 4, 2024

[C# Language Design Meeting for September 4th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-09-04.md)

- Triage (no milestone)
    - Type inference using method group natural type
    - Collection Expressions Next (C#13 and beyond)
    - Dictionary expressions
    - Extending patterns to "as"
    - `params in` parameters
- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-08-28.md)

- Nullable in `ref` ternaries
- Block-bodied switch expression arms

### Mon Aug 26, 2024

[C# Language Design Meeting for August 26th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-08-26.md)

- `field` keyword open questions
    - `field` in property initializers
    - Interaction with partial properties
    - `readonly` field

### Wed Aug 21, 2024

[C# Language Design Meeting for August 21st, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-08-21.md)

- Better conversion from collection expression
- `field` keyword nullability

### Mon Aug 19, 2024

[C# Language Design Meeting for August 19th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-08-19.md)

- Better conversion from collection expression

### Wed Aug 14, 2024

[C# Language Design Meeting for August 14th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-08-14.md)

- `field` keyword
    - `field` nullability
    - `field` in event accessor
    - Scenarios similar to `set;`

### Wed Jul 24, 2024

[C# Language Design Meeting for July 24th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-07-24.md)

- Discriminated Unions
- Better conversion from collection expression with `ReadOnlySpan<T>` overloads

### Mon Jul 22, 2024

[C# Language Design Meeting for July 22nd, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-07-22.md)

- Extensions
- Ref structs implementing interfaces

### Wed Jul 17, 2024

[C# Language Design Meeting for July 17th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-07-17.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-07-15.md)

- `field` keyword
- First-Class Spans Open Question

### Wed Jun 26, 2024

[C# Language Design Meeting for June 26th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-06-26.md)

- Extensions

### Mon Jun 24, 2024

[C# Language Design Meeting for June 24th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-06-24.md)

- First-Class Spans
- `field` questions
    - Mixing auto-accessors
    - Nullability

### Mon Jun 17, 2024

[C# Language Design Meeting for June 17th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-06-17.md)

- `params` Span breaks
- Overload resolution priority questions
    - Application error or warning on `override`s
    - Implicit interface implementation
- Inline arrays as `record struct`s

### Wed Jun 12, 2024

[C# Language Design Meeting for June 12th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-06-12.md)

- `params Span` breaks
- Extensions

### Mon Jun 10, 2024

[C# Language Design Meeting for June 10th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-06-10.md)

- `ref struct`s implementing interfaces and in generics

### Mon Jun 3, 2024

[C# Language Design Meeting for June 3rd, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-06-03.md)

- Params collections and dynamic
- Allow ref and unsafe in iterators and async

### Wed May 15, 2024

[C# Language Design Meeting for May 15th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-05-15.md)

- `field` and `value` as contextual keywords
  - Usage in `nameof`
  - Should `value` be a keyword in a property or indexer get? Should `field` be a keyword in an indexer?
  - Should `field` and `value` be considered keywords in lambdas and local functions within property accessors?
  - Should `field` and `value` be keywords in property or accessor signatures? What about `nameof` in those spaces?
- Dictionary expressions

### Mon May 13, 2024

[C# Language Design Meeting for May 13th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-05-13.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-05-08.md)

- `readonly` for primary constructor parameters

### Wed May 1, 2024

[C# Language Design Meeting for May 1st, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-05-01.md)

- Adjust binding rules in the presence of a single candidate

### Wed Apr 24, 2024

[C# Language Design Meeting for Apr 24th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-04-24.md)

- Adjust dynamic binding rules for a situation of a single applicable candidate

### Mon Apr 22, 2024

[C# Language Design Meeting for Apr 22nd, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-04-22.md)

- Effect of language version on overload resolution in presence of `params` collections
- Partial type inference: '_' in method and object creation type argument lists

### Wed Apr 17, 2024

[C# Language Design Meeting for Apr 17th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-04-17.md)

- Relax `Add` requirement for collection expression conversions to types implementing `IEnumerable`
- Extensions

### Mon Apr 15, 2024

[C# Language Design Meeting for Apr 15th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-04-15.md)

- Non-enumerable collection types
- Interceptors
- Relax `Add` requirement for collection expression conversions to types implementing `IEnumerable`

### Mon Apr 8, 2024

[C# Language Design Meeting for Apr 8th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-04-08.md)

- Implementation specific documentation

### Mon Apr 1, 2024

[C# Language Design Meeting for Apr 1st, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-04-01.md)

- Async improvements (Async2)

### Wed Mar 27, 2024

[C# Language Design Meeting for Mar 27th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-03-27.md)

- Discriminated Unions

### Mon Mar 11, 2024

[C# Language Design Meeting for Mar 11th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-03-11.md)

- Dictionary expressions

### Mon Mar 4, 2024

[C# Language Design Meeting for Mar 4th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-03-04.md)

- Breaking changes: making `field` and `value` contextual keywords
- Overload resolution priority

### Wed Feb 28, 2024

[C# Language Design Meeting for Feb 28th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-02-28.md)

- Extensions

### Mon Feb 26, 2024

[C# Language Design Meeting for Feb 26th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-02-26.md)

- `ref struct`s in generics
- Collection expressions

### Wed Feb 21, 2024

[C# Language Design Meeting for Feb 21st, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-02-21.md)

- Declaration of ref/out parameters in lambdas without typename
- `params` collections
    - Metadata format
    - `params` and `scoped` across `override`s
    - `required` members and `params` parameters

### Wed Feb 7, 2024

[C# Language Design Meeting for Feb 7th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-02-07.md)

- Partial type inference
- Breaking change warnings

### Mon Feb 5, 2024

[C# Language Design Meeting for Feb 5th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-02-05.md)

- First-class span types
- Collection expressions: inline collections

### Wed Jan 31, 2024

[C# Language Design Meeting for January 31st, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-01-31.md)

- Relax "enumerable" requirement for collection expressions
- `params` collections evaluation orders

### Mon Jan 29, 2024

[C# Language Design Meeting for January 29th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-01-29.md)

- `params` collections
  - Better function member changes
  - `dynamic` support
- `dynamic` and `ref` local function bugfixing

### Mon Jan 22, 2024

[C# Language Design Meeting for January 22nd, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-01-22.md)

### Wed Jan 10, 2024

[C# Language Design Meeting for January 10th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-01-10.md)

- Collection expressions: conversion vs construction

### Mon Jan 8, 2024

[C# Language Design Meeting for January 8th, 2024](https://github.com/dotnet/csharplang/blob/main/meetings/2024/LDM-2024-01-08.md)

- Collection expressions
    - Iteration type of `CollectionBuilderAttribute` collections
    - Iteration type in conversions

---

### Overview (`meetings/2025/README.md`)

## C# Language Design Notes for 2025

### Wed December 17, 2025

[C# Language Design Meeting for December 17th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-12-17.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-12-10.md)

- Collection expression arguments

### Wed Nov 12, 2025

[C# Language Design Meeting for November 12th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-11-12.md)

- Unsafe evolution

### Wed Nov 5, 2025

[C# Language Design Meeting for November 5th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-11-05.md)

- Unsafe evolution

### Wed Oct 29, 2025

[C# Language Design Meeting for October 29th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-10-29.md)

- Unsafe evolution

### Mon Oct 13, 2025

[C# Language Design Meeting for October 13th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-10-13.md)

- Collection expression safe-context bug fix
- Immediately-enumerated collection expressions

### Wed Oct 1, 2025

[C# Language Design Meeting for October 1st, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-10-01.md)

- Closed enums
- Closed Hierarchies

### Mon Sep 29, 2025

[C# Language Design Meeting for September 29th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-09-29.md)

- Union Syntax Thunderdome Part 2
- Enums vs Unions

### Wed Sep 24, 2025

[C# Language Design Meeting for September 24th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-09-24.md)

- Union Syntax Thunderdome Part 1

### Wed Sep 17, 2025

[C# Language Design Meeting for September 17th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-09-17.md)

- Unsafe evolution

### Wed Sep 10, 2025

[C# Language Design Meeting for September 10th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-09-10.md)

- Unions overview

### Wed Aug 27, 2025

[C# Language Design Meeting for August 27th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-08-27.md)

- Type inference in patterns
- Type value conversion
- Union syntax

### Wed Aug 20, 2025

[C# Language Design Meeting for August 20th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-08-20.md)

- Union interfaces
- Target-type inference improvements

### Mon Aug 18, 2025

[C# Language Design Meeting for August 18th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-08-18.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-08-13.md)

- Unions

### Wed Jul 30, 2025

[C# Language Design Meeting for July 30th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-07-30.md)

- '/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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-30.md)

- Type parameter inference from constraints
- Target-typed static member lookup

### Wed Jun 25, 2025

[C# Language Design Meeting for June 25th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-25.md)

- Unions
    - Stand-alone issues
    - Mutually exclusive issues

### Mon Jun 23, 2025

[C# Language Design Meeting for June 23rd, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-23.md)

- Extensions
    - Use of extension operators in LINQ expression trees
    - `ref` encoding and conflict checks
    - Extern support
    - Lookup

### Wed Jun 18, 2025

[C# Language Design Meeting for June 18th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-18.md)

- Iterators in lambdas
- Extensions

### Wed Jun 11, 2025

[C# Language Design Meeting for June 11th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-11.md)

- 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`

### Mon Jun 9, 2025

[C# Language Design Meeting for June 9th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-09.md)

- Extensions - crefs

### Wed Jun 4, 2025

[C# Language Design Meeting for June 4th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-06-04.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-05-28.md)

- Nominal type unions

### Mon May 12, 2025

[C# Language Design Meeting for May 12th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-05-12.md)

- Collection expression arguments
    - Empty argument lists
    - Constructor binding behavior
    - Syntax
- Dictionary expressions

### Wed May 7, 2025

[C# Language Design Meeting for May 7th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-05-07.md)

- Collection Expression Arguments
    - Interface target type
    - Constructor binding behavior
    - Syntax

### Mon May 5, 2025

[C# Language Design Meeting for May 5th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-05-05.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-04-23.md)

- Extensions
    - Extension operators
    - Overload resolution priority
- Dictionary Expressions

### Wed Apr 16, 2025

[C# Language Design Meeting for April 16th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-04-16.md)

- Extensions

### Mon Apr 14, 2025

[C# Language Design Meeting for April 14th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-04-14.md)

- Dictionary expressions
- Collection expression arguments

### Wed Apr 9, 2025

[C# Language Design Meeting for April 9th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-04-09.md)

- Dictionary expressions
- Collection expression arguments

### Mon Apr 7, 2025 

[C# Language Design Meeting for April 7th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-04-07.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-04-02.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-24.md)

- Dictionary Expressions
    - Support dictionary types as `params` type
    - Type inference for `KeyValuePair<K, V>` collections
    - Overload resolution for `KeyValuePair<K, V>` collections
- Extensions
    - Signature conflict rules
    - `extension` vs `extensions`

### Wed Mar 19, 2025

[C# Language Design Meeting for March 19th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-19.md)

- Readonly setters on non-variables

### Mon Mar 17, 2025

[C# Language Design Meeting for March 17th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-17.md)

- Collection expression arguments
    - `with` breaking 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-12.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-10.md)

- Extensions
    - Property method calling
    - Scoping and Shadowing
    - Type parameter inferrability
    - Accessibility

### Wed Mar 5, 2025

[C# Language Design Meeting for March 5th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-05.md)

- Dictionary expressions
- Target-typed static member lookup

### Mon Mar 3, 2025

[C# Language Design Meeting for March 3rd, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-03-03.md)

- Extensions

### Wed Feb 26, 2025

[C# Language Design Meeting for February 26th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-02-26.md)

- Extensions

### Mon Feb 24, 2025

[C# Language Design Meeting for February 24th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-02-24.md)

- Extensions
- Interpolated string handler method names

### Wed Feb 19, 2025

[C# Language Design Meeting for February 19th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-02-19.md)

- Extensions

### Wed Feb 12, 2025

[C# Language Design Meeting for February 12th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-02-12.md)

- User-defined instance-based operators
- Left-right join in query expressions

### Wed Jan 22, 2025

[C# Language Design Meeting for January 22nd, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-01-22.md)

- Partial events and constructors
- Collection expression arguments
- Extensions disambiguation syntax

### Wed Jan 15, 2025

[C# Language Design Meeting for January 15th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-01-15.md)

- `fieldof`
- Simple lambda parameters
- Interpolated string handler method names

### Mon Jan 13th, 2025

[C# Language Design Meeting for January 13th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-01-13.md)

- Discriminated Unions

### Mon Jan 6, 2025

[C# Language Design Meeting for January 6th, 2025](https://github.com/dotnet/csharplang/blob/main/meetings/2025/LDM-2025-01-06.md)

- Ignoring `ref struct`s in `Expression`s
- 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 `break` and `continue` Statements](https://github.com/dotnet/csharplang/blob/c4ec6fb60c2e174b1abb6c019f22bb15b9b13f6c/proposals/labeled-break-continue.md) (CyrusNajmabadi) Finalize specification.
- [Final initializers](https://github.com/dotnet/csharplang/blob/5055b97eee8c10d12f822f6d4db9464329615947/proposals/final-initializers.md)
  - [LDM in 2020](https://github.com/dotnet/csharplang/blob/main/meetings/2020/LDM-2020-04-27.md#primary-constructor-bodies-and-validators) approved the syntax. Next is discussing semantics.
- [Anonymous using declarations](https://github.com/dotnet/csharplang/blob/665a9392e172e6f4f16347c502d9f80220a6e7a4/proposals/anonymous-using-declarations.md) (jnm2, 333fred, CyrusNajmabadi)
- [Extension members on typeless receivers](https://github.com/dotnet/csharplang/blob/main/proposals/extension-members-on-typeless-receivers.md) (CyrusNajmabadi, jnm2)
- [Collection expression spread optimization question](https://github.com/dotnet/csharplang/issues/10178) (Rikki)
- [Ref and ref-like parameters of async methods](https://github.com/dotnet/csharplang/blob/c623e9fb9e2c1a61da95cd8d2768117a1c358247/proposals/async-method-ref-parameters.md) (jnm2)
- [Mixed object and collection initializers](https://github.com/dotnet/csharplang/blob/main/proposals/mixed-object-and-collection-initializers.md) (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)
  - [Inference for pattern types](https://github.com/dotnet/csharplang/pull/10352)
  - [Inference between union and case types](https://github.com/dotnet/csharplang/pull/10355)
- [Final initializers](https://github.com/dotnet/csharplang/blob/5055b97eee8c10d12f822f6d4db9464329615947/proposals/final-initializers.md) (Joseph)
  - [LDM in 2020](https://github.com/dotnet/csharplang/blob/main/meetings/2020/LDM-2020-04-27.md#primary-constructor-bodies-and-validators) approved the syntax. Next is discussing semantics.

### Mon Oct 5, 2026

- Simple LDM decisions (Fred, Mads)
- [Target typed generic inference](https://github.com/dotnet/csharplang/pull/10345) (Mads)

## C# Language Design Notes for 2026

### Wed Aug 19, 2026

[C# Language Design Meeting for August 19th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-08-19.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-08-12.md)

- Type parameter inference from constraints implementation review
- Union pattern matching targets

### Wed Aug 5, 2026

[C# Language Design Meeting for August 5th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-08-05.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-07-22.md)

- Allowing `safe` on non-`extern` members

### Wed Jul 15, 2026

[C# Language Design Meeting for July 15th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-07-15.md)

- Declarative UI construction

### Wed Jul 1, 2026

[C# Language Design Meeting for July 1, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-07-01.md)

- Unsafe awaits
- Extension constants
- Partial extension members

### Mon Jun 8, 2026

[C# Language Design Meeting for June 8, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-06-08.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-05-27.md)

- Unsafe evolution
    - Unsafe expressions
    - Await in unsafe blocks
    - Safety comments

### Wed May 20, 2026

[C# Language Design Meeting for May 20th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-05-20.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-05-18.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-05-13.md)

- Unsafe evolution, continued
    - `safe` marker syntax
    - `unsafe` on types
    - `unsafe` fields
    - Explicit and extended layout fields
    - Implicit calls and constructor edge cases

### Wed Apr 29, 2026

[C# Language Design Meeting for April 29th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-29.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-27.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-22.md)

- Unsafe evolution, continued
    - Signature `unsafe` and unsafe contexts
    - Transitional diagnostics for pointer-signature calls

### Mon Apr 20, 2026

[C# Language Design Meeting for April 20th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-20.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-15.md)

- Deconstruction in lambda parameters
- Labeled `break` and `continue`

### Mon Apr 13, 2026

[C# Language Design Meeting for April 13th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-13.md)

- Unsafe evolution, continued
    - Safe markers for members with internal `unsafe` code
    - Members with pointers in their signatures
    - Choosing a temporary spelling for `safe`

### Wed Apr 8, 2026

[C# Language Design Meeting for April 8th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-08.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-06.md)

- Unsafe evolution, continued
    - Simple core model
    - `extern` members and explicit safety markers

### Wed Apr 1, 2026

[C# Language Design Meeting for April 1st, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-04-01.md)

- Unsafe evolution migration and explicit safety markers
    - Marking `extern` members as explicitly safe
    - Avoiding easy but incorrect unsafe evolution migration paths

### Wed Mar 11, 2026

[C# Language Design Meeting for March 11th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-03-11.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-03-09.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-02-11.md)

- Union patterns update

### Mon Feb 9, 2026

[C# Language Design Meeting for February 9th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-02-09.md)

- Closed hierarchies open questions
    - Confirming API shape
    - Blocking subtyping from other languages
    - Multiple `CompilerFeatureRequired` attributes
    - Same module restriction
    - Permit explicit use of `abstract` modifier
    - Subtype metadata

### Wed Feb 4, 2026

[C# Language Design Meeting for February 4th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-02-04.md)

- 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](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-02-02.md)

- Extension indexers

### Mon Jan 26, 2026

[C# Language Design Meeting for January 26th, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-01-26.md)

- Alternative syntax for caller-unsafe

### Wed Jan 21, 2026

[C# Language Design Meeting for January 21st, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-01-21.md)

- Unsafe evolution

### Mon Jan 12, 2026

[C# Language Design Meeting for January 12, 2026](https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-01-12.md)

- Triage
    - Relaxed ordering for `partial` and `ref` modifiers
    - Deconstruction in lambda parameters
    - Unsigned sizeof
    - Labeled `break` and `continue` Statements
    - Extra accessor in property override
    - Immediately Enumerated Collection Expressions
    - Allow arrays as CollectionBuilder Create parameter type

---

### Overview (`proposals/csharp-7.1/README.md`)

# C# 7.1

- [Async Main](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/async-main.md)
- [Default Expressions](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/target-typed-default.md)
- [Infer tuple names](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/infer-tuple-names.md)
- [Pattern-matching with generics](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.1/generics-pattern-match.md)

---

### 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](discriminated-unions.md) adds `case` declarations to unions.

  ```csharp
  union struct Option<T>
  {
      case None = default;
      case Some(T Value);
  }
  ```

- [Data-carrying enums](data-carrying-enums.md) adds cases with associated data through `enum class` and `enum struct`.

  ```csharp
  closed 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](comparison.md) examines the advantages and tradeoffs of each approach.

## Supporting Documents

The main proposals link to shared details as needed:

- [Common design](union-enum-common.md) covers contextual construction and inference, equality and hashing, nullability, metadata, and other shared behavior and open questions.
- [Non-boxed storage](union-enum-non-boxed-layout.md) explores an internal layout for `union struct` and `enum struct` that avoids boxing during construction and extraction.
- [Per-case records and generated layouts](union-case-types-and-layout.md) 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](union-enum-ref-like-types.md) explores an optional extension for ref-like payloads and its open questions. Neither main design depends on it.
- [Switch emission](union-enum-switch-emit.md) discusses implementation strategies and possible compiler and JIT optimizations for both designs.

[Enum members](enum-members.md) 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
