On Sun, 19 May 2013 06:57:16 +0200, Walter Bright <newshou...@digitalmars.com> wrote:

The current solution is to rely on faith, and I remember someone talking about
that at DConf recently.

Rely on what faith?

void foo(int* p) {} // p must never be null
void foo(NotNull!(int*) p) {}

One of these is tested at compile time, *and* includes valuable
documentation in the signature. The other is either less performant
or buggy.


Now that what other languages does is cleared, let's do some consideration on null.

A pointer point on something. For instance, an int* point on an integer. null doesn't point on a integer. Non nullable pointer aren't a restricted set of values, as, by definition, null isn't a value that point to an int. That doesn't
stand either.

By definition? Pointer semantics are what we choose it to mean.

Of course. But which definition is saner:

  "T* is either a valid pointer to a T, or a value that blows up when used
  in certain ways (but not others)."

or

  "T* is a valid pointer to T."

Of course, the latter also requires something like Maybe!T:

  "Maybe!T is either a valid pointer to a T, or a value on which no
  operations may be performed. In order to gain access to the T, both
  cases have to be handled."

--
Simen

Reply via email to