GNU Compiler Collection | ||
---|---|---|
En del av GNU-verktøykjeden | ||
GCC påkalte fra kommandolinjen på Debian | ||
Generell informasjon | ||
programtype | Kompilator | |
utvikler | GNU-prosjektet | |
Utviklingsmodell | Gratis programvare | |
Første utgivelse | 23. mai 1987 [ 1 ] | |
Tillatelse | GPLv3 | |
Teknisk informasjon | ||
Planlagt inn | C , C++ | |
Støttede plattformer | multiplattform | |
Versjoner | ||
Siste stabile versjon | 11.1.0 ( info ) (27. april 2021 (1 år, 5 måneder og 19 dager)) | |
Siste versjon i tester | 0,922. mars 1987 | |
Linker | ||
Offesiell nettside kodelager feilsporing | ||
GNU Compiler Collection er et sett med kompilatorer laget av GNU -prosjektet . GCC er gratis programvare og distribueres av Free Software Foundation ( FSF ) under GPL - lisensen .
Disse kompilatorene anses som standard for UNIX -avledet , åpen kildekode , og også proprietære operativsystemer som Mac OS X. GCC krever pakken med applikasjoner kjent som binutils for å utføre oppgaver som å identifisere objektfiler eller få størrelsen deres for å kopiere, oversette eller liste opp, koble til eller fjerne unødvendige symboler fra dem.
GCC sto opprinnelig for GNU C Compiler , fordi den kun kompilerte C-språket . Den ble senere utvidet til å kompilere C++ , Fortran , Ada og andre.
GCC er en del av GNU-prosjektet, og har som mål å forbedre kompilatoren som brukes på alle GNU-systemer, inkludert GNU/Linux- varianten . GCC-utvikling bruker et åpent utviklingsmiljø og støtter mange plattformer for å oppmuntre til bruk av en global klassekompilatoroptimerator, som kan tiltrekke seg mange utviklingsteam, og sikre at GCC- og GNU-systemer fungerer på forskjellige arkitekturer. og forskjellige miljøer, og til og med mer, for å utvide og forbedre funksjonene til GCC.
Richard Stallman begynte å skrive GCC i 1985. Han la til elementer ved å utvide en allerede eksisterende C-kompilator. Kompilatoren kompilerte opprinnelig Pastel , en utvidet, ikke-bærbar dialekt av Pascal , og ble skrevet i selve Pastel. Den ble skrevet om i C av Len Tower og Stallman, [ 2 ] og publisert i 1987 [ 3 ] som GNU Project-kompilatoren, for å ha en gratis programvarekompilator tilgjengelig . Utviklingen ble overvåket av Free Software Foundation (FSF). [ 4 ]
I 1991 hadde GCC 1.x nådd et punkt med stabilitet, men arkitektoniske begrensninger forhindret mange ønskede forbedringer, så FSF begynte arbeidet med GCC 2.x.
Siden GCC var fri programvare, var det programmerere som ønsket å jobbe i andre retninger, for eksempel å skrive grensesnitt for andre språk enn C , de stod fritt til å utvikle sine egne gafler til kompilatoren. Flere gafler førte til ineffektivitet og uhåndterlighet, men vanskeligheten med å produsere kode som ble akseptert av det offisielle GCC-prosjektet var svært frustrerende for mange, ettersom FSF holdt et godt grep om det som ble lagt til den offisielle GCC 2-versjonen. x. Dette førte til at GCC ble sitert som et eksempel på "katedralen" programvareutviklingsmodellen nevnt i Eric S. Raymonds essay med tittelen The Cathedral and the Bazaar .
Siden utgivelsen av versjon 4.4. av BSD i 1994, ble GCC standardkompilatoren for BSD -systemer .
Versjon 4.6 inkluderer grensesnitt for C ( gcc ), C++ ( g++ ), Java ( gcj ), Ada ( GNAT ), Objective-C ( gobjc ), Objective-C++ ( gobjc++ ) og Fortran ( gfortran ). [ 5 ] Støtte for Go ( gccgo ), Modula-2 , Modula-3 , Pascal ( gpc ), PL/I , D ( gdc ), Mercury og VHDL ( ghdl ) er også tilgjengelig, men ikke ut av esken. . [ 6 ]
Versjon 4.2.3 inkluderer støtte for:
Det er også støtte for mindre kjente arkitekturer: A29K , Atmel AVR , C4x , D30V , DSP16xx , FR-30 , FR-V , Intel i960 , IP2000 , MN10200 , NS32K og ROMP .
Støtte for ekstra prosessorer, for eksempel D10V , PDP-10 og Z8000 , er gitt i versjoner som vedlikeholdes separat fra FSF-utgivelsen.
Det ytre grensesnittet til GCC er generelt standard for et UNIX-system. Brukere kaller et kontrollerprogram kalt gcc, som tolker de gitte argumentene, bestemmer hvilken kompilator som skal brukes for hver fil, og kjører assembleren med den resulterende koden, og deretter kjører linkeren for å produsere et komplett program .
Hver av kompilatorene er et uavhengig program som tar kildekode som input og sender ut monteringskode . De har alle en felles intern struktur: en grensesnitt per språk som behandler språket og produserer et syntakstre, og en bakside som konverterer disse trærne til GCCs RTL ( Record Transfer Language ), deretter utfører forskjellige optimaliseringer og produserer assembleren ved hjelp av arkitekturspesifikk mønstergjenkjenning, opprinnelig basert på en algoritme av Jack Davidson og Chris Fraser .
Nesten hele GCC er skrevet i C, selv om mye av Ada-grensesnittet er skrevet i Ada. 30. mai 2010 ble det kunngjort at C++ vil bli brukt i GCC-utvikling. [ 7 ]
Frontendene varierer internt, og må produsere trær som kan håndteres av bakenden. Alle parsere er top-down rekursive parsere og ble skrevet manuelt, ikke automatisk generert.
Inntil nylig var programrepresentasjonstreet ikke helt uavhengig av prosessoren du ønsket å generere koden for.
To nye språkuavhengige treformer er nylig tatt med. Disse nye formatene kalles GENERIC og GIMPLE. Parsing gjøres nå ved å lage språkavhengige midlertidige trær og konvertere dem til GENERISK. Gimplifieren konverterer dette til GIMPLE, som er fellesspråket for et stort antall arkitekturuavhengige og språkuavhengige optimaliseringer.
Treoptimalisering går ikke inn i det de fleste kompilatorutviklere anser som frontend-arbeid, siden det ikke er språkavhengig og ikke involverer parsing. GCC-utviklerne har gitt denne delen av kompilatoren navnet på midten . Optimaliseringer inkluderer fjerning av kode som aldri kjører, delvis fjerning av redundans, redundans ved evaluering av uttrykk... Optimaliseringer basert på array-avhengighet jobbes for tiden med.
Oppførselen til backend er delvis spesifisert av forprosessormakroene som er spesifikke for målarkitekturen, for eksempel for å definere posisjonen til de mest signifikante bitene, ordstørrelsen, konvensjonen for samtaler, etc. Bakenden bruker disse for RTL - generering , selv om dette i GCC er prosessoruavhengig og den første sekvensen av abstrakte instruksjoner er skreddersydd til målarkitekturen.
De fleste integrerte utviklingsmiljøer skrevet for GNU/Linux og noen andre operativsystemer støtter GCC. Disse inkluderer: