GNU Compiler Collection

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.

Mål

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.

Historikk

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 .

Språk

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 ]

Arkitekturer

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.

Struktur

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 ]

Grensesnitt

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.

Backend

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.

Kompatible IDEer

De fleste integrerte utviklingsmiljøer skrevet for GNU/Linux og noen andre operativsystemer støtter GCC. Disse inkluderer:

Referanser

  1. ^ "GCC-utgivelser" . GNU-prosjektet . Hentet 30. august 2009 . 
  2. ^ Stallman, Richard M. (februar 1986). "GNUStatus" . GNUs Bulletin (Free Software Foundation) 1 (1) . Hentet 26. september 2006 . 
  3. Tower, Leonard (1987) " GNU C kompilator beta testutgivelse, " comp.lang.misc USENET nyhetsgruppe; se også http://gcc.gnu.org/releases.html#timeline
  4. Stallman, Richard M. (2001) " Bidragsytere til GCC ", i Using and Porting the GNU Compiler Collection (GCC) for gcc versjon 2.95 (Cambridge, Mass.: Free Software Foundation)
  5. "gccgo språkbidrag akseptert" Arkivert 10. oktober 2017 på Wayback Machine , gmane.org, Hentet 26. januar 2010.
  6. GCC-grensesnitt arkivert 9. februar 2014 på Wayback Machine , GCC.org, hentet 11. mai 2008.
  7. Å bruke C++ i GCC er OK

Bibliografi

Se også

Eksterne lenker