C# Language Design Notes

Notes for Oct 15, 2014

Two items were discussed.
  1. nameof operator - revised proposal where it takes an expression argument
  2. string interpolation - revised proposal where the string starts with $

Notes for Oct 1, 2014

There were two items on the agenda.
  1. Flesh out the rules for assignment to readonly autoprops in the constructor
  2. Consider a feature to prevent people outside your assembly from implementing your interface <no>

Notes for Sep 3, 2014

The meeting focused on rounding out the design of declaration expressions
  1. Removing “spill out” from declaration expressions in simple statements <yes, remove>
  2. Same name declared in subsequent else-if’s <condition decls out of scope in else-branch>
  3. Add semicolon expressions <not in this version>
  4. Make variables in declaration expressions readonly <no>

Notes for Aug 27, 2014 (Part I) (Part II)

The meeting focused on rounding out the feature set around structs.
  1. Allowing parameterless constructors in structs <allow, but some unresolved details>
  2. Definite assignment for imported structs <revert to Dev12 behavior>

Notes for July 9, 2014

  1. Detailed design of nameof <details settled>
  2. Design of #pragma warning extensions <allow identifiers>

Notes for May 21, 2014 (Part I) (Part II)

  1. Limit the nameof feature? <keep current design>
  2. Extend params IEnumerable? <keep current design>
  3. String interpolation <design nailed down>

Notes for May 7, 2014

  1. protected and internal <feature cut – not worth the confusion>
  2. Field parameters in primary constructors <feature cut – we want to keep the design space open>
  3. Property declarations in primary constructors <interesting but not now>
  4. Typeswitch <Not now – more likely as part of a future more general matching feature>

Notes for Apr 21, 2014 (Part I) (Part II) (Part III)

In this design meeting we looked at some of the most persistent feedback on the language features showcased in the BUILD CTP, and fixed up many of the most glaring issues.
  1. Indexed members <lukewarm response, feature withdrawn>
  2. Initializer scope <new scope solves all kinds of problems with initialization>
  3. Primary constructor bodies <added syntax for a primary constructor body>
  4. Assignment to getter-only auto-properties from constructors <added>
  5. Separate accessibility for type and primary constructor <not worthy of new syntax>
  6. Separate doc comments for field parameters and fields <not worthy of new syntax>
  7. Left associative vs short circuiting null propagation <short circuiting>

Notes for Feb 10, 2014

  1. Design of using static <design adopted>
  2. Initializers in structs <allow in certain situations>
  3. Null-propagation and unconstrained generics <keep current design>

Notes for Feb 3, 2014

We iterated on some of the features currently under implementation
  1. Capture of primary constructor parameters <only when explicitly asked for with new syntax>
  2. Grammar around indexed names <details settled>
  3. Null-propagating operator details <allow indexing, bail with unconstrained generics>

Notes for Jan 6, 2014

In this meeting we reiterated on the designs of a couple of features based on issues found during implementation or through feedback from MVPs and others.
  1. Syntactic ambiguities with declaration expressions <a solution adopted>
  2. Scopes for declaration expressions <more refinement added to rules>

Notes for Dec 16, 2013

This being the last design meeting of the year, we focused on firming up some of the features that we’d like to see prototyped first, so that developers can get going on implementing them.
  1. Declaration expressions <reaffirmed scope rules, clarified variable introduction>
  2. Semicolon operator <reaffirmed enclosing parentheses>
  3. Lightweight dynamic member access <decided on a syntax>

Notes for Nov 4, 2013

Next up for implementation are the features for auto-properties and function bodies, both of which go especially well with primary constructors. For the purpose of spec’ing those, we nailed down a few remaining details. We also took another round discussing member access in the lightweight dynamic scenario.
  1. Initialized and getter-only auto-properties <details decided>
  2. Expression-bodied function members <details decided>
  3. Lightweight dynamic <member access model and syntax discussed>

Notes for Oct 7, 2013 (Part I)(Part II)

We looked at a couple of feature ideas that either came up recently or deserved a second hearing.
  1. Invariant meaning of names <scrap the rule>
  2. Type testing expression <can’t decide on good syntax>
  3. Local functions <not enough scenarios>
  4. nameof operator <yes>

Last edited Oct 24, 2014 at 5:54 AM by lwischik, version 19