Null references (oh no, not again!)

Denis Koroskin 2korden at gmail.com
Wed Mar 4 11:01:53 PST 2009


On Wed, 04 Mar 2009 21:28:17 +0300, Walter Bright <newshound1 at digitalmars.com> wrote:

> Denis Koroskin wrote:
>> Another question is the feature's usability. It might turn out to be  
>> not very handy to have all variables initialized, but we can't know  
>> until we really start using it, right?
>
> I've used compilers that required explicit initializers for all  
> variables. Sounds great in theory, in practice it *causes* bugs.
>
> What happens is the compiler dings the user with "initializer required."  
> The user wants to get on with things, so he just throws in an  
> initializer, any initializer, to get the compiler to shut up.
>
> The maintenance programmer then finds himself looking at:
>
> int x = some_random_value;
>
> and wondering why that value, which is never used and makes no sense  
> because the rest of the logic assigns x a proper value before it gets  
> used anyway. So he wastes time figuring out why that dead initializer is  
> used.
>
> Then the next maintenance programmer, with a poor understanding of the  
> code, changes the logic so now x's some_random_value actually gets used,  
> and bug happens.
>
> In general, it's a bad idea to force the user to throw in dead code to  
> shut the compiler up. A particularly illustrative case of this is Java's  
> exception specification, which they loosened up after it became clear  
> that this was not a good idea.

In fact, that's what happen right now. It's just T.init instead of some_random_value, which is, in fact, "some random value" that is different for different T (0 for ints, 0xFF for char, NaN for floats etc).

I believe C# compiler does the right think. It allows variables to stay uninitialized as long as they are not accessed:

int main()
{
    int i; // not an error
    //return i; // error: use of uninitialized variable

    i = 0;
    return i; // fine
}

This effectively elliminates the need for stupid dummy initializers.




More information about the Digitalmars-d mailing list