Inherent code performance advantages of D over C?

Walter Bright newshound2 at digitalmars.com
Fri Dec 6 14:20:22 PST 2013


"there is no way proper C code can be slower than those languages."

   -- 
http://www.reddit.com/r/programming/comments/1s5ze3/benchmarking_d_vs_go_vs_erlang_vs_c_for_mqtt/cduwwoy

comes up now and then. I think it's incorrect, D has many inherent advantages in 
generating code over C:

1. D knows when data is immutable. C has to always make worst case assumptions, 
and assume indirectly accessed data mutates.

2. D knows when functions are pure. C has to make worst case assumptions.

3. Function inlining has generally been shown to be of tremendous value in 
optimization. D has access to all the source code in the program, or at least as 
much as you're willing to show it, and can inline across modules. C cannot 
inline functions unless they appear in the same module or in .h files. It's a 
rare practice to push many functions into .h files. Of course, there are now 
linkers that can do whole program optimization for C, but those are kind of 
herculean efforts to work around that C limitation of being able to see only one 
module at a time.

4. C strings are 0-terminated, D strings have a length property. The former has 
major negative performance consequences:

     a. lots of strlen()'s are necessary

     b. using substrings usually requires a malloc/copy/free sequence

5. CTFE can push a lot of computation to compile time rather than run time. This 
has had spectacular positive performance consequences for things like regex. C 
has no CTFE ability.

6. D's array slicing coupled with GC means that many malloc/copy/free's normally 
done in C are unnecessary in D.

7. D's "final switch" enables more efficient switch code generation, because the 
default doesn't have to be considered.


More information about the Digitalmars-d mailing list