# C# Language Design Notes for May 16, 2017

## Agenda

1. Triage C# 7.1 features that didn't make it
2. Look at C# 7.2 features
3. GitHub procedure around new design notes and proposals
4. Triage of championed features


# Triage C# 7.1 features that didn't make it

## Private protected

Almost there, push to 7.2 for completion.

## Field-targeted attributes

This is a bug fix level change, and very useful. Push to 7.2


# Look at C# 7.2 features

"Slicing" needs to be split into "ref structs" and "slicing syntax".

Push out everything, except 
- things that are "in theme" - related to refs, spans, etc.
- things that are almost done (field-targeted attributes, private protected)

Keep everything that's in theme until we can sit with the `Span<T>` folks and prioritize.


# GitHub procedure around new design notes and proposals

We should use issues as a notification mechanism for when design notes and proposals are completed. Revisions are comments on the same issue.

(This has now been adopted for design notes back to Mar 15, 2017.)


# Triage of championed features

## CallerArgumentExpression

Push to 7.X and start process for getting the attribute in place.

## Leading and trailing digit "separators"

``` c#
M(0b_1, 0x_A)
```

Very low additional value. Would probably help some code generators, and some code layout. Might accept a pull request.

## Static delegates

Delegates require, generally, 2 allocations, and are crappy for interop. Static delegates are typed `IntPtr`s, essentially.
`ValueAction` and `ValueFunc`. Lot of asks from CoreRT, for PInvoke etc. Of course they won't be able to close over anything, so they'd require significant language support.

## Namespace XML doc comments
This is hard to take as a community contribution: it's primarily about the IDE behavior. Not all of that may even be open source today.
It would also affect the rest of the ecosystem, which would now have to handle it. Need to coordinate with IDE team.

## `??` and `?.` for pointers

Probably lo-pri to make this pleasant. But nothing against it. This seems suitable for up-for-grabs.

The syntax should probably be `?->`. For double pointers, you're out of options!


## Non-trailing named arguments

Helps selectively use parameter names for readability. Would relieve people from bending over backwards to put name-prone parameters last. Also would make it work better with params.

Would need some ide work.


