null [re: spec#]

Nick Sabalausky a at a.a
Mon Nov 8 22:16:52 PST 2010


"so" <so at so.do> wrote in message news:op.vlua80b47dtt59 at so-pc...
>> I think I figured out what you meant. When I said "C# got it right", you
>> thought I was talking about how C# doesn't allow any "int x = void;"
>> whatsoever, right? That's not what I meant. I was talking about how C#
>> issues a compile-time error whenever a variable is read before it's
>> guaranteed to have been written (at least for local vars, I don't 
>> remember
>> how it handles member vars).
>
> That too, and i am having hard time understanding the other as well, that 
> i thought you mean "int x;" can cause bugs but not "int x=0;"
> and compiler should track "int x;"
>

Example:

// Returns: Needs another pass?
bool process(ref int a) {...}

// Process arr in reverse order.
// Certain elements may need more than one pass.
void foo(int[] arr)
{
    int i;  // Oops! Meant "int i = arr.length;"
    while(i > 0)
    {
        bool shouldReprocess = process(arr[i]);
        if(!shouldReprocess)
            i--;
    }
}

Yes, there are probably other ways to write that, but the basic idea is that 
bugs can be caused by D's automatically assuming you wanted to initialize to 
a certain value.

Requiring you to actually say what value you want to start with would give 
the programmer a chance to avoid these problems. Walter is worried that this 
would cause certain programmers to blindly toss in something like "= 0". I 
say, if that's a bad thing to do, then why in the world should the compiler 
AUTOMATE that exact same bad idea?




More information about the Digitalmars-d mailing list