# 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.