www.wikidata.de-de.nina.az
GCC ist der Name der Compiler Suite des GNU Projekts GCC stand ursprunglich fur GNU C Compiler Da GCC heute aber ausser C noch einige andere Programmiersprachen ubersetzen kann hat GCC inzwischen die Bedeutung GNU Compiler Collection erhalten englisch fur GNU Compilersammlung Das Kommando gcc in Kleinbuchstaben steht weiterhin fur den C Compiler GNU Compiler CollectionBasisdatenMaintainer Richard Biener 1 Jakub Jelinek 2 Entwickler GNU ProjektErscheinungsjahr 23 Mai 1987 3 Aktuelle Version 12 3 4 8 Mai 2023 Betriebssystem plattformubergreifendProgrammiersprache C CKategorie CompilerLizenz GNU General Public License Version 3 GNU Lesser General Public License Version 2 1gcc gnu org Inhaltsverzeichnis 1 Uberblick 2 Geschichte 2 1 EGCS 3 Zielsysteme 4 Struktur 4 1 Frontends 4 2 Middleend 4 3 Backend 5 Siehe auch 6 Literatur 7 Einzelnachweise 8 WeblinksUberblick BearbeitenDie Sammlung enthalt Compiler fur die Programmiersprachen C C Objective C D Fortran Ada und Go Sie unterliegt den Bedingungen der GNU General Public License GCC wird von einer Reihe von Systemen als Standardcompiler genutzt darunter viele Linux Distributionen BSD Varianten NeXTStep BeOS und ZETA Zudem bietet er auch Unterstutzung fur die Laufzeitumgebung Cygwin und die Entwicklerwerkzeuge MinGW 5 Er wurde auf mehr Systeme und Rechnerarchitekturen portiert als jeder andere Compiler und bietet sich insbesondere fur Betriebssysteme an die auf verschiedenen Hardwareplattformen laufen sollen Der GCC lasst sich auch als Cross Compiler installieren 6 2014 erhielt er den Programming Languages Software Award von ACM SIGPLAN Geschichte BearbeitenDie erste offentliche Version 0 9 des GCC wurde am 22 Marz 1987 von Richard Stallman 7 8 fur das GNU Projekt freigegeben Version 1 0 erschien am 23 Mai desselben Jahres und wird heute von Programmierern auf der ganzen Welt weiterentwickelt Die Erweiterung des C Compilerpakets zur Compiler Collection erfolgte im Rahmen des EGCS Projektes das eine Weile parallel zum GCC existierte und schliesslich zum offiziellen GCC wurde EGCS Bearbeiten 1997 spaltete sich das Projekt Experimental Enhanced GNU Compiler System EGCS engl fur experimentelles verbessertes GNU Compilersystem von GCC ab und wurde 1999 mit diesem wieder vereinigt 9 GCC 1 x hatte 1991 eine gewisse Stabilitat erreicht jedoch verhinderten architekturbedingte Einschrankungen viele Verbesserungen sodass die Free Software Foundation FSF damit begann GCC 2 x zu entwickeln Mitte der 1990er kontrollierte die FSF jedoch sehr genau was zu GCC 2 x hinzugefugt werden durfte und was nicht sodass GCC als Beispiel fur das Cathedral Entwicklungsmodell Verwendung fand das Eric S Raymond in seinem Buch Die Kathedrale und der Basar beschreibt Da GCC freie Software ist ist es Programmierern die in eine andere Richtung arbeiten wollten erlaubt eigene Abspaltungen zu entwickeln Viele Abspaltungen erwiesen sich jedoch als ineffizient und unubersichtlich Dass ihre Arbeiten vom offiziellen GCC Projekt oft nicht oder nur unter Schwierigkeiten akzeptiert wurden frustrierte viele Entwickler Daher grundete eine Gruppe von Entwicklern 1997 EGCS um mehrere experimentelle Abspaltungen in einem einzigen Projekt zu vereinen Dazu gehorten g77 Fortran PGCC Pentium optimierter GCC das Einpflegen vieler Verbesserungen an C sowie Compiler Versionen fur weitere Prozessor Architekturen und Betriebssysteme 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 ubernahm 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 Veroffentlichung von GCC 2 95 im Juli 1999 waren beide Projekte wiedervereinigt Zielsysteme Bearbeiten nbsp GCC 4 1 3 in einem Kommandozeilen Fenster unter Ubuntu 7 10 mit Gnome 2 20Das GCC Projekt bezeichnet einige Plattformen offiziell als primare und andere als sekundare Evaluationsplattformen Vor jeder Veroffentlichung einer neuen Version werden insbesondere diese beiden Gruppen getestet GCC kann Programme fur folgende Befehlssatzarchitekturen erzeugen primare und sekundare Evaluationsplattformen sind markiert Alpha Arm sowohl AArch32 ab ARMv1 bis Armv9 A 32 Bit als auch AArch64 ab Armv8 A auch ARM64 64 Bit sekundar unter Linux H8 300 S 370 S 390 i386 32 Bit x86 und x86 64 Itanium IA 64 Motorola 68000 und Motorola Coldfire Motorola 88000 MIPS Architektur primar unter IRIX PA RISC primar unter HP UX PDP 11 PowerPC RISC V SuperH Sun SPARC primar unter Solaris sekundar unter Linux VAXDazu kommt noch eine Reihe von Architekturen von Prozessoren fur eingebettete Systeme wie Motorola 68HC11 A29K Adapteva Epiphany Atmel AVR Blackfin C4x CRIS D30V DSP16xx FR 30 FR V Intel i960 IP2000 M32R MCORE MicroBlaze MMIX MN10200 MN10300 NS32K ROMP Stormy16 Synopsis Designware ARC Texas Instruments MSP430 MSP432 V850 XtensaNicht Bestandteil des offiziellen GCC aber davon abgeleitet und kommerziell vertrieben gibt es Derivate fur Atmel AVR32 Infineon C167 Infineon TriCore Microchip PIC24 dsPIC nur in C und PIC32 auch in C Insgesamt unterstutzt der GCC mehr als 60 Plattformen 10 Struktur Bearbeiten nbsp Design Flow von GCCDas externe Interface des gcc entspricht dem eines Standard Unix Compilers Der Benutzer ruft ein Hauptprogramm mit dem Namen gcc auf GCC interpretiert das Kommandozeilen Argument GCC stellt die Programmiersprache der vorliegenden Eingabedatei fest Der entsprechende Sprach Compiler wird aufgerufen Die Ausgabe wird dem Assembler ubergeben Schliesslich wird der Linker aufgerufen Ein vollstandiges d h lauffahiges Programm wurde erstellt Jeder Sprachcompiler ist ein separates Programm das Quellcode entgegennimmt und Assemblersprache produziert Im Schema auf der rechten Seite sind Beispiele fur C und Assembler gegeben welche sich beide dem Preprocessing unterziehen mussen bei dem Compilermakros eingebundene Header Dateien und Ahnliches umgewandelt werden um reinen C Code bzw Assembler zu erhalten Jenes sprachabhangige Frontend parst die entsprechende Sprache und erzeugt einen abstrakten Syntaxbaum der an ein Backend ubergeben wird das den Baum in GCCs Register Transfer Language RTL uberfuhrt im Diagramm nicht gezeigt verschiedene Codeoptimierungen durchfuhrt und zum Schluss Assemblersprache erzeugt Ursprunglich wurden die meisten Bestandteile der GCC in C geschrieben Im Rahmen des Vorhabens GCC in Cxx 11 wurde 2010 die Umstellungen der gcc Quellen auf C geplant und begonnen Ziel dieser Umstellung ist die GCC verstandlich und wartbar zu halten Im Nachfolgeprojekt 12 wurde auch die noch fehlende Stufe 1 des GCC Bauprozesses auf C Code umgestellt 13 Ausnahmen sind Backends die in wesentlichen Teilen in RTL formuliert sind sowie das Ada Frontend welches zum grossten Teil in Ada geschrieben ist Frontends Bearbeiten Frontends mussen Baume produzieren die vom Backend verarbeitet werden konnen Wie sie dies erreichen bleibt ihnen uberlassen Einige Parser benutzen Yacc ahnliche Grammatiken andere verwenden handgeschriebene rekursive Parser Bis vor kurzem war die Baumreprasentation des Programms nicht vollig vom Zielprozessor unabhangig Die Bedeutung eines Baums konnte fur unterschiedliche Sprachfrontends unterschiedlich sein und Frontends konnten ihren eigenen Baumcode zur Verfugung stellen Mit dem Tree SSA Projekt das in die Version GCC 4 0 integriert wurde wurden zwei neue Formen von sprachunabhangigen Baumen eingefuhrt Diese neuen Baumformate wurden GENERIC und GIMPLE getauft Parsing wird nun durchgefuhrt indem ein temporarer sprachabhangiger Baum nach GENERIC konvertiert wird Der sogenannte Gimplifier uberfuhrt diese komplexe Form in die SSA basierte GIMPLE Form von der ausgehend eine Reihe neuer sprach und architekturunabhangiger Optimierungen durchgefuhrt werden kann Middleend Bearbeiten Optimierung an Baumen passt eigentlich nicht in das Schema von Frontend und Backend da sie nicht sprachabhangig sind und kein Parsen beinhalten Die GCC Entwickler haben diesem Teil des Compilers daher den Namen Middleend gegeben Zu den gegenwartig am SSA Baum durchgefuhrten Optimierungen gehoren Dead code elimination Partial Redundancy Elimination Global Value Numbering Sparse Conditional Constant Propagation Scalar replacement of Aggregates und Array basierende Optimierungen wie automatische Vektorisierung 14 Backend Bearbeiten Das Verhalten des GCC Backends wird teilweise durch Praprozessor Makros und architekturspezifische Funktionen bestimmt mit denen zum Beispiel die Endianness Wortgrosse und Aufrufkonventionen definiert und die Registerstruktur der Zielmaschine beschrieben werden Unter Verwendung der Maschinenbeschreibung einer Lisp ahnlichen Beschreibungssprache wandelt GCC die interne Baumstruktur in die RTL Darstellung um Obwohl diese dem Namen nach prozessorunabhangig ist ist die Sequenz an abstrakten Instruktionen daher bereits an das Ziel angepasst Die Art und Anzahl der vom GCC an der RTL durchgefuhrten Optimierungen werden mit jeder Compiler Version weiterentwickelt Zu ihnen gehoren etwa global common subexpression elimination verschiedene Schleifen und Sprungoptimierungen englisch if conversion branch probability estimation sibling calls constant propagation sowie der combine pass in dem mehrere Instruktionen zu einer einzigen kombiniert werden konnen Seit der Einfuhrung von globalen SSA basierten Optimierungen an GIMPLE Baumen haben die RTL Optimierungen leicht an Bedeutung verloren da in der RTL Reprasentation des Programms weit weniger der fur viele Optimierungen wichtigen High Level Informationen enthalten sind Allerdings sind auch maschinenabhangige Optimierungen sehr wichtig da fur viele Optimierungen Informationen uber die Maschine vorliegen mussen etwa daruber welche Instruktionen eine Maschine kennt wie teuer diese sind und wie die Pipeline der Zielarchitektur beschaffen ist In der Reload Phase wird die prinzipiell unbeschrankte Anzahl an abstrakten Pseudo Registern durch die begrenzte Anzahl an echten Maschinenregistern ersetzt wobei hier unter Umstanden neue Instruktionen in den Code eingefugt werden mussen um zum Beispiel Pseudo Register auf dem Stack der Funktion zwischenzuspeichern Diese Registerzuteilung ist recht kompliziert da die verschiedenen Eigenheiten der jeweiligen Zielarchitektur besonders berucksichtigt werden mussen In der letzten Phase werden Optimierungen durchgefuhrt wie peephole optimization und delay slot scheduling bevor die recht maschinennahe Auspragung der RTL auf Assemblercode abgebildet wird indem die Namen von Registern und Adressen in Zeichenketten umgesetzt werden welche die Instruktionen spezifizieren Siehe auch BearbeitenGNU Compiler for Java GNU Fortran GNU Debugger GNU Pascal distcc ccache MinGW eine Portierung auf Windows Portable C CompilerLiteratur BearbeitenNikolaus Schuler Der Gcc Compiler Uberblick und Bedienung bhv 1997 ISBN 3 89360 873 7 Brian J Gough Richard M Stallman An Introduction to GCC For the GNU Compilers GCC and G Network Theory Ltd 2004 ISBN 978 0 954 16179 8 William von Hagen The Definitive Guide to GCC 2 Ausgabe Apress 2006 ISBN 978 1 590 59585 5 Einzelnachweise Bearbeiten gcc gnu org abgerufen am 27 Mai 2022 github com www gnu org Richard Biener GCC 12 3 Released 8 Mai 2023 englisch abgerufen am 9 Mai 2023 Jens Ihlenfeld Compiler GCC 4 5 1 veroffentlicht golem de 2 August 2010 abgerufen am 27 April 2015 Nikolaus Schuler Der Gcc Compiler Uberblick und Bedienung 1 Auflage bhv Kaarst 1997 S 28 ISBN 3 89360 873 7 GNU C compiler beta test release Nachricht bei Google Groups vom 22 Marz 1987 abgerufen am 1 Marz 2017 englisch Alexander Neumann GCC 4 7 und 25 Jahre GNU Compiler Collection heise de 22 Marz 2012 abgerufen am 24 Marz 2012 GCC FAQ What is the relationship between GCC and EGCS In gnu ist utl pt 21 Juni 2006 abgerufen am 2 Juni 2022 englisch Host Target specific installation notes for GCC In gnu org 23 Februar 2006 englisch THE GCC Wiki gcc in cxx In https gcc gnu org Gnu Org 6 April 2012 abgerufen am 4 Mai 2022 englisch cxx conversion GCC Wiki In https gcc gnu org 11 Dezember 2012 abgerufen am 4 Mai 2022 englisch Thorsten Leemhuis GCC setzt intern verstarkt auf C heise de 16 August 2012 abgerufen am 26 April 2015 Auto vectorization in GCC gcc gnu org abgerufen am 25 Juli 2021 englisch Weblinks Bearbeiten nbsp Commons GNU Compiler Collection Album mit Bildern Videos und Audiodateien GCC the GNU Compiler Collection offizielle Website englisch Kurzanleitung fur den GCCNormdaten Sachbegriff GND 4294848 4 lobid OGND AKS Abgerufen von https de wikipedia org w index php title GNU Compiler Collection amp oldid 226660933