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