# C# Language Design Meeting for February 12th, 2025

## Agenda
- [User-defined instance-based operators](#user-defined-instance-based-operators)
- [Left-right join in query expressions](#left-right-join-in-query-expressions)

## Quote of the Day

- "That's how I shall influence the LDM, with cats. Unless you're a dog person, in which case that's terrible."

## Discussion

### User-defined instance-based operators

Champion issue: https://github.com/dotnet/csharplang/issues/9101  
Specification: https://github.com/dotnet/csharplang/blob/5a627e44b33f6c8765f11f3007de379b526684a0/proposals/user-defined-compound-assignment.md

We started today by reviewing the proposal for user-defined compound assignment, which we are looking at for the first time. As we went over the spec, we had a couple of
concerns around corner cases with instance vs static operators: we don't want type authors to accidentally push their users into odd scenarios where a `+=` may work, but
`+` won't (or vice versa) because one form declares extra operators than the other. Other than that, though, we think this is an excellent proposal, and will move forward
with it.

#### Conclusion

Proposal is approved.

### Left-right join in query expressions

Champion issue: https://github.com/dotnet/csharplang/issues/8947  
Specification: https://github.com/dotnet/csharplang/blob/5a627e44b33f6c8765f11f3007de379b526684a0/proposals/left-right-join-in-query-expressions.md

Finally today, we looked at a proposal for a new LINQ query-syntax operator. There's concern here, both in the LDM and in the discussion thread, about where the line for
new features is. We can't really avoid query providers failing on these new joins; the methods will exist in the BCL regardless, and various query providers might fail on
them no matter what. While query syntax support might widen that gap, it's very possible that lack of it will hurt users who need the new operator more than it would cause
users to hit query provider errors, since users who need this will have to drop the entire query back to method syntax. Given this, we're cautiously optimistic about moving
forward with this. We may want to expand further in the future; for example, C# does not support `distinct` in query syntax today, like VB does, but if increased `join`
options are successful, that may be enough of a signal to add further operators; conversely, if this ends up causing significant increases in errors for users and lots of
pain, we know that further changes here are harder than they appear at first glance. The LDM is unanimously in favor of moving forward with this, and a slight majority
think we should try to get it in for C# 14, to coincide with the new methods being added to the BCL.

#### Conclusion

We will proceed with this proposal, hopefully in the C# 14 timeframe (barring any other time constraints).
