2017-12-06 02:06:17 +01:00
|
|
|
# C# Language Design Notes for Oct 25, 2017
|
|
|
|
|
|
|
|
***Warning: These are raw notes, and still need to be cleaned up. Read at your own peril!***
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## #98
|
|
|
|
|
|
|
|
## 34 and 35
|
|
|
|
|
|
|
|
34 should bot be concurrent safe, just like the other compound assignment.
|
|
|
|
|
|
|
|
Bundle with 8.0, but could push out. Seems to align with nullable reference types
|
|
|
|
# 32
|
|
|
|
|
|
|
|
Reconcile 32 with 1020
|
|
|
|
|
|
|
|
|
|
|
|
Criteria:
|
|
|
|
|
|
|
|
- Loose ends
|
|
|
|
- External expectation
|
|
|
|
|
|
|
|
# ref as iteration variable
|
|
|
|
|
|
|
|
Not currently allowed, should probably have a proposal (Andy)
|
|
|
|
|
|
|
|
# 185 keep in 3 to prioritize
|
|
|
|
|
|
|
|
# 45
|
|
|
|
|
|
|
|
Push out to 8.0 for realism, but still prioritize design time
|
|
|
|
|
|
|
|
# 933, 1046, and uninitialized ref local
|
|
|
|
|
|
|
|
These should happen together in 7.3
|
|
|
|
|
|
|
|
# 111 Punt to 8.X
|
|
|
|
|
|
|
|
# 1020 946 945 keep
|
|
|
|
|
|
|
|
# 882 pattern-related, goto 8.0
|
|
|
|
|
|
|
|
# 435
|
|
|
|
Keep in 7.3, see if we can settle design
|
|
|
|
|
|
|
|
# 190
|
|
|
|
|
|
|
|
Relatively obvious design, with some gnarly bits (dynamic, conversion)
|
|
|
|
|
|
|
|
Usability gap with tuples let's keep it.
|
|
|
|
|
|
|
|
# 189
|
|
|
|
|
|
|
|
Let is more important than from. It lets you use out variables
|
|
|
|
|
|
|
|
``` c#
|
|
|
|
from s in strings
|
|
|
|
let t = (b: int.TryParse(out var n), n)
|
|
|
|
where t.b
|
|
|
|
select t.n
|
|
|
|
```
|
|
|
|
Could be
|
|
|
|
``` c#
|
|
|
|
from s in strings
|
|
|
|
let (b, i) = (int.TryParse(out var n), n)
|
|
|
|
where b
|
|
|
|
select i
|
|
|
|
```
|
|
|
|
|
|
|
|
There's a bit of design work, especially if we also want the from clause.
|
|
|
|
|
|
|
|
We could allow out vars but not the deconstruction, and it would still be useful.
|
|
|
|
|
|
|
|
Could save dec for later. It's actually orthogonal.
|
|
|
|
|
|
|
|
Action:
|
|
|
|
|
|
|
|
Carve out deconstruction, push to 8.X
|
|
|
|
|
|
|
|
# 187
|
|
|
|
|
|
|
|
On the brink, but keeping for now; need to be convinced of value
|
|
|
|
|
|
|
|
# 185
|
|
|
|
|
|
|
|
Keep pushing on it, got to get the train going on `Range`
|
|
|
|
|
|
|
|
`x..y` does new Range(x, y) or Range.Create(x, y)
|
|
|
|
|
|
|
|
Consider whether it should be a new kind of operator instead.
|
|
|
|
|
|
|
|
# 104
|
|
|
|
|
|
|
|
Micro-feature: Just allow `System.Enum` as a constraint
|
|
|
|
Mini-feature: allow `enum` as a constraint, translate to `System.Enum, struct`
|
|
|
|
|
|
|
|
Keep this in, but it is very cuttable.
|
|
|
|
|
|
|
|
# 98
|
|
|
|
|
|
|
|
It's a zero-conceptual-overhead feature.
|
|
|
|
|
|
|
|
Original designers left in space between meanings for a purpose. But that's not so compelling to us anymore.
|
|
|
|
|
2018-01-25 22:11:49 +01:00
|
|
|
Because it touches overload resolution, it might be better aligned with a .0 release. But we're not compelled by that.
|
2017-12-06 02:06:17 +01:00
|
|
|
|
|
|
|
Let's keep it, but again, it's cuttable.
|
|
|
|
|
|
|
|
|
|
|
|
|