"Nick Sabalausky" <a...@a.a> wrote in message news:ibc5ve$1q7...@digitalmars.com... > "Simen kjaeraas" <simen.kja...@gmail.com> wrote in message > news:op.vlwul8tuvxi...@biotronic-pc.lan... >> >> Yup. Also, as opposed to certain other solutions, it does not require >> advanced flow control, that is likely to be incomplete. Incomplete flow >> control here will make people write code 'to shut the compiler up'. And >> that is worse than uninitialized variables. >> > > First of all, the risks from "shut the compiler up" initalizations are > highly exagerated (I've dealt with enough C# to know that Walter's full of > crap on the "dangers" of that). Secondly, there is absolutely no way it's > worse than auto-initing. Let's look at an example: > > int i; > // Dumb-ass convoluted code that should never pass code review anyway: > if(m) > i = something; > // Stuff here > if(m) > // Do something with 'i' >
Also, as I've said when this was discussed in the past, I wouldn't even want the flow analysis to be perfect because all that would accomplish is to encourage garbage like the above (which would just end up being highly fragile anway). > Suppose the compiler complains 'i' might be used before being written to. > The programmer has two choices: > > 1. Blindly toss in "=0" with no regard as to whether or not it's correct. > 2. Fix the damn code properly (And believe it or not, this *may* actually > amount to "int i=0;", but just not always). > > Now, let's go back to D's current behavior. Only one thing ever happens > now. The compiler will: > > 1. Blindly toss in "=0" with no regard as to whether or not it's correct. > > Note that's word-for-word identical to before, except now option 2, the > *right* option, doesn't even fucking exist. That does NOT make it better, > that makes it worse. > >