Three good blog posts about undefined behaviour in C and C++:
http://blog.regehr.org/archives/213
http://blog.regehr.org/archives/226
http://blog.regehr.org/archives/232

In those posts (and elsewhere) the expert author gives several good bites to 
the ass of most compiler writers.

Among other things in those three posts he talks about two programs as:

import std.c.stdio: printf;
void main() {
    printf("%d\n", -int.min);
}

import std.stdio: writeln;
void main() {
    enum int N = (1L).sizeof * 8;
    auto max = (1L << (N - 1)) - 1;
    writeln(max);
}

I believe that D can't be considered a step forward in system language 
programming until it gives a much more serious consideration for 
integer-related overflows (and integer-related undefined behaviour).

The good thing is that Java is a living example that even if you remove most 
integer-related undefined behaviours your Java code is still able to run as 
fast as C and sometimes faster (on normal desktops).

Bye,
bearophile

Reply via email to