Walter Bright, the man who designed most of the language along with Andrei Alexandrescu, are both C++ heavyweights and it shows. Template syntax using template!type instead of template<type> is a great - surface level - example of this attention to detail: Easier on the eyes and orders of magnitude easier for the compiler
If so, it would be a sign for me no to invest in D, as my experience is that easy metaprogramming leads to more abuse than goodies. I
It's really obvious, and even at it's worst it's no worse than C++ (Except much easier to debug due to D's much less fundamentalist type system).
I hate languages that deliberately take features away from the developer: This is why - although I respect the philosophy - I would never choose to use Go, for example.
But to each their own, etc.
I can't think of a language whose metaprogramming features get abused worse than C++, so saying it's not worse isn't really heaping praise.
stdin. byLineCopy.array.sort!((a, b) => a >b).each!writeln;
This example is everyday code in D, but basically unthinkable in C++ (Possible but try getting it that short without writing your own library). It is also telling that the aesthetic style of the above code (UFCS) is a feature D has had for years but was rejected for inclusion into C++ despite BS backing it.
The don't really take the features away, they move the problem to a proper templating/code generation language. These are language neutral so you don't have to learn a different one for each language, they are often more powerful too. IME the code they generate is a lot easier to deal with than templated code.
D vs rust - D is 100% more familiar to anyone with C or C++ background
I had the opposite experience. I have a long history of C and C++ development, yet I found D pretty impenetrable (my team inherited some D code to maintain). Rust, however, was easy to use out of the box.
I can see why Go, if you want an easy to compiled yet middle level language with good concurrency.
I can see why erlang, if you want crazy concurrency, and reliability.
I can see why rust, if you want c/c++ power, with a modern touch and a safety net.
But what is the selling point in D ? Why should I choose D over those for a particular task, and take the time and energy on this on not something else ?
Pattern matching is a feature of pure functional code rather than a requirement (As useful as it is, every time I touch haskell for fun I always miss the mathematical approach to coding when I then write in C-land).
Enforced purity is a feature, however. That's what I was referring to. However, ..., there is no pure-IO so it would be like Haskell before Monadic IO was figured out (I assume).
What would you choose D for ? What kind of task, project ? And why D and not the competition, given the cost of learning it ?