# C# Language Design Meeting for October 10th, 2022

## Agenda

- [Working set triage](#working-set-triage)
    - [Static classes implementing interfaces](#static-classes-implementing-interfaces)
    - [Null-conditional assignment](#null-conditional-assignment)
    - [Lambda default parameters](#lambda-default-parameters)
- [Working groups](#working-groups)
- [`params` support for lambda default parameters](#params-support-for-lambda-default-parameters)
    - [Conclusion](#conclusion)

## Quote of the Day

- "Can we have multiple spread proposals and name them different things? Mayonnaise, Mustard?" "I can't believe it's not allocating"

## Discussion

### Working set triage

Today we wrapped up our triage of the working set. All of the remaining items are not in a working group.

#### Static classes implementing interfaces

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

We feel that there's about one design meeting's worth of open questions in this issue before we could reasonably let it be open for implementation,
either from the compiler team or from the community, so we'll try to do that work at some point in the near future.

#### Null-conditional assignment

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

This one is fairly uncontroversial with little outstanding design work.

#### Lambda default parameters

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

Work for this one is in progress, and later on in the meeting we talked about adding `params` support for this.

### Working groups

Now that we've gone through our working set, we've decided on the following working groups (listed in no particular order):

* Roles and extensions
* Collection literals
* Nullability improvements
* Discriminated unions
* Bridging statements and expressions
* Construction improvements
* `ref struct` improvements
* `params` improvements

We also decided on a set of norms for working groups to follow with respect to notes and keeping track of their progress: every working group
will add a folder under the [`meetings`](/meetings/) directory where they will put meeting notes. 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.

Some statistics on the groups:

* Smallest group size: 2 members
* Largest group size: 10 members
* Mean group size: 5.75 members
* At current rate of working group increase (1 in 2021, 8 in 2022) we will have 64 working groups come October 2023.

### `params` support for lambda default parameters

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

To round out today, we discussed whether we should broaden the lambda default parameter work to include support for `params`, which sticks out
a bit for not being supported in the proposal today. While we don't have a direct use case, we think that if we want to make this change, we
should make it now as it is a breaking change for inferred delegate type scenarios when inferring from a method that has a `params` parameter.
We don't think that waiting for a use case would change the semantic design strategy here, as it needs to be consistent with the work already
approved for default lambda parameters.

#### Conclusion

We will add support for `params`, which will flow through the type system in the same way that default parameters do.
