GNU Compiler -Sammlung
| GNU Compiler -Sammlung | ||
|---|---|---|
| Teil der GNU-Toolchain | ||
|
| ||
|
GCC wird von der Befehlszeile unter Debian aufgerufen | ||
| Allgemeine Information | ||
| Programmtyp | Compiler | |
| Entwickler | GNU-Projekt | |
| Entwicklungsmodell | Gratis Software | |
| Erstveröffentlichung | 23. Mai 1987 [ 1 ] | |
| Lizenz | GPLv3 | |
| Technische Information | ||
| Eingeplant | C , C ++ | |
| Unterstützte Plattformen | Multi -Plattform | |
| Versionen | ||
| Neueste stabile Version | 11.1.0 ( info ) (27. April 2021 (1 Jahr, 5 Monate und 19 Tage)) | |
| Neueste Version im Test | 0,922. März 1987 | |
| Verknüpfungen | ||
Die GNU Compiler Collection ist eine Sammlung von Compilern , die vom GNU -Projekt erstellt wurden . GCC ist freie Software und wird von der Free Software Foundation ( FSF ) unter der GPL General Public License vertrieben .
Diese Compiler gelten als Standard für von UNIX abgeleitete Open-Source- und auch proprietäre Betriebssysteme wie Mac OS X. GCC benötigt die als binutils bekannte Suite von Anwendungen , um Aufgaben wie das Identifizieren von Objektdateien oder das Abrufen ihrer Größe auszuführen, um sie zu kopieren, zu übersetzen, aufzulisten, zu verknüpfen oder unnötige Symbole zu entfernen.
GCC stand ursprünglich für GNU C Compiler , weil es nur die C-Sprache kompilierte . Es wurde später erweitert, um C++ , Fortran , Ada und andere zu kompilieren .
Ziel
GCC ist Teil des GNU -Projekts und zielt darauf ab, den für alle GNU -Systeme verwendeten Compiler zu verbessern, einschließlich der GNU/Linux -Variante . Die GCC-Entwicklung verwendet eine offene Entwicklungsumgebung und unterstützt viele Plattformen, um die Verwendung eines globalen Klassen-Compiler-Optimierers zu fördern, der viele Entwicklungsteams anziehen und sicherstellen kann, dass GCC- und GNU-Systeme auf unterschiedlichen Architekturen und unterschiedlichen Umgebungen und sogar funktionieren mehr, um die Funktionen von GCC zu erweitern und zu verbessern.
Geschichte
Richard Stallman begann 1985 mit dem Schreiben von GCC. Er fügte Elemente hinzu, indem er einen bereits bestehenden C-Compiler erweiterte. Der Compiler kompilierte ursprünglich Pastell , einen erweiterten, nicht portablen Dialekt von Pascal und wurde in Pastell selbst geschrieben. Es wurde in C von Len Tower und Stallman [ 2 ] [2] umgeschrieben und 1987 [ 3 ] als GNU -Projekt Compiler veröffentlicht, um einen kostenlosen Software -Compiler zur Verfügung zu haben . Die Entwicklung wurde von der Free Software Foundation (FSF) überwacht. [ 4 ]
Bis 1991 hatte GCC 1.x einen Punkt der Stabilität erreicht, aber architektonische Einschränkungen verhinderten viele gewünschte Verbesserungen, sodass die FSF mit der Arbeit an GCC 2.x begann.
Da es sich bei GCC um kostenlose Software handelte, gab es Programmierer, die in andere Richtungen arbeiten wollten. Zum Beispiel schrieb sie Schnittstellen für andere Sprachen als C , und es stellten sie frei, ihre eigenen Gabeln des Compilers zu entwickeln. Mehrere Gabeln brachten Ineffizienz und Unmanagabilität. Die Schwierigkeit, Code zu produzieren, der vom offiziellen GCC -Projekt akzeptiert wurde, war für viele sehr frustrierend, da der FSF den offiziellen GCC 2 -Version in den Griff hatte. X. Dies führte dazu, dass GCC als Beispiel für das in Eric S. Raymonds Aufsatz mit dem Titel The Cathedral and the Bazaar erwähnte "Kathedrale" -Softwareentwicklungsmodell angeführt wurde .
Seit der Veröffentlichung der Version 4.4. Von BSD im Jahr 1994 wurde GCC zum Standard -Compiler für BSD -Systeme .
Sprachen
Version 4.6 enthält Frontenden für C ( GCC ), C ++ ( G ++ ), Java ( GCJ ), ADA ( GNAT ), Objective-C ( GOBJC ), Objective-C ++ ( GOBJC ++ ) und FORTRAN ( GFORTRAN ). [ 5 ] Unterstützung für GO ( GCCGO ), Modula-2 , Modula-3 , Pascal ( GPC ), PL/I , D ( GDC ), Mercury und VHDL ( GHDL ) sind ebenfalls erhältlich, wenn auch nicht außerhalb der Schachtel. . [ 6 ]
Architekturen
Version 4.2.3 enthält Unterstützung für:
- BOGEN
- MRA
- Schwarz
- CHRIS
- CRX
- Darwin
- DEZ Alpha
- DEZ Alpha/VMS
- VRF
- Linux
- H8/300
- H8/500
- HPPA
- IA-64 "Itanium"
- M32C
- M32R/D
- MIPS
- MMIX
- MN10300
- Morpho MT
- Motorola M680x0
- Motorola M68hc1x
- Motorola 88000
- PA-RISC
- PDP-11
- PowerPC
- RS/6000
- Punktzahl
- SPARC
- SuperH
- System/370
- System 390
- System V
- TMS320C3X/C4X
- V850
- VAX
- x86
- x86-64
- Xstormy16
- XTensa
- zSerie
Es gibt auch Unterstützung für weniger bekannte Architekturen: A29K , Atmel AVR , C4X , D30V , DSP16XX , FR-30 , FR-V , Intel I960 , IP2000 , Mn10200 , NS32K und Romp .
Unterstützung für zusätzliche Prozessoren wie D10V , PDP-10 und Z8000 wurde in Versionen bereitgestellt, die separat von der FSF-Version verwaltet werden.
Struktur
Die äußere Schnittstelle von GCC ist im Allgemeinen Standard für ein UNIX-System. Benutzer rufen ein Controller-Programm namens auf gcc, das die angegebenen Argumente interpretiert, entscheidet, welcher Compiler für jede Datei verwendet werden soll, und den Assembler mit dem resultierenden Code ausführt und dann möglicherweise den Linker ausführt , um ein vollständiges Programm zu erstellen .
Jeder der Compiler ist ein unabhängiges Programm, das den Quellcode als Eingabe nimmt und Assemblercode ausgibt . Sie alle haben eine gemeinsame interne Struktur: ein Frontend pro Sprache, das die Sprache verarbeitet und einen Syntaxbaum erstellt, und ein Backend, das diese Bäume in die RTL ( Record Transfer Language ) von GCC konvertiert, dann verschiedene Optimierungen durchführt und den Assembler erstellt mit architekturspezifischer Mustererkennung, ursprünglich basierend auf einem Algorithmus von Jack Davidson und Chris Fraser .
Fast alles von GCC ist in C geschrieben, obwohl ein Großteil des Ada-Frontends in Ada geschrieben ist. Am 30. Mai 2010 wurde bekannt gegeben, dass C++ in der GCC-Entwicklung verwendet wird. [ 7 ]
Frontends
Die Frontends variieren intern und müssen Bäume erzeugen, die vom Backend gehandhabt werden können. Alle Parser sind rekursive Top-Down-Parser und wurden manuell geschrieben, nicht automatisch generiert.
Bis vor kurzem war der Programmdarstellungsbaum nicht völlig unabhängig von dem Prozessor, für den Sie den Code generieren wollten.
Kürzlich wurden zwei neue sprachunabhängige Baumformen hinzugefügt. Diese neuen Formate werden als generisches und gimpleiert bezeichnet. Das Parsen erfolgt nun durch das Erstellen sprachabhängiger temporärer Bäume und deren Konvertierung in GENERIC. Der Gimpifier wandelt dies in GIMPLE um, das die gemeinsame Sprache für eine Vielzahl von architektur- und sprachunabhängigen Optimierungen ist.
Die Baumoptimierung geht nicht in das ein, was die meisten Compiler-Entwickler als Front-End-Arbeit betrachten, da sie nicht sprachabhängig ist und kein Parsen beinhaltet. Die GCC-Entwickler haben diesem Teil des Compilers den Namen des mittleren Endes gegeben . Zu den Optimierungen gehören das Entfernen von Code, der nie ausgeführt wird, das teilweise Entfernen von Redundanz, die Redundanz beim Auswerten von Ausdrücken ... An Optimierungen auf der Grundlage von Array-Abhängigkeiten wird derzeit gearbeitet.
Backend
Das Verhalten des Backends wird teilweise durch die für die Zielarchitektur spezifischen Präprozessor-Makros festgelegt, um beispielsweise die Position der höchstwertigen Bits, die Wortgröße, die Konvention für Aufrufe usw. zu definieren. Das Backend verwendet diese für die RTL -Generierung , obwohl dies in GCC prozessorunabhängig ist und die anfängliche Sequenz abstrakter Anweisungen auf die Zielarchitektur zugeschnitten ist.
Kompatible IDEs
Die meisten integrierten Entwicklungsumgebungen , die für GNU/Linux und einige andere Betriebssysteme geschrieben wurden, unterstützen GCC. Diese beinhalten:
- Anjuta
- Code::Blöcke
- Codelite
- Dev-C++
- Finsternis
- geany
- KDevelop
- NetBeans
- QtCreator
- xcode
- Visual Studio-Code
- Zinjai
Referenzen
- ^ "GCC-Veröffentlichungen" . GNU-Projekt . Abgerufen am 30. August 2009 .
- ^ Stallman, Richard M. (Februar 1986). "GNUStatus" . GNU-Bulletin (Free Software Foundation) 1 (1) . Abgerufen am 26. September 2006 .
- ↑ Tower, Leonard (1987) „ GNU C Compiler Beta Test Release “ , comp.lang.misc USENET-Newsgroup; siehe auch http://gcc.gnu.org/releases.html#timeline
- ↑ Stallman, Richard M. (2001) „ Contributors to GCC “, in Using and Porting the GNU Compiler Collection (GCC) for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
- ↑ „gccgo-Sprachbeitrag angenommen“ Archiviert am 10. Oktober 2017 auf der Wayback Machine , gmane.org, abgerufen am 26. Januar 2010.
- ↑ GCC-Frontends , archiviert am 9. Februar 2014 auf der Wayback Machine , GCC.org, abgerufen am 11. Mai 2008.
- ↑ Die Verwendung von C++ in GCC ist in Ordnung
Bibliographie
- Richard M. Stallman : Benutzung und Portierung der GNU Compiler Collection , Free Software Foundation , ISBN 0-595-10035-X
- Richard M. Stallman: Using Gcc: The Gnu Compiler Collection Reference , Free Software Foundation, ISBN 1-882114-39-6
- Brian J. Gough : Eine Einführung in GCC , Network Theory Ltd., ISBN 0-9541617-9-3
Siehe auch
Portal: Freie Software . Inhalte im Zusammenhang mit Freier Software .- GCC enthält Boehm GC , einen konservativen Garbage Collector für C/C++.
- GCC-XML
- LLVM
- MinGW
- Cygwin
- g++
- machen