# C# Language Design Review Apr 2, 2018

***Warning: These are raw notes, and still need to be cleaned up. Read at your own peril!***


# C# 8.0

Tag with needs runtime support or ecosystem support
Process: make it more clear where we are. Help people understand when beating on a feature would be wasting their time.

# Nullable

Make sure we work backwards to understand how long it takes to build the whole experience.

## Dotted names

We probably have a good level of invalidation.

## Type strengthening

Based on null state and `!`. Should definitely keep that.

## !

Because `!` only applies "right here", it is ok to also silence warnings recursively. But we should not consider automatically flowing `!` on the given execution path then, because you may not always want to silence all warnings on the variable subsequently.

## Unannotated assemblies

Maybe there should be a warning that you are referencing unannotated assemblies.

## Tracking non-null variables and "W" warnings

Understand the motivation. This is ok.

## Type parameters

Unconstrained may be either nullable or nonnullable, so we have to be defensive. That's quite restrictive, but probably right.

## Structural relationships

In TypeScript there are more type relationships because of structural types. We don't even get to first base here.

# Ranges

## Open

Sure about syntax? Should there be `*` instead?

## From end

Indexing from end is probably more common in Python than any ranges at all! Cutting that off with `-x` syntax is a shame.

If we weren't doing `^`, just do ranges with positive numbers. Solve the "from end" problem in general or not at all.

## Conclusion

If indexing and multiple dimensions are in the core syntax, might as well do the whole enchilada. Optimize in compiler when using `^` on arrays and strings.


