I don't care about RAII, so I don't care about the ownership tracking that Rust provides. I like to think that memory management is actually part of the problem, rather than a responsibility for the language's runtime.
I want to generate hundreds of datastructures or algorithms at compile time that are optimal in specific situations using introspection of types.
I want everything else in the language to get out of the way and know that I'm writing code that actually runs on a real computer, not an abstract machine.
Plus, inheriting abstract interface classes is more convenient than writing a vtable by hand when such a thing makes sense. You don't have to participate in Java-style class voodoo if you don't want to.
I am sure all the other languages mentioned like Rust, Zig, and D are very good too, but C++ is where all the high-performance libraries live, and whatever productivity gains I would get by switching languages is utterly dwarfed by that.
We could use more safety even, like automatic race condition analysis in language and more.
Conservative extensions of C and C++ exist, and they're not very popular, just check how popular D is...
As a comparison, has Python decided what it wanted to be? A scripting language like Perl, data processing language like R, tool command language like TCL or web backend programming language like PHP or RoR? But nobody in their right mind will ever say Python need to decide on his direction when it grows old.
As you probably have known when Python is around 20 years old (like D today), it played second or third fiddle to PHP, TCL, Ruby (RoR), Perl and R in their respective domains, and at the time the growing pain into Python 3 is yet to happen. But looks where is it now?
Personally I think the D language foundation is already solid [1]. It just need a killer application for it to be more popular and well-known just like what RoR did to Ruby. And if you have a solid foundation, it will probably just a matter of time for it to properly take off.
While they don't know where it should go, C#, C++, Swift keep adopting D like features, with their rich ecosystem.
D could have been C# on Unity, given Remedy experience with the language, instead not.
D's Metaprogramming was great 10 years ago, not when placed against C++20 metaprogramming, or the features arriving in C++23.
Programming languages used to stick to one programming concept for examples either imperative, functional or object oriented. But now most modern languages support at least more than two concepts to stay relevant.
Regarding other languages later adopting D like features, sure you can do that but the end results will probably be sub-optimal and clunky. For example, Python adopting array processing in Numpy library and becoming very useful and popular, but it will not be as seamless, intuitive and natural as R or Fortran array processing capabilities.
Phobos still doesn't fully work with @nogc, DIP1000 is undocumented and now there is @life getting the spotlight, meanwhile the GC is stuck in early 2000 design, the std.allocators library is in experimental limbo for years.
Even if the results are cluky, they can double down on an eco-system in libraries, IDE tooling and OS support, that D lacks.
Currently the motto is Jack of all trades, master of none.
Also DIP1000 isn't that badly documented these days, not brilliantly, but frankly I find that a lot of complaints come from people who weren't ready (this doesn't necessarily apply to you in particular, just that these attitudes spread) to understand it in the first place.
And what do you mean by OS support? I find that not many other languages take it as seriously as us?
Taking C# as example, I mean being able to do embedded stuff (Meadows, IoT Core), regular desktops, IBM mainframes, game consoles, and mobile OSes, without having to create my own compiler toolchain and self made druntime.
Which features do you recommend we deprecate?
https://github.com/attractivechaos/klib/blob/master/khash.h
https://github.com/attractivechaos/klib/blob/master/kvec.h
FWIW writing a generic vector like that ^^^ is going to be faster than almost any std::vector implementation you can find. And that is just one way to do it, there are other tricks.
The actual logic of a B*-tree would be equally hard in any language. The macroized template part is easy.