The joke in the C community since the early 80's is that C isn't a high-level language, it's a medium-level language. Others quipped C is a portable assembly language: programmer beware! This was 40 years ago! Let's not pretend we've recently discovered all these problems with C. This has been known for decades. It's also been tolerated for decades because we had nothing more performant we could use and we needed to wring every ounce of performance we could get out of those feeble processors we had available at the time. Unfortunately because we were forced to use C it has an inertia that's kept it going all this time. But there's also a counterforce slowing down C's penetration. Now the last bastion of C is kernels, drivers, and embedded systems (used to be much, much more). Now we're seeing Rust starting to move into these spaces and actually we've been using non-C languages now in the embedded system space for the past 10 years. It's really just kernels and drivers remaining for C.
As far as using C as an ABI - I agree, that needs to evolve. I'm not opposed to using an interface specification language created specifically for ABI's. I think that's the way forward.
As far as using C as an ABI - I agree, that needs to evolve. I'm not opposed to using an interface specification language created specifically for ABI's. I think that's the way forward.