A History of C Compilers – Part 1: Performance, Portability and Freedom
Retro C, CP/M, and Small Compilers
- Several comments reminisce about CP/M-era tools: Aztec C, Hi-Tech C, BDS C, Whitesmiths, and Turbo Pascal 3.x, emphasizing how small and fast they were compared with modern toolchains.
- People describe writing or using Z80/CP‑M emulators and compilers, debugging missing BDOS/syscalls, and cross‑compiling from modern machines (e.g., with SDCC).
- There is interest in niche languages and compilers targeting CP/M and DOS (e.g., T3X, Dice, vbcc), often praised for compactness and decent code generation.
- Some report rough edges with old toolchains (e.g., include handling, odd errors) and highlight just how manual and brittle builds could be.
Commercial vs Free Unix Compilers and GCC’s Role
- Multiple posts argue that commercial C compilers (Sun cc, IBM xlc, others) historically produced faster code and had advanced features (e.g., profile‑guided optimization) compared to GCC.
- Cost and licensing hurdles for vendor compilers are cited as a major driver of GCC adoption, especially after Unix vendors unbundled their toolchains.
- There is disagreement on GCC reliability in the late 1990s: some recall it as the stable default; others report serious bugs around 2.8/2.95 and point to the egcs fork as a response.
- GCC’s portability and zero price are consistently credited for its eventual dominance.
C++ and Other Influential Compilers
- The thread debates which was the “first native C++ compiler”: an early GNU C++ (g++) beta in 1987 versus a commercial Zortech C++ release in 1988.
- One side notes g++ used the GCC backend and was available earlier on the net; the other stresses that Zortech was the first shrink‑wrapped, widely impactful native C++ compiler on PCs.
- Datalight C is highlighted for pioneering data‑flow analysis optimizations that aggressively removed dead code, influencing later compilers.
- Other notable historical compilers mentioned include Metaware HighC, Watcom C/C++, UCSD Pascal, Free University Compiler Kit, and Tiny C.
Microsoft C and Lattice C
- There is discussion over how much early Microsoft C derived from Lattice C.
- Ads and historical material are cited indicating that Microsoft C 1.0 and 2.0 were essentially rebranded Lattice C, with Microsoft moving to its own implementation by later versions.
- Exact version boundaries and timelines remain somewhat unclear in the thread.
Licensing, “Freedom”, and Economics
- Several comments discuss how “freedom” in the GNU sense interacted with practical concerns: many users initially cared more about cost and availability than philosophy.
- There is a long subthread contrasting copyleft (GPL/AGPL) and permissive licenses (BSD/MIT), arguing over whether most people value software freedom or primarily financial freedom.
- Some argue permissive licenses still deliver the core freedoms (study, modify, redistribute), while others see them as enabling “wealth transfer” to companies.
- Opinions diverge on the long‑term sustainability of GPL projects versus permissively licensed software and on how much corporate capture will shape major projects.
Language Longevity: C, Rust, and Predecessors
- Participants note that in 1983 predictions of C’s permanence seemed premature, yet C remains near the top of language popularity decades later, with many C‑syntax descendants widely used.
- One line of argument holds that Rust’s safety guarantees and maturing ecosystem are pushing organizations away from C, especially for security‑sensitive, internet‑facing code.
- A skeptical line compares Rust to PL/I: powerful but complex, slow to compile, and prone to intricate feature interactions; predicts an eventual, simpler “C‑like with safety” successor.
- A counterpoint stresses that many of Rust’s complexities are required for static memory‑safety guarantees and that even if a theoretically better design appears, adoption inertia will be strong.
- There is agreement that safety often comes from forbidding dangerous capabilities, but disagreement on how minimal a “safe C” can be in practice.