Channels ▼

Christopher Diggins

Dr. Dobb's Bloggers

Non-Nullable References by Default

December 02, 2009

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.

Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 


Video