One of the most important things that Steve Jobs did in calling for the retirement of Adobe Flash was to convince people that Flash could be replaced in the first place. That hadn’t occurred to most people.
Similarly, I think that most programmers today don’t believe that C and C++ can be replaced with safe languages. But C and C++ are just programming languages. Of course they can be replaced! In some sense we have been working on replacing C and C++ before they even existed. Every programming language is a competitor to every other programming language.
For example, there’s no question that Java has replaced C/C++ in a huge swath of enterprise software. If Java didn’t exist, that software would have been written in C++.
Similarly, there’s a lot of software being written today in Go instead of C/C++, particularly in the DevOps world. That community would have been a stronghold of C/C++ in the past.
If programmers are willing to rely on garbage collection for an application, they are not going to use C/C++. You can use garbage collection with C/C++ but no one is doing this. Once you accept garbage collection it’s clear that there are better languages out there, languages designed with garbage collection in mind. And, not coincidentally, they are safe languages.
If programmers insist on manual memory management, Rust appears to be the only safe language alternative at the moment. Fortunately, it appears to have a lot of momentum, and the community is working on many relevant projects. For example, they are writing garbage collectors in Rust; media parsers and web browsers; operating systems and unikernels.
I see it as simply a matter of time. COBOL isn’t dead, but it’s been replaced. C and C++ are following the same path.