The Pragmatic Answer
New project, greenfield, team willing to learn: Rust. Existing C++ codebase, tight deadline, team already productive in C++: modern C++. The best language is the one your team ships reliable code in.
I have shipped production code in both. Here is my genuinely balanced take.
New project, greenfield, team willing to learn: Rust. Existing C++ codebase, tight deadline, team already productive in C++: modern C++. The best language is the one your team ships reliable code in.
Large Rust projects have notoriously slow compile times. Incremental compilation helps but a clean build of a big project can take minutes. C++ with modules (C++20) is catching up, but Rust's compile times remain a real productivity issue for large codebases.
Rust's unsafe blocks exist for a reason — sometimes you genuinely need to do things the borrow checker cannot verify. The key is that unsafe is explicit and bounded. Code reviewers know exactly where to look. In C++ everything is implicitly unsafe.
Ecosystem maturity — every library exists. RAII and modern C++ (smart pointers, concepts, ranges) are genuinely excellent. Move semantics are nearly as good as Rust's. And critically, every embedded/systems team already knows it. Hiring Rust developers is still hard in 2025.