I'm a C fan, and I get a lot of resistance as a result. (I'm also a Lisp fan, so maybe that balances the scales?)
From @david_chisnall we can read about some of the problems with C. This is from https://queue.acm.org/detail.cfm?id=3212479&doi=10.1145%2F3212477.3212479
"C code provides a mostly serial abstract machine (until C11, an entirely serial machine if nonstandard vendor extensions were excluded). Creating a new thread is a library operation known to be expensive, so processors wishing to keep their execution units busy running C code rely on ILP (instruction-level parallelism). They inspect adjacent operations and issue independent ones in parallel. This adds a significant amount of complexity (and power consumption) to allow programmers to write mostly sequential code. In contrast, GPUs achieve very high performance without any of this logic, at the expense of requiring explicitly parallel programs."
"The quest for high ILP was the direct cause of Spectre and Meltdown. A modern Intel processor has up to 180 instructions in flight at a time (in stark contrast to a sequential C abstract machine, which expects each operation to complete before the next one begins). A typical heuristic for C code is that there is a branch, on average, every seven instructions. If you wish to keep such a pipeline full from a single thread, then you must guess the targets of the next 25 branches. This, again, adds complexity; it also means that an incorrect guess results in work being done and then discarded, which is not ideal for power consumption. This discarded work has visible side effects, which the Spectre and Meltdown attacks could exploit."
Today a colleague shared another article, digging deeper into the myth that a flat memory model is central to C:
https://carminatialessandro.blogspot.com/2026/02/cheri-fil-c-are-they-c-memory-safe.html
I'd love a similar analysis of branch prediction complexity for Scheme and/or Common Lisp if folks know of one. I'm also curious how code that comes out of, for instance, Chicken Scheme compares to typical C code with regard to branching complexity.