On Saturday, 11 August 2012 at 04:33:38 UTC, Walter Bright wrote:
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.

The compiler could always have flags specifying if variables were used, and if they are false they are as good as NaN. Only downside is a performance hit unless you Mark it as a release binary. It really comes down to if it's worth implementing or considered a big change (unless it's a flag you have to specially turn on)

example:

  int a;

writeln(a++); //compile-time error, or throws an exception on at runtime (read access before being set)

internally translated as:
  int a;
  bool _is_a_used = false;

  if (!_a__is_a_used)
    throw new exception("a not initialized before use!");
    //passing to functions will throw the exception,
    //unless the signature is 'out'
  writeln(a);

  ++a;
  _a__is_a_used= true;


Sadly, D has to map onto imperfect hardware :-(

Not so much imperfect hardware, just the imperfect 'human' variable.

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.

Reply via email to