C has the great virtue that most computers have a C compiler installed or can get one from the vendor, and by typing:
% clang -o thing thing.c # or gcc if you must.
You get a binary that'll run on that platform. If you wrote your code sanely, you can recompile it on every major platform with no changes. If you find a place where a platform's different, you can add #if
to fix that.
Contrast with every other systems language:
- Do you have a compiler installed?
- Is it portable?
- Can you even fix non-portable areas?
- Can you make a binary an end-user can run?
- Can you call other libraries?
In C, the answer is always yes. In any other, it's "probably not, or only with great effort".
Someone was recommending Ada. It's not in standard gcc. You have to install something called "GNAT":
% sudo port install gnat-gcc
# Ada is self hosted (http://en.wikipedia.org/wiki/Self-hosting) #
# You need to install an existing Ada compiler and then choose #
# an appropiate variant. For more info use: #
# port variants gnat-gcc #
% sudo port variants gnat-gcc
gnat-gcc has the variants:
ada: Uses the MacPorts Ada (https://www.macports.org/) compiler to bootstrap!
gnatgpl: Uses GNAT/GPL compiler (http://libre.adacore.com) to bootstrap!
gnuada: Uses the GnuAda (http://gnuada.sourceforge.net/) compiler to
bootstrap!
macada: Uses MacAda compiler (http://www.macada.org) to bootstrap!
odcctools: Use the odcctools instead of the system provided ones - does not
work for x64 currently!
I dunno what to do here. MacAda hasn't been updated since OS X 10.4, which was 2005. I don't see any other ada in MacPorts. At this point I gave up and uninstalled everything. It's not a working language.
Go is fine except that it's a statically-compiled Java owned by Google, and every part of that is evil and wrong. The Rust Evangelism Task Force's constant whining has made me unwilling to even give all those &'s a chance, they're like digital Mormons. There's nothing really wrong with D Language except that it's not installed anywhere, and it's no safer than C for a lot of extra typing.
C isn't safe, but it's fast. It's pretty hard to use safely on large projects, but for small tools with static data buffers it's fine. You take some tradeoffs for any language.
For high-level programming, I love Scheme and JavaScript, and there's a ton of other good high-level languages. But if you need to write at the lowest level, and make it work everywhere, C's the only rational choice.