close

GNU Compiler Collection

Gå til navigation Gå til søg
GNU Compiler Collection
En del af GNU-værktøjskæden
GNU Compiler Collection logo.svg
Gcc-4.2.0.png
GCC påkaldte fra kommandolinjen på Debian
Generel information
programtype Kompiler
Udvikler GNU projekt
Udviklingsmodel Gratis software
Første udgivelse 23. maj 1987 [ 1 ]
Licens GPLv3
Teknisk information
Planlagt ind C , C++
Understøttede platforme multi platform
Versioner
Seneste stabile version 11.1.0 ( info ) (27. april 2021 (1 år, 5 måneder og 19 dage))
Seneste version i test 0,922. marts 1987
Links

GNU Compiler Collection er et sæt kompilatorer skabt af GNU- projektet . GCC er gratis software og distribueres af Free Software Foundation ( FSF ) under GPL 's generelle offentlige licens .

Disse compilere betragtes som standard for UNIX -afledte , open source og også proprietære operativsystemer såsom Mac OS X. GCC kræver den suite af applikationer kendt som binutils til at udføre opgaver såsom at identificere objektfiler eller få deres størrelse for at kopiere, oversætte eller liste, linke eller fjerne unødvendige symboler fra dem.

GCC stod oprindeligt for GNU C Compiler , fordi den kun kompilerede C-sproget . Det blev senere udvidet til at kompilere C++ , Fortran , Ada og andre.

Mål

GCC er en del af GNU-projektet og har til formål at forbedre compileren, der bruges på alle GNU-systemer, inklusive GNU/Linux -varianten . GCC-udvikling bruger et åbent udviklingsmiljø og understøtter mange platforme for at tilskynde til brugen af ​​en global klasse compiler-optimizer, som kan tiltrække mange udviklingsteams og sikre, at GCC- og GNU-systemer fungerer på forskellige arkitekturer. og forskellige miljøer, og endda mere, for at udvide og forbedre funktionerne i GCC.

Historie

Richard Stallman begyndte at skrive GCC i 1985. Han tilføjede elementer ved at udvide en allerede eksisterende C-kompiler. Compileren kompilerede oprindeligt Pastel , en udvidet, ikke-bærbar dialekt af Pascal , og blev skrevet i selve Pastel. Det blev omskrevet i C af Len Tower og Stallman, [ 2 ] og udgivet i 1987 [ 3 ] som GNU Project compiler, for at have en gratis software- kompiler tilgængelig . Dets udvikling blev overvåget af Free Software Foundation (FSF). [ 4 ]

I 1991 havde GCC 1.x nået et stabilitetspunkt, men arkitektoniske begrænsninger forhindrede mange ønskede forbedringer, så FSF begyndte arbejdet med GCC 2.x.

Da GCC var fri software, var der programmører, der ønskede at arbejde i andre retninger, for eksempel ved at skrive grænseflader til andre sprog end C , de var frie til at udvikle deres egne gafler til compileren. Flere gafler medførte ineffektivitet og uoverskuelighed, men vanskeligheden ved at producere kode, der blev accepteret af det officielle GCC-projekt, var meget frustrerende for mange, da FSF holdt et stramt greb om, hvad der blev tilføjet til den officielle GCC 2-version. x. Dette fik GCC til at blive citeret som et eksempel på "katedralen" softwareudviklingsmodel, der er nævnt i Eric S. Raymonds essay med titlen The Cathedral and the Bazaar .

Siden udgivelsen af ​​version 4.4. af BSD i 1994 blev GCC standardkompileren til BSD- systemer .

Sprog

Version 4.6 inkluderer frontends for C ( gcc ), C++ ( g++ ), Java ( gcj ), Ada ( GNAT ), Objective-C ( gobjc ), Objective-C++ ( gobjc++ ) og Fortran ( gfortran ). [ 5 ] Understøttelse af Go ( gccgo ), Modula-2 , Modula-3 , Pascal ( gpc ), PL/I , D ( gdc ), Mercury og VHDL ( ghdl ) er også tilgængelig, dog ikke ud af æsken. . [ 6 ]

Arkitekturer

Version 4.2.3 inkluderer understøttelse af:

Der er også understøttelse af mindre kendte arkitekturer: A29K , Atmel AVR , C4x , D30V , DSP16xx , FR-30 , FR-V , Intel i960 , IP2000 , MN10200 , NS32K og ROMP .

Understøttelse af yderligere processorer, såsom D10V , PDP-10 og Z8000 , er blevet leveret i versioner, der vedligeholdes adskilt fra FSF-udgivelsen.

Struktur

Den ydre grænseflade af GCC er generelt standard for et UNIX-system. Brugere kalder et controller-program kaldet gcc, som fortolker de givne argumenter, beslutter, hvilken compiler der skal bruges til hver fil, og kører assembleren med den resulterende kode, og derefter kører linkeren for at producere et komplet program .

Hver af kompilatorerne er et uafhængigt program, der tager kildekode som input og udsender assembly -kode . De har alle en fælles intern struktur: en per-sprog frontend, der behandler sproget og producerer et syntakstræ, og en backend, som konverterer disse træer til GCC's RTL ( Record Transfer Language ), derefter udfører forskellige optimeringer og producerer assembleren ved hjælp af arkitekturspecifik mønstergenkendelse, oprindeligt baseret på en algoritme af Jack Davidson og Chris Fraser .

Næsten hele GCC er skrevet i C, selvom meget af Ada-frontenden er skrevet i Ada. Den 30. maj 2010 blev det annonceret, at C++ vil blive brugt i GCC-udvikling. [ 7 ]

Frontends

De forreste ender varierer internt, idet de skal producere træer, der kan håndteres af bagenden. Alle parsere er top-down rekursive parsere og blev skrevet manuelt, ikke automatisk genereret.

Indtil for nylig var programrepræsentationstræet ikke fuldstændig uafhængigt af den processor, som du ønskede at generere koden til.

To nye sproguafhængige træformer er for nylig blevet inkluderet. Disse nye formater kaldes GENERIC og GIMPLE. Parsing udføres nu ved at oprette sprogafhængige midlertidige træer og konvertere dem til GENERIC. Gimplikatoren konverterer dette til GIMPLE , som er det fælles sprog for en lang række arkitektur-uafhængige og sprog-uafhængige optimeringer.

Træoptimering indgår ikke i, hvad de fleste compilerudviklere betragter som frontend-arbejde, da det ikke er sprogafhængigt og ikke involverer parsing. GCC-udviklerne har givet denne del af compileren navnet på den midterste ende . Optimeringer omfatter fjernelse af kode, der aldrig kører, delvis fjernelse af redundans, redundans ved evaluering af udtryk... Der arbejdes i øjeblikket på optimeringer baseret på array-afhængighed.

Backend

Backends adfærd er delvist specificeret af præprocessormakroerne, der er specifikke for målarkitekturen, for eksempel for at definere positionen af ​​de mest signifikante bits, ordstørrelse, konvention for opkald osv. Bagenden bruger disse til RTL -generering , selvom dette i GCC er processoruafhængig, og den indledende sekvens af abstrakte instruktioner er skræddersyet til målarkitekturen .

Kompatible IDE'er

De fleste integrerede udviklingsmiljøer skrevet til GNU/Linux og nogle andre operativsystemer understøtter GCC. Disse omfatter:

Referencer

  1. ^ "GCC-udgivelser" . GNU projekt . Hentet 30. august 2009 . 
  2. ^ Stallman, Richard M. (februar 1986). "GNUStatus" . GNU's Bulletin (Free Software Foundation) 1 (1) . Hentet 26. september 2006 . 
  3. Tower, Leonard (1987) " GNU C compiler beta test release, " comp.lang.misc USENET nyhedsgruppe; se også http://gcc.gnu.org/releases.html#timeline
  4. Stallman, Richard M. (2001) " Contributors to GCC, " i Using and Porting the GNU Compiler Collection (GCC) for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
  5. "gccgo sprogbidrag accepteret" Arkiveret 10. oktober 2017 på Wayback Machine , gmane.org, Hentet 26. januar 2010.
  6. GCC-frontends arkiveret 9. februar 2014 på Wayback Machine , GCC.org, hentet 11. maj 2008.
  7. Det er OK at bruge C++ i GCC

Bibliografi

Se også

Eksterne links