On Saturday, 15 September 2012 at 21:30:03 UTC, Walter Bright wrote:
On 9/15/2012 5:39 AM, Henning Pohl wrote:
The way D is dealing with classes reminds me of pointers because you can null them. C++'s references cannot (of course you can do some nasty casting).

Doing null references in C++ is simple:

int *p = NULL;
int& r = *p;

r = 3; // crash


IMHO int * p = NULL is a violation of the type system and should not compile.
NULL can in no way be considered a pointer to an int.

In the same way this should fail:
Class A
{

}
A a;

Low level programmers might know that references are implemented in the microprocessor as memory locations holding addresses of other memory locations, but high level programmers should not need to know this.

A separate special syntax should be used by low level code in D.
In the vast majority of code, having nullable references is a source of bugs.

Passing null to a function expecting a reference/pointer to something is equivalent to passing a random number and is the same as mixing a biycle into a recipe asking for a cup of sugar.

In cases where you really want to pass a value that could be a reference to something or could be null, use a special type that allows this. A clever library writer might be able to implement such a type using their low level knowledge of pointers but the rest of us should be protected from it.

Reply via email to