GNU Compiler Collection

«GCC» leder hit. For organisasjonen GCC se Golfrådet.

GNU Compiler Collection (GCC) er en samling frie og åpne kompilatorer for en rekke forskjellige programmeringsspråk. GCC er en nøkkelkomponent i GNU-verktøysettet og blir utviklet av Free Software Foundation (FSF). GCC har spilt en viktig rolle i utviklingen av fri og åpen programvare, både som programmeringsverktøy og som eksempel. GCC distribueres under GNU General Public License (GPL) versjon 3+ med de unntak som er nevnt i GCC Runtime Library Exception.

GCC er en del av GNU-prosjektet, og er offisielle kompilatorer for GNU-operativsystemet GNU Hurd/GNU Mach. GCC anvendes i dag også som standard kompilatorer av mange andre Unix-liknende operativsystemer, herav Linux og frie avarter av BSD. FreeBSD benyttet i utgangspunktet GCC, men gikk over til Clang/LLVM i 2014. Også Apples macOS benytter i dag primært LLVM, men støtter også GCC. GCC er også tilgjengelig for ulike avarter av Microsoft Windows og andre operativsystemer, og kan kompilere kode for Android og iOS.

GCC ble lansert 23. mai 1987 som en kompilator for programmeringsspråket C, og forkortelsen stod da for GNU C Compiler. Den 18. desember 1987 lanserte FSF en C++-kompilator under navnet GNU G++. Da GCC 3.0 ble lansert den 18. juni 2003, ble GNU C Compiler og GNU G++ slått sammen, slik at GNU C Compiler også er en C++ kompilator. GNU C Compiler benytter C-standardbiblioteket GNU C Library (gclib); forut for GCC 3.0 fantes det også et eget standardbibliotek for C++ kalt libg++. Dette vedlikeholdes ikke lenger, og er blitt slått sammen med gclib.

Den 3. desember 1997 ble GCC en del av Enhanced GNU Compiler Systems (EGCS), et samarbeidsprosjekt som bestod av de fire kompilatorene GNU C, GNU C++, GNU Objective-C og GNU Fortran-77. Den 31. juli 1999 ble denne omdøpt til GNU Compiler Collection og utvidet med GNU Java og GNU CHILL. Verken CHILL eller Java er en del av GCC.

GCC 1.0 ble utvidet til å kompilere C++ i desember 1987.
Senere har det blitt utviklet grensesnitt for blant andre Pascal og Ada.

Programmeringsspråk
GCC versjon 4.3 inneholder støtte for C, C++ (G++), Java (GCJ), Ada (GNAT), Objective-C, Objective-C++ og Fortran-95 (GFortran). Det er også tilgjengelig støtte for Modula-2, Modula-3, Pascal, PL/I, D, Mercury, VHDL gjennom utvidelser.

Arkitekturer
GCC versjon 4.1 kan kompilere kode for å kjøre på følgende prosessorer:

 Alpha
 ARM
 Atmel AVR
 Blackfin
 HC12
 H8/300
 IA-32 (x86)
 x86-64
 Intel Itanium
 MorphoSys 
 Motorola 68000
 MIPS
 PA-RISC
 PDP-11
 PowerPC
 R8C/M16C/M32C 
 System/390/zSeries
 SuperH
 SPARC
 VAX

Andre mikroprosessorer som tidligere ble støttet i standard-utgaven inkluderer:

A29K
ARC
C4x
ETRAX CRIS
D30V
DSP16xx
FR-30
FR-V
Intel i860
Intel i960
IP2000
M32R
68HC11
MCORE
MMIX
MN10200
MN10300
Motorola 88000
NS32K
ROMP
Stormy16
V850
Xtensa

I tillegg har følgende prosessorer vært støttet av GCC versjoner som har blitt vedlikeholdt separat fra FSF versjonen:

D10V
MicroBlaze
Nios II and Nios
PDP-10
MSP430
Z8000

Operativsystemer
OperativsystemGCCSunOS 3.5 1.18 – 3.4.0SunOS 4.0 1.32 – 3.4.0Solaris 1.1.1 1.38 – 3.4.0Solaris 1.1.2 2.0 – 3.4.0Solaris 1.1.3 2.5.6 – 3.4.0Solaris 1.1.4 2.6.2 – 3.4.0Solaris 2.02.2 – 4.3.0Solaris 2.12.3.3 – 4.3.0Solaris 2.22.4.0 – 4.3.0Solaris 2.32.5.2 – 4.3.0Solaris 2.42.6.2 – 4.3.0Solaris 2.52.7.1 – 4.3.0Solaris 2.62.7.2.3 – 4.3.0Solaris 7EGSC 1.1 – 4.5.0Solaris 82.95.2 – 4.7.0Solaris 93.1.1 – 4.9.0Solaris 104.0.0 – 9.1Solaris 114.6.3 – 

Historikk
Arbeidet med GNU Hurd

GNU C Compiler oppstod under arbeidet med GNU Hurd, en fri og åpen operativsystemkjerne som er implementert som en mikrokjerne.Free Software Foundation, Inc.: What Is the GNU Hurd?, 2010 Arbeidet med kjernen begynte 5. januar 1984, da Richard Stallman sluttet i jobben ved Bell Laboratories slik at de ikke kunne hevde eiendomsrett til eller blande seg opp i distribueringen av GNU-komponentene.

GNU Hurd var i begynnelsen avhengig av mikrokjernen Mach fra Carnegie Mellon University under oppstart, og Stallman arbeidet med å få GNU Hurd til å starte opp på egen hånd. Under dette arbeidet tok han kontakt med Andrew S. Tanenbaum ved Vrije Universiteit i Amsterdam. Tanenbaum var opphavsmannen til MINIX, en annen Unix-lignende mikrokjerne som ble lansert i 1987.

Stallmann ba om tillatelse til å benytte Amsterdam Compiler Kit i forbindelse med GNU Hurd. Da Tanenbaum forklarte at Vrije Universiteit var fritt, men ikke kompilatoren, bestemte Stallman seg for å lage sin egen kompilator.

GNU C Compiler
GCC var opprinnelig navnet på GNU C kompilatoren. Det er en fri C kompilator, med åpen kildekode, for UNIX og Unix-liknende systemer.

De første GNU C kompilatorene fulgte de facto standardene, som ble definert av Kernighan & Richie, sammen med GNUs egne utvidelser.

Idag følger GNU C standard-biblioteket GNU C Library alle relevante standarder: ISO C99, POSIX.1c, POSIX.1j, POSIX.1d, UNIX-98 og the Single UNIX Specification. GNU C har også et av de mest komplette grensesnitt for internasjonalisering.

GNU C++ følger standardene ANSI C++ 2.1, ISO C++ 1998 standarden, og har også eksperimentell støtte for den kommende ISO C++ 0x standarden, gjennom standardbiblioteket GNU Libstdc++, som ble integrert i GNU Compiler Collection i versjon 3.1.

EGCS (Enhanced GNU Compiler Systems)
EGCS (Enhanced GNU Compiler Systems) var et samarbeidsprosjekt for å påskynde utviklingen av GNU kompilatorer. Viktige målsetninger var:
Støtte for nye mikroprosessorer og operativsystemer
Portabilitet til Microsoft ® Windows™ 32-bit operativsystemer
Større samsvar mellom GNU implementasjonen av C og C++ og standardene ISO C99 og ANSI C++ 2.1
Større optimalisering
Forbedret debugging

EGCS bestod av fire kompilatorer:
GNU C
GNU C++
GNU Objective-C
GNU Fortran-77

GNU Compiler Collection (GCC)
I april 1999 ble styrings-komitéen til EGCS utnevnt av Free Software Foundation som den offisielle vedlikeholder av GCC. Samtidig ble GCC omdøpt fra å være en forkortelse for «GNU C Compiler» til å bli en forkortelse for «GNU Compiler Collection».

Kompilatorene ble etter dette også portable til Microsoft Windows™ 64-bit
operativsystemer.

GCC 2.95 bestod av følgende kompilatorer:
GNU C
GNU C++
GNU Objective-C
GNU Fortran-77
GNU Java
GNU CHILL

GNU CHILL ble fjernet fra GCC versjon 3.0, og mange Linux-distribusjoner, deriblant Red Hat Fedora og Mandriva Linux, begynte å levere GCC 2.95, i tillegg til senere versjoner av GCC, for å gi brukerne tilgang til programmeringsspråket CHILL.

GCC 3.1 tilføyde GNU Ada-95. I GCC 4.0 ble GNU Fortran-77 kompilatoren erstattet av en mer oppdatert versjon som fulgte Fortran-95 standarden. GCC 4.1 tilføyde det nye programmeringsspråket GNU Objekt C++.

GCC 2.95

GCC 3.0

GCC 3.1
I GCC 3.1 opphørte støtten for følgende mikroprosessorer:

MIL-STD-1750A
AMD Am29000
Convex
Clipper
Elxsi
Intel i860
Sun picoJava
Western Electric 32000

GCC 3.2

GCC 3.3
I GCC 3.3 opphørte støtten for følgende mikroprosessorer:

Matsushita MN10200
Motorola 88000
IBM ROMP

GCC 3.4
I GCC 3.4 opphørte støtten for følgende mikroprosessorer:

Mitsubishi D30V
AT&T DSP1600
AT&T DSP1610
Intel i960

GCC 4.0
I GCC 4.0 fikk alle programmeringsspråkene en felles parser eller syntaktisk analysator, kalt tree SSA (Static Single Assignment).Proceedings of the 2003 GCC Developers Summit (sidene 171-193)  Kode fra ulike språk konverteres til en felles form kalt Generic, og deretter til en GIMPLE-parser (en fri utgave av SIMPLE fra the McCat project ved McGill University), og deretter optimalisert gjennom RTL-optimalisering. Dette gjorde C++ koden 25 % raskere.

 Fortran-77 erstattet av Fortran-95
 Ada-kompilatoren uvidet med deler av Ada-2005 standarden
 Generering av raskere C++ kode (25 % raskere enn versjon 3.4 uten optimalisering).
Støtte for NEC VR4130 serien (MIPS) og MIPS-3D ASE instruksjonssett.
Utvidet støtte for Sun's Visual Instruction Set (VIS) på UltraSPARC.

Mikroprosessorer som ikke lenger ble støttet:
Ubicom IP2022
National Semiconductor 32000
Texas Instruments TMS320C(34)

I GCC 4.0 opphørte også støtten for SPARClite baserte systemer og 32-bit OpenBSD på SPARC.

GCC 4.1

GCC 4.2

GCC 4.3

GCC 4.4

GCC 4.5

Versjonshistorikk
VersjonLansertMerknader0.922. mars 1987Første betautgave1.023. mai 19871.124. mai 19871.21. juni 19871.310. juni 19871.413. juni 19871.518. juni 19871.62. juli 19871.721. juli 19871.810. august 19871.918. august 19871.1022. august 19871.115. september 19871.123. oktober 19871.1312. oktober 19871.146. november 19871.1528. november 1987G++ 1.15.318. desember 1987C++ kompilator1.1619. desember 19871.179. januar 19881.184. februar 19881.1929. mars 19881.2019. april 19881.211. mai 19881.2222. mai 19881.2326. juni 19881.242. juli 19881.253. august 19881.2618. august 19881.275. september 19881.2814. september 19881.296. oktober 19881.3013. oktober 19881.3119. november 19881.3221. desember 19881.331. februar 19891.3423. februar 19891.3526. april 19891.3624. september 1989G++ 1.36.316. januar 1990C++ kompilatorG++ 1.36.430. januar 1990C++ kompilator1.3711. februar 19901.37.121. februar 1990G++ 1.37.028. februar 1990C++ kompilatorG++ 1.37.11. mars 1990C++ kompilator1.3821. desember 19901.3916. januar 1991G++ 1.39.14. mai 1991C++ kompilator1.401. juni 1991G++ 1.40.319. oktober 1991C++ kompilator2.022. februar 19922.124. mars 19922.28. juni 19922.2.19. juni 19922.2.214. juni 1992G++ 1.41.013. juli 1992C++ kompilator1.4127. august 19921.4220. september 1992G++ 1.42.020. september 1992C++ kompilator2.331. oktober 19922.3.11. november 19922.3.227. november 19922.3.326. desember 19922.4.017. mai 19932.4.126. mai 19932.4.231. mai 19932.4.31. juni 19932.4.419. juni 19932.4.520. juni 19932.5.022. oktober 19932.5.131. oktober 19932.5.21. november 19932.5.311. november 19932.5.416. november 19932.5.527. november 19932.5.63. desember 19932.5.712. desember 19932.5.824. januar 19942.6.014. juli 19942.6.11. november 19942.6.212. november 19942.6.330. november 19942.7.016. juni 19952.7.112. november 19952.7.226. november 19952.7.2.129. juni 19962.7.2.229. januar 19972.7.2.322. august 1997EGSC 1.03. desember 1997Versjon 2.90.21 av GNU CEGSC 1.0.16. januar 1998Versjon 2.90.23 av GNU C2.8.07. januar 19982.8.12. mars 1998EGSC 1.0.216. mars 1998Versjon 2.90.27 av GNU C EGSC 1.0.315. mai 1998Versjon 2.90.29 av GNU C. En mindre oppdatering, lansert for å løse problemer som ble rapportert av Red Hat på Red Hat Linux 5.1.EGSC 1.13. september 1998Versjon 2.91.57 av GNU CEGSC 1.1.11. desember 1998Versjon 2.91.60 av GNU CEGSC 1.1.215. mars 1999Versjon 2.91.66 av GNU C2.9531. juli 1999Uvidet støtte for standardene C99 og ISO C++98, bedre støtte for Fortran 77.6 News About GNU Fortran Tilføyd programmeringsspråkene Java og CHILL. Av signifikante nyheter kan nevnes bedre støtte for komplekse datatyper, eksperimentell internasjonal støtte, støtte for tegn bestående av flere bytes, evnen til å dumpe kontrollflytgrafens (CFG) informasjon og vise den med verktøyet VCG (Visualization of Compiler Graphs), og en ny og raskere metode som standard for å fikse feil i headerfiler fra tredjeparts leverandører.GCC 2.95 tilføyde støtte for operativsystemene OpenBSD og FreeBSD, Linux for ARM-arkitekturen, samt programmene UWIN og Interix for interoperabilitet mellom Unix og Microsoft Windows.Free Software Foundation, Inc: GCC 2.95 New Features, 31. juli 1999 Tilføyd støtte for sanntidsoperativsystemet vxWorks, inkludert tråder for VxWorks.Omskriving av kompilatorenes backend for å gi full støtte for 64-biter UltraSPARC.Free Software Foundation, Inc: SPARC Backend Rewrite. 31. juli 1999 Tilføyd støtte for 32-biter HyperSPARC og 32-biter Sparclite. Diverse optimaliseringer for 64-biter mikroprosessoren PA-8000 (PA-RISC 2.0). Diverse optimaliseringer for IA-32, deriblant AMD K6. Tilføyd støtte for 64-biter mikroprosessoren Alpha 21264 (EV6), 32-biter mikroprosessorene PowerPC 750, PowerPC 401, PowerPC 403 og PowerPC 603, de digitale signalprosessorene TMS320C3x og TMS320C4x fra Texas Instruments, 32-biter RISC-prosessorene SuperH4, StrongARM 110 og ARM9. Forskjellige forandringer i porteringen til RISC-arkitekturen MIPS, for å unngå assembler-makroer, ulike optimaliseringer for RISC-prosessoren Intel i960, og en omskriving av porteringen til NS320xx fra National Semiconductor.2.95.119. august 1999Signatur-utvidelsene i syntaksen til G++ ble definert som foreldet, og ble fjernet i GCC 3.0. GCC 2.95.1 hadde færre arkaiske G ++ konstruksjoner enn GCC 2.95. 2.95.227. oktober 1999Tilføyde makroen Define __STDC_EXT__ for HP-UX konfigurasjoner. Tilføyde feilsøkingsdataformatet STABS i stedet for formatet DWARF1 på Solaris versjonene 2.4, 2.5, 2.6 og 7 på x86. Tilføyde C++ kompatible include filer for Linux for ARM.2.95.2.110. desember 2000Feilrettinger.2.95.316. mars 20013.018. juni 20013.0.120. august 20013.0.225. oktober 20013.0.320. desember 20013.0.421. februar 20023.115. mai 20023.1.126. juli 20023.214. august 20023.2.121. november 20023.2.25. februar 20033.2.325. april 20033.314. mai 20033.3.18. august 20033.3.217. oktober 20033.3.314. februar 20043.4.018. april 20043.3.431. mai 20043.4.11. juli 20043.4.26. september 20043.3.530. september 20043.4.34. november 20044.0.020. april 20053.3.63. mai 20053.4.418. mai 20054.0.17. juli 20054.0.228. september 20053.4.530. november 20054.1.028. februar 20063.4.66. mars 20064.0.310. mars 20064.1.124. mai 20064.0.431. januar 20074.1.213. februar 20074.2.013. mai 20074.2.118. juli 20074.2.27. oktober 20074.2.31. februar 20084.3.05. mars 20084.2.419. mai 20084.3.16. juni 20084.3.227. august 20084.3.324. januar 20094.4.021. april 20094.4.122. juli 200983 feilrettinger4.3.44. august 20094.4.25. oktober 201020 feilrettinger4.4.321. januar 20104.5.014. april 2010Støtten for IRIX før versjon 6.5, Solaris 7 og Tru64 UNIX eldre enn V5.1 opphørt. Støtten for de første versjonene av mikroprosessoren POWER1 (RIOS1 og RIOS2) opphørt.4.4.429. april 20104.3.522. mai 20104.5.131. juli 20104.4.51. oktober 20104.5.216. desember 20104.6.025. mars 2011Støtten for Interix, Netware for i386, ABI for 32-bit RISC-prosessoren M·CORE (M·CORE PE), SymbianOS, GNU Hurd for Alpha/PowerPC og μClinux for Motorola 68000 opphørt. Støtten for Argonaut ARC, National Semiconductor CRX, Motorola 68HC11 og 68HC12 og Sunplus S+core opphørt.4.4.616. april 20114.5.328. april 20114.3.627. juni 20114.6.127. juni 20114.6.226. oktober 20114.6.31. mars 20124.4.713. mars 20124.7.022. mars 2012Støtten for IRIX 6.5, MIPS OpenBSD, Solaris 8 og Tru64 UNIX V5.1 opphørt.4.7.114. juni 20124.5.42. juli 20124.7.220. september 20124.8.022. mars 20134.7.311. april 20134.6.412. april 20134.8.131. mai 2013Støtte for C++11 ref-qualifiers tilføyd. Den første kompilator til å implementere alle de større språklige egenskaper i C++11 standarden. 4.8.216. oktober 20134.9.022. april 2014Støtten for Solaris 9 opphørt. Tilføyd støtte for 512-biter SIMD-instruksjonssett AVX-512 på mikroprosessoren Intel Xeon Phi.4.8.322. mai 20144.9.116. juli 2014OpenMP 4.0 for Fortran tilføyd. Støtte i Fortran for IEEE iboende moduler som spesifisert i standardene Fortran-2003 og Fortran-2008.4.9.230. oktober 2014Støtte for Cilk Plus ble tilføyd GCC.4.8.419. desember 2014GCC kan nå bli bygd som et delt bibliotek hvor andre interpretere og kompilatorer kan foreta Just-in-time compilation. Bidrag av Red Hat.5.122. april 2015std=gnu89 blir erstattet av std=gnu11 (C++11 med Gnu-utvidelser) som standard. Støtte for C++14 og delvis støtte for C++17. Støtte for DragonFly BSD, FreeBSD for ARM og VxWorks MILS (Multiple Independent Levels of Security) for PowerPC. Støtte for arkitekturen VISIUMcore og MIPS Release 6 ble tilføyd. Tilføyd støtte for Intel MPX på Skylake-arkitekturen. Tilføyd støtte for Intel Xeon Skylake utvidelser til SIMD-instruksjonssettet AVX-512.4.8.523. juni 20154.9.326. juni 20155.216. juli 20155.34. desember 20156.127. april 20165.43. juni 20164.9.43. august 20166.222. august 20166.321. desember 20167.12. mai 20176.44. juli 20177.214. august 20175.510. oktober 20177.325. januar 20188.12. mai 20188.226. juli 20186.526. oktober 20187.46. desember 20188.322. februar 20199.13. mai 20199.212. august 20197.514. november 20198.44. mars 20209.312. mars 202010.17. mai 202010.223. juli 202010.38. april 202111.127. april 20218.514. mai 20219.41. juni 202111.228. juli 202111.321. april 202212.16. mai 20229.527. mai 202210.428. juni 202212.219. august 202213.126. april 202312.38. mai 202311.429. mai 202310.57. juli 202313.227. juli 202314.17. mai 202413.321. mai 202412.420. juni 202411.519. juli 202414.21. august 202415.125. april 202514.323. mai 202513.45. juni 202512.511. juli 202515.28. august 202513.514.4

 Se også 
 GNAT
 Linux
 Fri programvare
 GNU
 Free Software Foundation

 Referanser 
Hagen 2006
Holmevik 2012, side 69-71

Litteratur


















 Eksterne lenker 


Kategori:GNU
Kategori:Linux-programmer
Kategori:Kompilatorer
Kategori:C kompilatorer
Kategori:C++ kompilatorer
Kategori:Objective-C kompilatorer
Kategori:Java (programmeringsspråk)
Kategori:Ada-kompilatorer
Kategori:Programvare fra 1987