I'd much rather have it opt in at the class declaration level like:
`strong class Foo`
Where strong means references to it act like value type references with regards to nullability.
Alternatively, they can just fork C# and remove all the weird parts they've accumulated over the years and stay with a sub-language that's more powerful and they can add useful features on top of.
You still haven't said what's wrong with the proposal. There are multiple versions of C# already. Emitting warnings seems to be a good compromise, given there is already an option to treat warnings as errors.
>`strong class Foo`
This is a slippery slope. Next time they add another feature for correctness, they'll have to add 'stronger class'. This is akin to "use stricter" proposed by Sound Script (JS).
They usually contain thousands of items from different plugins, designers, etc. Sorting through them all is impractical.
Errors are not just about protecting a developer from himself, but more importantly, protecting developers in a team from one another.
If the compiler can't produce an error, the whole feature is pointless.
That being said, I don't think warnings would be a good way to go on this case, because the sheer number of warnings generated by these new rules in existing, large (and mostly bug-free) projects would make it very difficult to reestablish a zero-warnings state. Developers on the team will just get undisciplined due the the broken windows effect.
However if your build is spitting thousands of warnings and no one cares, that sounds like an issue someone should be looking at...
"The feature will not provide airtight guarantees, but should help find most nullability errors in code."
That seems like a pretty big flaw, but it's still an improvement.
And it's not exactly a slippery slope to add more kinds of strict. Here, have a syntax: use strict(a, b, c).