# C# Language Design Meeting for September 28th, 2022

## Agenda

- [Working set triage](#working-set-triage)
    - [Discriminated Unions](#discriminated-unions)
    - [Collection literals](#collection-literals)
    - [Nullability improvements](#nullability-improvements)
    - [Ungrouped](#ungrouped)

## Quote(s) of the Day

- "Instead of just skipping 13, we'll take a break for the whole year!"
- "disjunctive junction, what's your function?"
- "That's the sound of never"
- "I do weird stuff in C#, and I've never wanted this"

## Discussion

### Working set triage

We continue our triage from [last time](LDM-2022-09-26.md). For clarity on what we did today, the only issues listed below were actually covered today. We will update
https://github.com/dotnet/csharplang/issues/4144 with the collated results when we are done with the triage.

#### Discriminated Unions

* https://github.com/dotnet/csharplang/issues/4032 - Track subtype exhaustiveness for classes with only private constructors
    * Another one for the list

#### Collection literals

* https://github.com/dotnet/csharplang/issues/5354 - Collection literals
    * Complex feature area that we think would benefit from a dedicated working group, even though there is only one issue in the group.
        * It would be good to have some BCL representation as well.
    * Could also be related to `init` methods as a method of implementation.

#### Nullability improvements

We have some nullability issues that have been around for a few releases, and it would be good to turn the crank on nullability and make these pain points better.

* https://github.com/dotnet/csharplang/issues/3950 - `Task<T>` nullability covariance
    * One of the common complaints
* https://github.com/dotnet/csharplang/issues/3951 - Nullable analysis of LINQ queries
    * Another super common complaint
    * Both LINQ as implemented in the BCL, and as done in 3rd-party libraries

#### Ungrouped

The bulk of our meeting today covered smaller issues that are ungrouped.

* https://github.com/dotnet/csharplang/issues/3885 - Support `readonly` modifier for classes and records
    * We initially thought this might be an Any Time candidate, but discussion revealed it has some potential interactions with with `readonly` on interfaces.
    * Backlog for now
* https://github.com/dotnet/csharplang/issues/3980 - call local static functions in base constructor
    * We're not going to make progress on this soon, but we think this is a good Any Time candidate.
    * It still needs an accepted specification, but we think it should be relatively straightforward to define.
* https://github.com/dotnet/csharplang/issues/3986 - `#pragma warning *enable*`
    * This issue has been unchampioned by the current champion, and no one willing to step up and take it over.
    * We think there could be potential bad performance interactions with the analyzer ecosystem.
    * Moved to Likely Never.
* https://github.com/dotnet/csharplang/issues/1502 - Five ideas for improving working with fixed buffers
    * Most of these ideas are already implemented or broken out into separate issues.
    * We will link the appropriate issues from this one and close it out.
* https://github.com/dotnet/csharplang/issues/4018 - Permit variable declarations under disjunctive patterns
    * There are still a few design decisions to make here, and it's been sitting on our docket for a while.
    * C# 11 priorities have kept pushing it back.
    * We hope to make progress in the near future.
* https://github.com/dotnet/csharplang/issues/4024 - Direct constructor parameters
    * This was a suggestion that arose as we were thinking about `record` types, but we're no longer interested in this approach.
    * Moved to Likely Never.
* https://github.com/dotnet/csharplang/issues/4121 - Metadata determination of whether a type is a record
    * If we want to move towards records inheriting from non-records, then we need to think about this.
    * Cross-inheritance is not currently in the working set, so this moves to backlog.
* https://github.com/dotnet/csharplang/issues/4284 - using aliases for any types
    * We still want this feature, and have a PR implementing the current design.
    * There are a few design questions to resolve.
    * We'll pursue this soon.
* https://github.com/dotnet/csharplang/issues/4460 - Only Allow Lexical Keywords in the Language
    * We've started down this path with the warning wave warning on lowercase type names, but we need to discuss this in more depth.
    * Source generators are forcing our customers to deal with the pain of our choices, not just us, which is a more compelling reason than avoiding work for ourselves.
* https://github.com/dotnet/csharplang/issues/4485 - async method exception filter
    * The pain here is real, but we're not fans of this approach as the solution, as it's a narrow AOP solution.
    * A smaller group will brainstorm other approaches, including whether a non-language solution would be possible.
* https://github.com/dotnet/csharplang/issues/4748 - Directly invoked anonymous functions
    * There is universal dislike of this feature on the LDM.
    * Moved to Likely Never.
* https://github.com/dotnet/csharplang/issues/5596 - Adding Index support to existing library types (redux)
    * This needs BCL input on whether adding more overloads for Index/Range for these extra methods does not work.
    * Backlog for now.
