I don't know very much about C. The most I've done in it is a few educational projects, like implementing the basic functionality of
rm, and a chat server using Unix sockets. But what I hate about the C ecosystem is build systems. They're absurdly complicated and I can never get them to work.
Okay, so we have our compiler. It might be Clang or GCC or whatever. I actually think the C compilers are pretty neat; they're sometimes able to suggest what you mean when you misspell a name and warn about dangerous stuff even if it doesn't strictly break the rules. But we also need
make, which is a separate tool, and virtually a language unto itself. Okay, well, that's tolerable. Except BSD make and GNU make are different. And then there's the whole GNU autotools toolchain, not to mention
cmake, which I've had to deal with for compiling ROXTerm...
When I submitted my patch to GTK to fix a GObject Introspection annotation, I wanted to compile GTK after my change first, just to make 100% sure it would build, even though I was 99% sure it couldn't have broken the build process. I spent about 12 hours trying to do so before giving up. The quest to compile GTK led me through installing both meson and ninja, hunting down numerous dependencies manually after each failed compilation informed me of another one, googling countless cryptic error messages and reading old mailing list archives, trying on an Ubuntu system after giving up on the FreeBSD one, and finally deciding I'd just submit the merge request and hope it worked (it did).
I've never seen a language other than C that even has any need for "build systems". With Go, you just
go build it, end of story. With... hm. Okay, most of the other languages I know are interpreted. Haskell doesn't exactly have build systems per se, but it's package management experience is also a nightmare as far as I'm concerned. So maybe I'm being unfair. You tell me - do C build systems suck, or is Go a rare gem in this regard?