| It has a relatively simple (and lacking) syntax, but a language is much more than its syntax. Compare to Python, Go or Rust and you'll see the following: 1. Infrastructure - C has no package repository, no standard build system. When you receive a C program, you need to know a dozen of build systems (autoconf + automake? scons? qmake?) and ways of getting packages (git? distro packages? some obscure website?) that sometimes get in each other's way. As a side effect, build process isn't properly documented. Probably the best we have are CI files explaining the environment and maybe Dockerfiles if you're lucky. 2. Standardization - yeah, there are standards, but
they're actually ignored. There's lots of comments stories on HN about how C committee specified things that are unrealistic or outright impossible. There's lots of important subjects that aren't standardized at all. 3. Intuitiveness - one trivial example is undefined behavior. Due to existence of legacy code, pretty much all compilers default to letting through expressions that end up leading to UB. Ultimately you can't really reason about your code without also knowing how it was compiled. 4. Safety - selling point of Rust and hate it as much as you want, but C makes it way too easy to shoot yourself in the foot for no apparent reason. Do you really expect your student to learn all secrets of OS/C memory allocation plus spend his first half a dozen of hours of debugging because he misused a pointer? In university, it's sometimes easier to rewrite the program than fix the bug if you're only getting started with pointers. Backtraces are useless if your stack is corrupt. There are probably more reasons why it's a terrible idea, but those are just a few off the top of my head. Consider some of those posters as of examples of C design failures: http://natashenka.ca/posters/ |
Any examples? It sounds ridiculous, perhaps you were speaking about C++? But then again I can't think of anything but "export templates" that were finally dropped from the standard.