GNU Compiler Collection

(Omdirigert fra «GNU C Compiler»)

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.

GNU Compiler Collection
Utvikler(e)GNU-prosjektet
Utgitt 23. mai 1987[1]
Nyeste versjon13.2 (27. juli 2023)[2]
Kodelagerhttps://gcc.gnu.org/git/gcc.git
PlattformMultiplattform
OperativsystemGNU/Linux BSD Microsoft Windows GNU/Hurd macOS Unix-liknende OpenBSD FreeBSD NetBSD Linux MINIX 3
Skrevet iC++, C
Støtter skriptC, C++, Objective-C, Fortran, Ada, Go, D
LisensGPLv3
Nettstedgcc.gnu.org (en)

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

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.[3] Senere har det blitt utviklet grensesnitt for blant andre Pascal og Ada.[4]

Programmeringsspråk rediger

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 rediger

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

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

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

Operativsystemer rediger

Operativsystem GCC
SunOS 3.5 1.18 – 3.4.0
SunOS 4.0 1.32 – 3.4.0
Solaris 1.1.1 1.38 – 3.4.0
Solaris 1.1.2 2.0 – 3.4.0
Solaris 1.1.3 2.5.6 – 3.4.0
Solaris 1.1.4 2.6.2 – 3.4.0
Solaris 2.0 2.2 – 4.3.0
Solaris 2.1 2.3.3 – 4.3.0
Solaris 2.2 2.4.0 – 4.3.0
Solaris 2.3 2.5.2 – 4.3.0
Solaris 2.4 2.6.2 – 4.3.0
Solaris 2.5 2.7.1 – 4.3.0
Solaris 2.6 2.7.2.3 – 4.3.0
Solaris 7 EGSC 1.1 – 4.5.0
Solaris 8 2.95.2 – 4.7.0
Solaris 9 3.1.1 – 4.9.0
Solaris 10 4.0.0 – 9.1
Solaris 11 4.6.3 –

Historikk rediger

Arbeidet med GNU Hurd rediger

Se også: GNU Hurd og Minix

GNU C Compiler oppstod under arbeidet med GNU Hurd, en fri og åpen operativsystemkjerne som er implementert som en mikrokjerne.[5] 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.[6]

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.[7]

GNU C Compiler rediger

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) rediger

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 Compiler Collection (GCC) rediger

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 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 rediger

GCC 3.0 rediger

GCC 3.1 rediger

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

GCC 3.2 rediger

GCC 3.3 rediger

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

GCC 3.4 rediger

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

GCC 4.0 rediger

I GCC 4.0 fikk alle programmeringsspråkene en felles parser eller syntaktisk analysator, kalt tree SSA (Static Single Assignment).[8] 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:

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

GCC 4.1 rediger

GCC 4.2 rediger

GCC 4.3 rediger

GCC 4.4 rediger

GCC 4.5 rediger

Versjonshistorikk rediger

Versjon Lansert Merknader
0.9 22. mars 1987 Første betautgave
1.0 23. mai 1987
1.1 24. mai 1987
1.2 1. juni 1987
1.3 10. juni 1987
1.4 13. juni 1987
1.5 18. juni 1987
1.6 2. juli 1987
1.7 21. juli 1987
1.8 10. august 1987
1.9 18. august 1987
1.10 22. august 1987
1.11 5. september 1987
1.12 3. oktober 1987
1.13 12. oktober 1987
1.14 6. november 1987
1.15 28. november 1987
G++ 1.15.3 18. desember 1987 C++ kompilator
1.16 19. desember 1987
1.17 9. januar 1988
1.18 4. februar 1988
1.19 29. mars 1988
1.20 19. april 1988
1.21 1. mai 1988
1.22 22. mai 1988
1.23 26. juni 1988
1.24 2. juli 1988
1.25 3. august 1988
1.26 18. august 1988
1.27 5. september 1988
1.28 14. september 1988
1.29 6. oktober 1988
1.30 13. oktober 1988
1.31 19. november 1988
1.32 21. desember 1988
1.33 1. februar 1989
1.34 23. februar 1989
1.35 26. april 1989
1.36 24. september 1989
G++ 1.36.3 16. januar 1990 C++ kompilator
G++ 1.36.4 30. januar 1990 C++ kompilator
1.37 11. februar 1990
1.37.1 21. februar 1990
G++ 1.37.0 28. februar 1990 C++ kompilator
G++ 1.37.1 1. mars 1990 C++ kompilator
1.38 21. desember 1990
1.39 16. januar 1991
G++ 1.39.1 4. mai 1991 C++ kompilator
1.40 1. juni 1991
G++ 1.40.3 19. oktober 1991 C++ kompilator
2.0 22. februar 1992
2.1 24. mars 1992
2.2 8. juni 1992
2.2.1 9. juni 1992
2.2.2 14. juni 1992
G++ 1.41.0 13. juli 1992 C++ kompilator
1.41 27. august 1992
1.42 20. september 1992
G++ 1.42.0 20. september 1992 C++ kompilator
2.3 31. oktober 1992
2.3.1 1. november 1992
2.3.2 27. november 1992
2.3.3 26. desember 1992
2.4.0 17. mai 1993
2.4.1 26. mai 1993
2.4.2 31. mai 1993
2.4.3 1. juni 1993
2.4.4 19. juni 1993
2.4.5 20. juni 1993
2.5.0 22. oktober 1993
2.5.1 31. oktober 1993
2.5.2 1. november 1993
2.5.3 11. november 1993
2.5.4 16. november 1993
2.5.5 27. november 1993
2.5.6 3. desember 1993
2.5.7 12. desember 1993
2.5.8 24. januar 1994
2.6.0 14. juli 1994
2.6.1 1. november 1994
2.6.2 12. november 1994
2.6.3 30. november 1994
2.7.0 16. juni 1995
2.7.1 12. november 1995
2.7.2 26. november 1995
2.7.2.1 29. juni 1996
2.7.2.2 29. januar 1997
2.7.2.3 22. august 1997
EGSC 1.0 3. desember 1997 Versjon 2.90.21 av GNU C
EGSC 1.0.1 6. januar 1998 Versjon 2.90.23 av GNU C
2.8.0 7. januar 1998
2.8.1 2. mars 1998
EGSC 1.0.2 16. mars 1998 Versjon 2.90.27 av GNU C
EGSC 1.0.3 15. mai 1998 Versjon 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.1 3. september 1998 Versjon 2.91.57 av GNU C
EGSC 1.1.1 1. desember 1998 Versjon 2.91.60 av GNU C
EGSC 1.1.2 15. mars 1999 Versjon 2.91.66 av GNU C
2.95 31. juli 1999 Uvidet støtte for standardene C99 og ISO C++98,[9] bedre støtte for Fortran 77.[9][10] Tilføyd programmeringsspråkene Java og CHILL.[9]
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.[9]
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.[9] Tilføyd støtte for sanntidsoperativsystemet vxWorks, inkludert tråder for VxWorks.[9]
Omskriving av kompilatorenes backend for å gi full støtte for 64-biter UltraSPARC.[9][11] Tilføyd støtte for 32-biter HyperSPARC og 32-biter Sparclite. Diverse optimaliseringer for 64-biter mikroprosessoren PA-8000 (PA-RISC 2.0).[9] Diverse optimaliseringer for IA-32, deriblant AMD K6.[9] Tilføyd støtte for 64-biter mikroprosessoren Alpha 21264 (EV6),[9] 32-biter mikroprosessorene PowerPC 750, PowerPC 401, PowerPC 403 og PowerPC 603,[9] de digitale signalprosessorene TMS320C3x og TMS320C4x fra Texas Instruments,[9] 32-biter RISC-prosessorene SuperH4,[9] StrongARM 110 og ARM9.[9] Forskjellige forandringer i porteringen til RISC-arkitekturen MIPS, for å unngå assembler-makroer,[9] ulike optimaliseringer for RISC-prosessoren Intel i960,[9] og en omskriving av porteringen til NS320xx fra National Semiconductor.[9]
2.95.1 19. august 1999 Signatur-utvidelsene i syntaksen til G++ ble definert som foreldet, og ble fjernet i GCC 3.0.[9] GCC 2.95.1 hadde færre arkaiske G ++ konstruksjoner enn GCC 2.95.[9]
2.95.2 27. oktober 1999 Tilføyde makroen Define __STDC_EXT__ for HP-UX konfigurasjoner.[9] Tilføyde feilsøkingsdataformatet STABS i stedet for formatet DWARF1Solaris versjonene 2.4, 2.5, 2.6 og 7 på x86.[9] Tilføyde C++ kompatible include filer for Linux for ARM.[9]
2.95.2.1 10. desember 2000 Feilrettinger.[9]
2.95.3 16. mars 2001
3.0 18. juni 2001
3.0.1 20. august 2001
3.0.2 25. oktober 2001
3.0.3 20. desember 2001
3.0.4 21. februar 2002
3.1 15. mai 2002
3.1.1 26. juli 2002
3.2 14. august 2002
3.2.1 21. november 2002
3.2.2 5. februar 2003
3.2.3 25. april 2003
3.3 14. mai 2003
3.3.1 8. august 2003
3.3.2 17. oktober 2003
3.3.3 14. februar 2004
3.4.0 18. april 2004
3.3.4 31. mai 2004
3.4.1 1. juli 2004
3.4.2 6. september 2004
3.3.5 30. september 2004
3.4.3 4. november 2004
4.0.0 20. april 2005
3.3.6 3. mai 2005
3.4.4 18. mai 2005
4.0.1 7. juli 2005
4.0.2 28. september 2005
3.4.5 30. november 2005
4.1.0 28. februar 2006
3.4.6 6. mars 2006
4.0.3 10. mars 2006
4.1.1 24. mai 2006
4.0.4 31. januar 2007
4.1.2 13. februar 2007
4.2.0 13. mai 2007
4.2.1 18. juli 2007
4.2.2 7. oktober 2007
4.2.3 1. februar 2008
4.3.0 5. mars 2008
4.2.4 19. mai 2008
4.3.1 6. juni 2008
4.3.2 27. august 2008
4.3.3 24. januar 2009
4.4.0 21. april 2009
4.4.1 22. juli 2009 83 feilrettinger
4.3.4 4. august 2009
4.4.2 5. oktober 2010 20 feilrettinger
4.4.3 21. januar 2010
4.5.0 14. april 2010 Stø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.4 29. april 2010
4.3.5 22. mai 2010
4.5.1 31. juli 2010
4.4.5 1. oktober 2010
4.5.2 16. desember 2010
4.6.0 25. mars 2011 Stø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.6 16. april 2011
4.5.3 28. april 2011
4.3.6 27. juni 2011
4.6.1 27. juni 2011
4.6.2 26. oktober 2011
4.6.3 1. mars 2012
4.4.7 13. mars 2012
4.7.0 22. mars 2012 Støtten for IRIX 6.5, MIPS OpenBSD, Solaris 8 og Tru64 UNIX V5.1 opphørt.
4.7.1 14. juni 2012
4.5.4 2. juli 2012
4.7.2 20. september 2012
4.8.0 22. mars 2013
4.7.3 11. april 2013
4.6.4 12. april 2013
4.8.1 31. mai 2013 Stø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.2 16. oktober 2013
4.9.0 22. april 2014 Støtten for Solaris 9 opphørt. Tilføyd støtte for 512-biter SIMD-instruksjonssett AVX-512 på mikroprosessoren Intel Xeon Phi.
4.8.3 22. mai 2014
4.9.1 16. juli 2014 OpenMP 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.2 30. oktober 2014 Støtte for Cilk Plus ble tilføyd GCC.
4.8.4 19. desember 2014 GCC kan nå bli bygd som et delt bibliotek hvor andre interpretere og kompilatorer kan foreta Just-in-time compilation. Bidrag av Red Hat.
5.1 22. april 2015 std=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 MPXSkylake-arkitekturen. Tilføyd støtte for Intel Xeon Skylake utvidelser til SIMD-instruksjonssettet AVX-512.
4.8.5 23. juni 2015
4.9.3 26. juni 2015
5.2 16. juli 2015
5.3 4. desember 2015
6.1 27. april 2016
5.4 3. juni 2016
4.9.4 3. august 2016
6.2 22. august 2016
6.3 21. desember 2016
7.1 2. mai 2017
6.4 4. juli 2017
7.2 14. august 2017
5.5 10. oktober 2017
7.3 25. januar 2018
8.1 2. mai 2018
8.2 26. juli 2018
6.5 26. oktober 2018
7.4 6. desember 2018
8.3 22. februar 2019
9.1 3. mai 2019
9.2 12. august 2019
7.5 14. november 2019
8.4 4. mars 2020
9.3 12. mars 2020
10.1 7. mai 2020
10.2 23. juli 2020
10.3 8. april 2021
11.1 27. april 2021
8.5 14. mai 2021
9.4 1. juni 2021
11.2 28. juli 2021
11.3 21. april 2022
12.1 6. mai 2022
9.5 27. mai 2022
10.4 28. juni 2022
12.2 19. august 2022
13.1 26. april 2023
12.3 8. mai 2023
11.4 29. mai 2023
10.5 7. juli 2023
13.2 27. juli 2023
11.5
12.4
13.3
14.1

Se også rediger

Referanser rediger

  1. ^ https://www.gnu.org/software/gcc/releases.html.
  2. ^ "GCC 13.2 Released"; besøksdato: 27. juli 2023; forfatternavn: Richard Biener; utgivelsesdato: 27. juli 2023.
  3. ^ «GCC Releases». GNU Project. Besøkt 24. april 2009. 
  4. ^ «Programming Languages Supported by GCC». GNU Project. Besøkt 24. april 2009. 
  5. ^ Free Software Foundation, Inc.: What Is the GNU Hurd?, 2010
  6. ^ Holmevik 2012, side 69-71
  7. ^ Hagen 2006
  8. ^ Proceedings of the 2003 GCC Developers Summit (sidene 171-193) Arkivert 15. juli 2004 hos Wayback Machine.
  9. ^ a b c d e f g h i j k l m n o p q r s t u v w Free Software Foundation, Inc: GCC 2.95 New Features, 31. juli 1999
  10. ^ 6 News About GNU Fortran
  11. ^ Free Software Foundation, Inc: SPARC Backend Rewrite. 31. juli 1999

Litteratur rediger

Eksterne lenker rediger