I love C++ (though it often frustrates me), and I think Rust is doing some awesome things (though I don’t work in it). A few clarifications:
Your point about iterators and composability: you’re right, the STL suffers a bit here, but Eric Neibler’s ranges library (which is partially approved for C++20) addresses this.
> Compile time programming ... aren’t in a standard yet.
There compile time programming story in C++ has been getting better and better, and has made great strides with recent standards (check out constexpr, which arrived in C++11).
> template meta programming is an agony to use.
Many people would agree with you, but it’s a matter of taste :). It’s “just functional programming” (with an arguably terrible syntax).
I’m very jealous of many rust features, like built in algebraic data types, pattern matching, but most of all their build and package stories.
No, constexpr is in no way similar to the compile-time programing available on Rust. It's not on the same ballpark, it mostly does not have similar goals.
> It’s “just functional programming”
Well, yes, it's just functional programming where all the data is text, you don't get to query or debug intermediate values, and functions aren't even first class.
That's to say, it's a pure language, and lacks all the other features of modern FP languages.
Constexpr is not bad, but not macros. Macros can do things like generate new types, and add methods existing types. That's crucial for things like custom derive. C++ will get that sort of thing from the metaclasses proposal, which slouches towards WG21 to be born:
Your point about iterators and composability: you’re right, the STL suffers a bit here, but Eric Neibler’s ranges library (which is partially approved for C++20) addresses this.
> Compile time programming ... aren’t in a standard yet.
There compile time programming story in C++ has been getting better and better, and has made great strides with recent standards (check out constexpr, which arrived in C++11).
> template meta programming is an agony to use.
Many people would agree with you, but it’s a matter of taste :). It’s “just functional programming” (with an arguably terrible syntax).
I’m very jealous of many rust features, like built in algebraic data types, pattern matching, but most of all their build and package stories.