Philosophy¶
D is greatly inspired by C++ and inherit parts of its philosophy. D provides powerful abstraction mechanisms without sacrificing performance. If you are looking for a better C++, you should feel at home with D. If you dislike C++, you might like D for being C++ done right.
The D Website proclaims:
Modern convenience. Modeling power. Native efficiency.
By modern convenience D means little boilerplate for type declarations, garbage collection, resource management through scope, and syntax for array operations. Power refers to the multi-paradigm approach, control of mutability for safer concurrency, and a wealth of features for any task. Efficiency means compilation to native code, escape hatches for unsafe features like inline assembly and pointer arithmetic, and additional safety annotations.
Critique¶
Sometimes D is criticised, because it is not simple language, in contrast to Go, Lisp, Javascript, or Forth. However, a D programmer sees no problem and actually likes his big toolbox.
It’s like a professional handyman having the smallest possible possible toolbox with only the barest essentials, versus a big super-toolbox that has all the right tools he might need. Just because it’s there doesn’t mean it has to be used, but if I were a handyman and had to remove a phillips-head screw, I’d want to be able to reach for a forward/reverse drill and an appropriately-sized phillips-head bit, and not have to pry it out with the bare minimum (the back of a hammer, or a sort-of-sized-similarly manual flathead screwdriver), and also not have to put one specialized mini-toolbox back and switch to a differently-specialized mini-toolbox for every different task. – Nick Sabalausky
D targets programmers, who write code every day. Learning that big toolbox pays off quite quickly in this scenario. If you only occasionally write short one-off programs, then D might not be the right tool for you.
Nevertheless the size is not a design goal of D as a language.
We want a comprehensive language, not a big/complex/perfect one. – Andrei Alexandrescu