5.3 KiB
5.3 KiB
C# Language Design Meeting for September 28th, 2022
Agenda
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. 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.
- Complex feature area that we think would benefit from a dedicated working group, even though there is only one issue in the group.
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
- We initially thought this might be an Any Time candidate, but discussion revealed it has some potential interactions with with
- 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.
- This was a suggestion that arose as we were thinking about
- 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.