text: Entwickler GCC-Team
  GCC ist der Name der Compiler-Suite des GNU-Projekts. GCC stand ursprünglich für GNU C Compiler. Da GCC heute aber außer C noch einige andere Programmiersprachen übersetzen kann, hat GCC inzwischen die Bedeutung GNU Compiler Collection erhalten (engl. für GNU-Compilersammlung). Das Kommando gcc (in Kleinbuchstaben) steht weiterhin für den C-Compiler.
  4.1 EGCS
  Die Sammlung enthält Compiler für die Programmiersprachen C, C++, Java, Objective-C, Fortran, Ada und Go. Die Compilersammlung unterliegt den Bedingungen der GNU General Public License.
  GCC wird von einer Reihe von Systemen als Standardcompiler genutzt, darunter viele Linux-Distributionen, BSD, Darwin (Mac OS X), NextStep, BeOS und ZETA. Zudem bietet er auch Unterstützung für die Laufzeitumgebung Cygwin und die Entwicklerwerkzeuge MinGW.[1] Er wurde auf mehr Systeme und Rechnerarchitekturen portiert als jeder andere Compiler und bietet sich besonders für Betriebssysteme an, die auf verschiedenen Hardware-Plattformen laufen sollen. Der GCC lässt sich auch als Cross-Compiler installieren.[2]
  Dazu kommen noch eine Reihe von Prozessoren von eingebetteten Systemen, wie
  Atmel AVR und AVR32
  Fast alle Bestandteile des GCC sind in C geschrieben. Ausnahmen bilden die Backends, die in wesentlichen Teilen in RTL formuliert sind, sowie das Ada-Frontend, welches zum größten Teil in Ada geschrieben ist.
  Optimierung an Bäumen passt eigentlich nicht in das Schema von "Frontend" und "Backend", da sie nicht sprachabhängig sind und kein Parsen beinhalten. Die GCC-Entwickler haben diesem Teil des Compilers daher den Namen "Middleend" gegeben. Zu den gegenwärtig am SSA-Baum durchgeführten Optimierungen gehören Dead code elimination, Partial Redundancy Elimination, Global Value Numbering, Sparse Conditional Constant Propagation, und Scalar replacement of Aggregates. Array-basierende Optimierungen wie zum Beispiel automatische Vektorisierung, wie sie der Intel-Compiler anbietet, werden gegenwärtig entwickelt.[4]
  Das Verhalten des GCC-Backends wird teilweise durch Präprozessor-Makros und architekturspezifische Funktionen bestimmt, mit denen zum Beispiel die Endianness, Wortgröße, und Aufrufkonventionen definiert und die Registerstruktur der Zielmaschine beschrieben werden. Unter Verwendung der Maschinenbeschreibung, einer LISP-ähnlichen Beschreibungssprache, wandelt GCC die interne Baumstruktur in die RTL-Darstellung (Register Transfer Language) um. Obwohl diese dem Namen nach prozessorunabhängig ist, ist die Sequenz an abstrakten Instruktionen daher bereits an das Ziel angepasst.
  In der letzten Phase geschehen Optimierungen wie peephole optimization (englisch für "Guckloch-Optimierung") und delay slot scheduling (englisch wörtlich für "Verzögerung-Schlitz-Ablaufplanung") bevor die recht maschinennahe Ausprägung der RTL auf Assemblercode abgebildet wird, indem die Namen von Registern und Adressen in Zeichenketten umgesetzt werden, welche die Instruktionen spezifizieren.
  1997 spaltete sich das Projekt Experimental/Enhanced GNU Compiler System (EGCS, engl. für experimentelles/erweitertes GNU Compiler System) von GCC ab, und wurde 1999 mit diesem wieder vereinigt.
  Die Tatsache, dass GCC freie Software ist, erlaubte es Programmierern, die in andere Richtung arbeiten wollten, eigene Abspaltungen zu entwickeln. Viele Abspaltungen erwiesen sich jedoch als ineffizient und unübersichtlich. Dass ihre Arbeiten vom offiziellen GCC-Projekt oft nicht, oder nur unter Schwierigkeiten akzeptiert wurden, frustrierte viele Entwickler.
  Die Entwicklung von EGCS erwies sich als schneller, lebhafter und insgesamt besser als die des GCC-Projektes, sodass die FSF 1999 offiziell die Weiterentwicklung von GCC 2.x einstellte und stattdessen EGCS als offizielle GCC-Version übernahm. Die EGCS-Entwickler wurden zu Projektverantwortlichen (engl.: maintainer) des GCC. Von da an wurde das Projekt explizit nach dem "Basar"-Modell entwickelt, nicht mehr nach dem "Cathedral"-Modell. Mit der Veröffentlichung von GCC 2.95 im Juli 1999 waren beide Projekte wiedervereinigt.