Let’s Stop Bashing C
My complaint against C is that some of the smartest people on the planet use it to write infrastructure that regularly fails catastrophically. If the experts who love it aren&#x27;t capable of writing correct code, I have no chance whatsoever. Humans just aren&#x27;t good at the fiddly bits (remembering to free(); not to free() twice; not to use after free(); accidentally adding a second clause to a non-bracketed if expression; how many times to we see these in vulnerability reports?).<p>C is obviously very powerful. There&#x27;s no denying that. But it does approximately zero of the things to help programmers that a modern language does. It&#x27;s not even strongly typed in the usual sense (is there the equivalent of casting void pointers anywhere else?).<p>Finally, C is slow. Yeah, you read that right. Its main problem is that it has no non-wizardry high level semantics for parallelism. For example, modern languages have map() to say &quot;do this operation on all of these items&quot;. In C, you have to write that as &quot;for each item in this collection, do this thing, then the next, then the next, ...&quot;. If the compiler is exceptionally smart, it might infer what&#x27;s going on and help out. But with map(), you&#x27;re explicitly telling the language &quot;I want all of these things to be done&quot; and it doesn&#x27;t have to <i>infer</i> anything.<p>I respect C. It&#x27;s given us a lot of great stuff. But there&#x27;s no way I&#x27;d willingly start a new project in C today given the alternatives. I am dumb, and given the choice between languages which help me and languages which are basically a small step up from assembler, I&#x27;m going with one that gives me a reasonable shot at writing safe, fast, and understandable code.