Even though I mostly program in some form of Lisp these days, the
majority of my programming over the years was in C. That’s not hard to
understand: most of my work involved low level communications software
such as radio network controllers and message switches. Not very long
ago, C was used for virtually everything—even things for which it
wasn’t really suited.
These days, C use tends to be restricted to its more natural role as a
language for systems programming and specialized applications where
speed is essential. Even in those niches, C is feeling pressure from
languages like Go and Rust. Many younger engineers have never used C and
are inclined to think of it as a crusty, old language whose time has
passed. Pretty much like the programmers of my generation viewed, say,
COBOL.
Still, C is far from dead and is still the language of choice for many
types of programming. It has a lot going for it: it’s fast, doesn’t
require a run-time engine, and can even get by with a very small
run-time library. The folks over at the SQLite Project have a page in
which they explain why they still use C and have no plans for
changing.
In addition to the reasons above, the SQLite page also calls out C’s
stability. The very fact that it is an “old” and established language
is a plus for them because the developers don’t have to worry about
the language changing out from under them in the way that a new
language still undergoing development—such as Rust—does. C is still
evolving, of course, but very slowly and always with an eye on
backward compatibility.