17 KiB
C# Language Design Notes for 2017
Overview of meetings and agendas for 2017
Jan 10, 2017
C# Language Design Notes for Jan 10, 2017
- Discriminated unions via "closed" types
Jan 11, 2017
C# Language Design Notes for Jan 11, 2017
- Language aspects of compiler intrinsics
Jan 17, 2017
C# Language Design Notes for Jan 17, 2017
- Constant pattern semantics: which equality exactly?
- Extension methods on tuples: should tuple conversions apply?
Jan 18, 2017
C# Language Design Notes for Jan 18, 2017
- Async streams (visit from Oren Novotny)
Feb 21, 2017
C# Language Design Notes for Feb 21, 2017
We triaged some of the championed features, to give them a tentative milestone and ensure they had a champion.
As part of this we revisited potential 7.1 features and pushed several out.
- Implicit interface implementation in Visual Basic (VB 16)
- Delegate and enum constraints (C# X.X)
- Generic attributes (C# X.0 if even practical)
- Replace/original (C# X.0 if and when relevant)
- Bestest betterness (C# 7.X)
- Null-coalescing assignments and awaits (C# 7.X)
- Deconstruction in from and let clauses (C# 7.X)
- Target-typed
new
expressions (C# 7.X) - Mixing fresh and existing variables in deconstruction (C# 7.1)
- Implementing
==
and!=
on tuple types (C# 7.X) - Declarations in embedded statements (No)
- Field targeted attributes on auto-properties (C# 7.1)
Feb 22, 2017
C# Language Design Notes for Feb 22, 2017
We went over the proposal for ref readonly
: Champion "Readonly ref".
Feb 28, 2017
C# Language Design Notes for Feb 28, 2017
- Conditional operator over refs (Yes, but no decision on syntax)
- Async Main (Allow Task-returning Main methods)
Mar 1, 2017
C# Language Design Notes for Mar 1, 2017
- Shapes and extensions (exploration)
- Conditional refs (original design adopted)
Mar 7, 2017
C# Language Design Notes for Mar 7, 2017
We continued to flesh out the designs for features currently considered for C# 7.1.
- Default expressions (design adopted)
- Field target on auto-properties (yes)
- private protected (yes, if things work as expected)
Mar 8, 2017
C# Language Design Notes for Mar 8, 2017
We looked at default interface member implementations.
- Xamarin interop scenario
- Proposal
- Inheritance from interface to class
- Overriding and base calls
- The diamond problem
- Binary compatibility
- Other semantic challenges
Mar 15, 2017
C# Language Design Notes for Mar 8, 2017
Triage of championed features
- JSON literals
- Fixing of captured locals
- Allow shadowing of parameters
- Weak delegates
- Protocols/duck typing/concepts/type classes
- Zero and one element tuples
- Deconstruction in lambda parameters
- Private protected
Mar 21, 2017
C# Language Design Notes for Mar 21, 2017
Discussion of default interface member implementations, based on this guided tour.
- Concerns raised on GitHub and elsewhere
- Inheritance?
- Breaking name lookup on
this
- Events
- Modifiers
- Methods
- Properties
- Overrides
- Reabstraction
- Most specific override
- Static non-virtual members
- Accessibility levels
- Existing programs
Mar 28, 2017
C# Language Design Notes for Mar 28, 2017
Design some remaining 7.1 features
- Fix pattern matching restriction with generics
- Better best common type
Mar 29, 2017
C# Language Design Notes for Mar 29, 2017
- Nullable scenarios
Span<T>
safety
Apr 5, 2017
C# Language Design Notes for Apr 5, 2017
- Non-virtual members in interfaces
- Inferred tuple element names
- Tuple element names in generic constraints
Apr 11, 2017
C# Language Design Notes for Apr 11, 2017
- Runtime behavior of ambiguous default implementation
Apr 18, 2017
C# Language Design Notes for Apr 18, 2017
- Default implementations for event accessors in interfaces
- Reabstraction in a class of default-implemented member
sealed override
with default implementations- Use of
sealed
keyword for non-virtual interface members - Implementing inaccessible interface members
- Implicitly implementing non-public interface members
- Not quite implementing a member
- asynchronous
Main
Apr 19, 2017
C# Language Design Notes for Apr 19, 2017
- Improved best common type
- Diamonds with classes
- Structs and default implementations
- Base invocation
May 16, 2017
C# Language Design Notes for May 16, 2017
- Triage C# 7.1 features that didn't make it
- Look at C# 7.2 features
- GitHub procedure around new design notes and proposals
- Triage of championed features
May 17, 2017
C# Language Design Notes for May 17, 2017
More questions about default interface member implementations
- Conflicting override of default implementations
- Can the Main entry point method be in an interface?
- Static constructors in interfaces?
- Virtual properties with private accessors
- Does an override introduce a member?
- Parameter names
May 26, 2017
C# Language Design Notes for May 26, 2017
- Native ints
May 31, 2017
C# Language Design Notes for May 31, 2017
- Default interface members: overriding or implementing?
- Downlevel poisoning of ref readonly in signatures
- Extension methods with ref this and generics
- Default in operators
Jun 13, 2017
C# Language Design Notes for Jun 13, 2017
- Native-size ints
- Native-size floats
Jun 14, 2017
C# Language Design Notes for Jun 14, 2017
Several issues related to default implementations of interface members
- Virtual properties with private accessors
- Requiring interfaces to have a most specific implementation of all members
- Member declaration syntax revisited
- Base calls
Jun 27, 2017
C# Language Design Notes for Jun 27, 2017
- User-defined operators in interfaces
- return/break/continue as expressions
Jun 28, 2017
C# Language Design Notes for Jun 28, 2017
- Tuple name round-tripping between C# 6.0 and C# 7.0
- Deconstruction without
ValueTuple
- Non-trailing named arguments
Jul 5, 2017
C# Language Design Notes for Jul 5, 2017
Triage of features in the C# 7.2 milestone. They don't all fit: which should be dropped, which should be kept, and which should be pushed out?
- Static delegates (8.0)
- Native int and IntPtr operators (7.X)
- Field target (anytime)
- Utf8 strings (8.0)
- Slicing (7.X)
- Blittable (7.2)
- Ref structs (7.2)
- Ref readonly (7.2)
- Conditional ref (7.2)
- Ref extensions on structs (7.2)
- Readonly locals and params (X.X)
- ref structs in tuples (don't)
- Overload resolution tie breakers with long tuples (use underlying generics)
Jul 26, 2017
C# Language Design Notes for Jul 24 and 26, 2017
We started putting a series of stakes in the ground for nullable reference types, based on the evolving strawman proposal here. We're doing our first implementation of the feature based on this, and can then refine as we learn things from usage.
- Goals
- Nullable reference types
- Rarely-null members
Aug 7, 2017
C# Language Design Notes for Aug 7, 2017
We continued refining the nullable reference types feature set with the aim of producing a public prototype for experimentation and learning.
- Warnings
- Local variables revisited
- Opt-in mechanisms
Aug 9, 2017
C# Language Design Notes for Aug 9, 2017
We discussed how nullable reference types should work in a number of different situations.
- Default expressions
- Array creation
- Struct fields
- Unconstrained type parameters
=======
C# Language Design Notes for 2017
Overview of meetings and agendas for 2017
Jan 10, 2017
C# Language Design Notes for Jan 10, 2017
- Discriminated unions via "closed" types
Jan 11, 2017
C# Language Design Notes for Jan 11, 2017
- Language aspects of compiler intrinsics
Jan 17, 2017
C# Language Design Notes for Jan 17, 2017
- Constant pattern semantics: which equality exactly?
- Extension methods on tuples: should tuple conversions apply?
Jan 18, 2017
C# Language Design Notes for Jan 18, 2017
- Async streams (visit from Oren Novotny)
Feb 21, 2017
C# Language Design Notes for Feb 21, 2017
We triaged some of the championed features, to give them a tentative milestone and ensure they had a champion.
As part of this we revisited potential 7.1 features and pushed several out.
- Implicit interface implementation in Visual Basic (VB 16)
- Delegate and enum constraints (C# X.X)
- Generic attributes (C# X.0 if even practical)
- Replace/original (C# X.0 if and when relevant)
- Bestest betterness (C# 7.X)
- Null-coalescing assignments and awaits (C# 7.X)
- Deconstruction in from and let clauses (C# 7.X)
- Target-typed
new
expressions (C# 7.X) - Mixing fresh and existing variables in deconstruction (C# 7.1)
- Implementing
==
and!=
on tuple types (C# 7.X) - Declarations in embedded statements (No)
- Field targeted attributes on auto-properties (C# 7.1)
Feb 22, 2017
C# Language Design Notes for Feb 22, 2017
We went over the proposal for ref readonly
: Champion "Readonly ref".
Feb 28, 2017
C# Language Design Notes for Feb 28, 2017
- Conditional operator over refs (Yes, but no decision on syntax)
- Async Main (Allow Task-returning Main methods)
Mar 1, 2017
C# Language Design Notes for Mar 1, 2017
- Shapes and extensions (exploration)
- Conditional refs (original design adopted)
Mar 7, 2017
C# Language Design Notes for Mar 7, 2017
We continued to flesh out the designs for features currently considered for C# 7.1.
- Default expressions (design adopted)
- Field target on auto-properties (yes)
- private protected (yes, if things work as expected)
Mar 8, 2017
C# Language Design Notes for Mar 8, 2017
We looked at default interface member implementations.
- Xamarin interop scenario
- Proposal
- Inheritance from interface to class
- Overriding and base calls
- The diamond problem
- Binary compatibility
- Other semantic challenges
Mar 15, 2017
C# Language Design Notes for Mar 8, 2017
Triage of championed features
- JSON literals
- Fixing of captured locals
- Allow shadowing of parameters
- Weak delegates
- Protocols/duck typing/concepts/type classes
- Zero and one element tuples
- Deconstruction in lambda parameters
- Private protected
Mar 21, 2017
C# Language Design Notes for Mar 21, 2017
Discussion of default interface member implementations, based on this guided tour.
- Concerns raised on GitHub and elsewhere
- Inheritance?
- Breaking name lookup on
this
- Events
- Modifiers
- Methods
- Properties
- Overrides
- Reabstraction
- Most specific override
- Static non-virtual members
- Accessibility levels
- Existing programs
Mar 28, 2017
C# Language Design Notes for Mar 28, 2017
Design some remaining 7.1 features
- Fix pattern matching restriction with generics
- Better best common type
Mar 29, 2017
C# Language Design Notes for Mar 29, 2017
- Nullable scenarios
Span<T>
safety
Apr 5, 2017
C# Language Design Notes for Apr 5, 2017
- Non-virtual members in interfaces
- Inferred tuple element names
- Tuple element names in generic constraints
Apr 11, 2017
C# Language Design Notes for Apr 11, 2017
- Runtime behavior of ambiguous default implementation
Apr 18, 2017
C# Language Design Notes for Apr 18, 2017
- Default implementations for event accessors in interfaces
- Reabstraction in a class of default-implemented member
sealed override
with default implementations- Use of
sealed
keyword for non-virtual interface members - Implementing inaccessible interface members
- Implicitly implementing non-public interface members
- Not quite implementing a member
- asynchronous
Main
Apr 19, 2017
C# Language Design Notes for Apr 19, 2017
- Improved best common type
- Diamonds with classes
- Structs and default implementations
- Base invocation
May 16, 2017
C# Language Design Notes for May 16, 2017
- Triage C# 7.1 features that didn't make it
- Look at C# 7.2 features
- GitHub procedure around new design notes and proposals
- Triage of championed features
May 17, 2017
C# Language Design Notes for May 17, 2017
More questions about default interface member implementations
- Conflicting override of default implementations
- Can the Main entry point method be in an interface?
- Static constructors in interfaces?
- Virtual properties with private accessors
- Does an override introduce a member?
- Parameter names
May 26, 2017
C# Language Design Notes for May 26, 2017
- Native ints
May 31, 2017
C# Language Design Notes for May 31, 2017
- Default interface members: overriding or implementing?
- Downlevel poisoning of ref readonly in signatures
- Extension methods with ref this and generics
- Default in operators
Jun 13, 2017
C# Language Design Notes for Jun 13, 2017
- Native-size ints
- Native-size floats
Jun 14, 2017
C# Language Design Notes for Jun 14, 2017
Several issues related to default implementations of interface members
- Virtual properties with private accessors
- Requiring interfaces to have a most specific implementation of all members
- Member declaration syntax revisited
- Base calls
Jun 27, 2017
C# Language Design Notes for Jun 27, 2017
- User-defined operators in interfaces
- return/break/continue as expressions
Jun 28, 2017
C# Language Design Notes for Jun 28, 2017
- Tuple name round-tripping between C# 6.0 and C# 7.0
- Deconstruction without
ValueTuple
- Non-trailing named arguments
Jul 5, 2017
C# Language Design Notes for Jul 5, 2017
Triage of features in the C# 7.2 milestone. They don't all fit: which should be dropped, which should be kept, and which should be pushed out?
- Static delegates (8.0)
- Native int and IntPtr operators (7.X)
- Field target (anytime)
- Utf8 strings (8.0)
- Slicing (7.X)
- Blittable (7.2)
- Ref structs (7.2)
- Ref readonly (7.2)
- Conditional ref (7.2)
- Ref extensions on structs (7.2)
- Readonly locals and params (X.X)
- ref structs in tuples (don't)
- Overload resolution tie breakers with long tuples (use underlying generics)
Jul 26, 2017
C# Language Design Notes for Jul 24 and 26, 2017
We started putting a series of stakes in the ground for nullable reference types, based on the evolving strawman proposal here. We're doing our first implementation of the feature based on this, and can then refine as we learn things from usage.
- Goals
- Nullable reference types
- Rarely-null members
Aug 7, 2017
C# Language Design Notes for Aug 7, 2017
We continued refining the nullable reference types feature set with the aim of producing a public prototype for experimentation and learning.
- Warnings
- Local variables revisited
- Opt-in mechanisms
Aug 9, 2017
C# Language Design Notes for Aug 9, 2017
We discussed how nullable reference types should work in a number of different situations.
- Default expressions
- Array creation
- Struct fields
- Unconstrained type parameters
Aug 14, 2017
C# Language Design Notes for Aug 14, 2017
We looked at the interaction between generics and nullable reference types
- Unconstrained type parameters
- Nullable constraints
- Conversions between constructed types