Non-Nullable References by Default
Some languages have non-nullable types. Object references which can't be assigned null. I first heard of it in Spec# . It recently occurred to me that maybe in Heron this should be the default behavior of reference types.
Null pointer errors are not as disastrous in more modern languages like Java and C# as they once were in C and C++, because you can usually be assured of an exception being thrown. However, it doesn't change the fact that there is a significant amount of code in existence which exists solely to check that arguments are not-null. In addition if you add up all of the programmer time in the world spent chasing null pointers, it too would be quite significant.
I find null pointers quite useful as sentinel values in some cases, but this programming idiom is the exceptional case, not the rule. So I asked StackOverflow.com why not use a special form (like C# does for nullable value types) for any reference that we want to assign to null.
<font color="#2b91af">MyClass</font> notNullable = <font color="#00008b">new</font> <font color="#2b91af">MyClass</font>(); notNullable = <font color="#00008b">null;</font> <font color="#999999">// Error! </font> <font color="#999999">// a la C#, where "T?" means "Nullable<T>"</font> <font color="#2b91af">MyClass</font>? nullable = <font color="#00008b">new</font> <font color="#2b91af">MyClass</font>(); nullable = <font color="#00008b">null;</font> <font color="#999999">// Allowed</font> |
One advantage of non-null references is that the compiler can completely skip null checking if a non-null value is passed as a non-null argument.
At StackOverflow there was some support for the idea, and no strong argument against it.What are your thoughts? Would it benefit your code base if null checking could be removed, and the possibility of null error were eliminated?
For those interested, I have started a list of Heron features that are not yet implemented, or are still under consideration.

