There's a long thread on reddit about the faults of C language:
http://www.reddit.com/r/programming/comments/92l8w/in_your_opinions_what_is_wrong_with_the_c/

Some comments derived from it:

D already fixes/pathes several problems of C, but not all of them. One of the 
problems is the pointer syntax and the problem coming from its operator 
precedence. Pascal pointer syntax is a bit better. The famous "C++ resyntaxed" 
shows a quite better pointer syntax. I'd like to see a better and less 
bug-prone pointer syntax in D, but it's hard to change it and keep 
almost-source-compatibility with C at the same time.

------------

Lint-like programs like Splint (http://www.splint.org ) help avoid some of the 
problems of C, but from experience I can see people don't use such programs. So 
D has to contain some of the things done by a lint. One of the important things 
is a way to add some more semantics to programs, for example to say if two 
pointers/slices/arrays are surely distinct, and many other things. (So far I 
have not understood the D stance regarding pointer aliasing).

------------

D has now two switch, both of them faulty. This looks worse than the C 
situation. I can't appreciate this situation.

------------

C comma operator is bad. Python shows a WAY better way to use commas, but if D 
wants to keep its almost-source-compatibility with C then Python syntax may be 
hard to be added. A partial solution I see is just to turn some usages of the 
comma operator into a compilation error, just like in D it's an error legal C 
syntax like:
int *i, j;

------------

Java shows that undefined behaviour can be avoided with an acceptable cost in 
performance. So D eventually has to remove all situations where it acts in an 
undefined way. Where it's really needed some non-standard way to do things can 
be added. Better to have nonportable things than undefiend things.

------------

writefln, writeln and the things of Tango are nice and cute and safe, but if I 
have to save 250 MB of numbers (or 1 GB of them, or even more) then performance 
is important, and those cute functions are 2-3-5 times slower than printf. This 
means printf can save me minutes of running time. So I use printf. But if I use 
printf in C and I write:

int main() {
    float f = 1.2345;
    printf("%d\n", f);
    return 0;
}

The compiler says me:
warning: format '%d' expects type 'int', but argument 2 has type 'double'
While DMD compiles it silently. Better to quickly add such warning/error to D 
compilers too.

Bye,
bearophile

Reply via email to