Back to Csharplang

C# Language Design Meeting for February 12th, 2025

meetings/2025/LDM-2025-02-12.md

latest2.8 KB
Original Source

C# Language Design Meeting for February 12th, 2025

Agenda

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).