Coming from a systems/DSP background, Rust feels at times "higher level" than C/C++ (especially w.r.t. the crates ecosystem, although I suspect a large part of that is its youth and general instability), but mostly akin to writing C-with-classes-style C++ with static analysis baked into your build script.
The "high level" stuff baked into Rust makes it great for "low level" tasks, notably imo:
- Tests (and micro benchmarks, with nightly) alongside code, without dependencies or build system hackery.
- An incredibly powerful macro system, supplanting a lot of the templated code generation I've done in C++ which is a nightmare. Not that proc macros are perfect (yet) but at least they're legible.
- If you've ever tried to do away with dynamic dispatch via templates in place of inheritance, then Rust's generics with trait bounds are an absolute godsend
- A gosh darn dependency solution (now with custom repositories on stable!) makes dependency hell is less hellish
The "high level" stuff baked into Rust makes it great for "low level" tasks, notably imo:
- Tests (and micro benchmarks, with nightly) alongside code, without dependencies or build system hackery.
- An incredibly powerful macro system, supplanting a lot of the templated code generation I've done in C++ which is a nightmare. Not that proc macros are perfect (yet) but at least they're legible.
- If you've ever tried to do away with dynamic dispatch via templates in place of inheritance, then Rust's generics with trait bounds are an absolute godsend
- A gosh darn dependency solution (now with custom repositories on stable!) makes dependency hell is less hellish