Which D features to emphasize for academic review article

F i L witte2008 at gmail.com
Sat Aug 11 00:11:41 PDT 2012


Walter Bright wrote:
> That is a good solution, but in my experience programmers just 
> throw in an =0, as it is simple and fast, and they don't 
> normally think about NaN's.

See! Programmers just want usable default values :-P


> It's too bad that ints don't have a NaN value, but 
> interestingly enough, valgrind does default initialize them to 
> some internal NaN, making it a most excellent bug detector.

I heard somewhere before there's actually an (Intel?) CPU which 
supports NaN ints... but maybe that's just hearsay.


> Sadly, D has to map onto imperfect hardware :-(
>
> We do have NaN values for chars (0xFF) and pointers (the 
> villified 'null'). Think how many bugs the latter has exposed, 
> and then think of all the floating point code with no such 
> obvious indicator of bad initialization.

Ya, but I don't think pointers/refs and floats are comparable 
because one is copy semantics and the other is not. Conceptually, 
pointers are only references to data while numbers are actual 
data. It makes sense that one would default to different things. 
Thought if Int did have a NaN value, I'm not sure which way I 
would side on this issue. I still think I would prefer having 
some level of compile-time indication or my errors simply because 
it saves time when you're making something.


> It would be used where the static analysis is not able to 
> detect that the initializer is dead.

Good to know.


> However, and I've seen this happen, people will satisfy the 
> compiler complaint by initializing the variable to any old 
> value (usually 0), because that value will never get used. 
> Later, after other things change in the code, that value 
> suddenly gets used, even though it may be an incorrect value 
> for the use.

Maybe the perfect solution is to have the compiler initialize the 
value to NaN, but it also does a bit of static analysis and gives 
a compiler error when it can determine your variable is being 
used before being assigned for the sake of productivity.

In fact, for the sake of consistency, you could always enforce 
that (compiler error) rule on every local variable, so even ints 
would be required to have explicit initialization before use.

I still prefer float class members to be defaulted to a usable 
value, for the sake of consistency with ints.


More information about the Digitalmars-d mailing list