1. 12
  1. 8

    This is a list of around 10% of C compilers that have been used commercially.

    1. 1

      And arguably sort of misattributes some of them…“Oracle C” may currently be maintained by Oracle, but crediting them with having “developed” it (in the “from the ground up” sense) would be pretty generous.

      Some of these also aren’t entirely independent – I’m pretty sure the PathScale and Open64 compilers are different forks of the same underlying codebase. [Edit: and after clicking the link to its page, I see that AMD’s AOCC is, like Clang, also built on LLVM.]

    2. 7

      I’m excited about cproc

      1. 7

        LCC in the list was famously used by Quake 3 to generate bytecode for a scripting VM. It was chosen because it was easily retargetable.

        Some more FOSS compilers which are missing from this list:

        • The Plan 9 compilers (which famously used to be used by Go as well), 8c, 9c, etc.
        • romcc, a C compiler written specifically for the Coreboot project which generates code which doesn’t require RAM and uses only CPU registers. IIRC it’s no longer used, though, probably since all modern CPUs support cache-as-RAM.
        • More assorted random compilers: cproc, 8cc, andrewchambers/c, lacc, scc
        1. 2

          There are C compilers from Keil targeting 8051, and ARM.

            1. 1

              Although not widespread, I’ll add it’s in commercial use via AbsInt. I wonder how many buyers they have.

            2. 1

              The list is neat, but it’s definitely missing some from the 80s. DeSmet C is still around. There’s also Eco-C and Eco-C88 that were inexpensive C compilers for CP/M and DOS.

              1. 1

                I used the IBM C and C++ compilers (xlc and xlC) for work. I was always surprised at the difference in quality between the two.

                The C compiler worked well; it had good error messages, and reasonably fast compile times. In addition, the linker that shipped with IBM was really fast, and could handle cyclic object dependencies by default.

                The C++ compiler always felt unfinished – it was really slow, and the error messages were arcane. We used to run g++ against files that didn’t build in order to get better error messages. In addition, the compiler only supported up to C++03 (as of 2018). IBM started using clang as a frontend to add support for C++11 onward.

                C has – in someways – fallen into a compiler monoculture. But at least writing a C compiler is an accessible feat! I think that because the C language is small, the ecosystem can continue to grow. It’s really exciting to see new projects like cproc.

                It’s unfortunate that alternative C++ compilers have the incredible task of supporting the ever-growing complexity of the language. I’d be interested to research a list of C++ compilers as well.