Most of those compilers work for multiple related languages such as C, C++, etc.:
GCC is arguably the most popular implementation.
LLVM based.
Made by Apple in 2007 when GCC did not meet it's technical and licensing requirements, later merged into LLVM. It then had contributions by Google, Apple, Intel, etc.
FreeBSD moved to it in 2012: http://unix.stackexchange.com/questions/49906/why-is-freebsd-deprecating-gcc-in-favor-of-clang-llvm
Sony PS4 (2013 Q4, FreeBSD based) moved to it while PS3 used GCC.
The great advantages of this are:
- better tooling than GNU: Python for scripting, CMake and Doxygen doc instead of
.exp
, Autotools and Texinfo - clearer design, since it was made 20 years later and it used what was learned
- can be used as a library. This is a classic problem of bug CLI utilities: they were not designed to be used programmatically as a library, and it is hard to modify them to do so. GCC is pushing forward in that direction as well now.
https://en.wikipedia.org/wiki/Small_Device_C_Compiler
Targets mostly microcontrollers, which GCC does not target as well: http://sourceforge.net/p/sdcc/mailman/message/31601719/
GPL.
http://compcert.inria.fr/compcert-C.html
https://github.com/AbsInt/CompCert
INRIA formally verified compiler to a very large subset of C99.
Written and verified in Coq.
https://en.wikipedia.org/wiki/Portable_C_Compiler
Very small.
Popular in the 1980s, until GCC killed it.
https://github.com/TinyCC/TinyCC
By Fabrice Bellard.
Educational only.
https://en.wikipedia.org/wiki/LCC_%28compiler%29
Not even free to use...
16-bit output: https://stackoverflow.com/questions/227762/looking-for-16-bit-x86-compiler
Language parsers without built-in assembly output:
Intel.
Has intrinsics for every Intel instruction, and optimizes assembly really well for Intel.
Closed source...
IBM proprietary: https://en.wikipedia.org/wiki/IBM_XL_C%2B%2B
The Linux 2014 release uses clang as front-end.
- glibc: GNU implementation, major on Linux
- Apple's libc is not glibc, but is open source http://stackoverflow.com/questions/7592069/how-to-build-apples-opensource-libc
- Microsoft likely has a closed source implementation
Then there are several implementations that target Linux-only embedded systems, and can therefore be smaller or more efficient:
- musl libc. Comparison: http://www.etalabs.net/compare_libcs.html. Alpine Linux moved to it, as it is partially binary compatible with glibc.
- dietlibc http://www.fefe.de/dietlibc/
- newlibc https://en.wikipedia.org/wiki/Newlib. GNU.
Stands for Micro libc.
Attempts to be very small for embedded systems.
One of the ways in which it is smaller is that it is Linux-only.
Was used in Alpine, but replaced with musl, which is partially binary compatible with glibc.
https://en.wikipedia.org/wiki/Bionic_%28software%29
Made for Android.
TODO check: does not fully support POSIX, but a large part of it: http://stackoverflow.com/a/27604696/895245