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