How does D handle null pointers?

Steven Schveighoffer schveiguy at yahoo.com
Tue Aug 24 05:57:32 PDT 2010


On Mon, 23 Aug 2010 16:30:15 -0400, Adam B <cruxic at gmail.com> wrote:

> I was pondering bearophile's idea of having compile-time null
> checking.  Since adding new language syntax is often a hard thing to
> sell to the language authors, perhaps we could get by with just a
> compiler warning?  Some static code analysis.  For example:
>
> --------------
> char[] foo()
> {
>        if (some condition)
>             return "yada";
>        else
>                return null;   //compiler makes note that foo() might  
> return null
> }
>
> void bar()
> {
>      char[] s = foo();
>      printf(s);   //compiler issues warning because 's' has not been
> null-checked
> }
> --------------
>
> Or, if that's too heavy for the compiler, it could be done in a
> separate program.  (Is there a Lint like program for D?)

This kind of analysis is not possible by the compiler because of the  
compilation model.  Essentially, it's possible to force the compiler to  
compile bar without having access to the source code of foo.  Without  
access to the source code, it cannot tell whether the result will be null  
or not.

The object file format does not provide places to store such metadata  
(whether a function returns null or not), so it's not possible to resolve  
this.  There are other compilation models which allow storage of metadata,  
and I'm in favor of having such a system, but it would be a drastic change  
 from the current model.  But essentially such a model allows complex  
analysis of the code (including full escape analysis), and also allows you  
to avoid sync problems such as compiling against newer sources but linking  
with stale objects.

-Steve


More information about the Digitalmars-d mailing list