Null references redux
Walter Bright
newshound1 at digitalmars.com
Sat Sep 26 15:25:59 PDT 2009
language_fan wrote:
> Sat, 26 Sep 2009 14:49:45 -0700, Walter Bright thusly wrote:
>
>> The problem with non-nullable references is what do they default to?
>> Some "nan" object? When you use a "nan" object, what should it do?
>> Throw an exception?
>
> Well typically if your type system supports algebraic types, you can
> define a higher order Optional type as follows:
>
> type Optional T = Some T | Nothing
>
> Now a safe nullable reference type would look like
>
> Optional (T*)
>
> The whole point is to make null pointer tests explicit.
But people are objecting to having to test for null pointers.
> You can pass
> around the optional type freely, and only on the actual use site you need
> to pattern match it to see if it's a null pointer:
>
> void foo(SafeRef[int] a) {
> match(a) {
> case Nothing => // handle null pointer
> case Some(b) => return b + 2;
> }
> }
>
> The default initialization of this type is Nothing.
I don't see the improvement.
> Some data structures can be initialized in a way that null pointers don't
> exist. In these cases you can use a type that does not have the 'Nothing'
> form. This can lead to nice optimizations. There is no default value,
> cause default initialization can never occur.
Seems like a large restriction on data structures to build that
requirement into the language. It would also make it difficult to
transfer code from Java or C++ to D.
More information about the Digitalmars-d
mailing list