GCC

GNU Compiler Collection (yleensä GCC) on GNU-projektin kehittämä kääntäjien kokoelma. Se on Free Software Foundationin vapaata ohjelmistoa, ja julkaistu GNU GPL:n ja osin LGPL:n alaisuudessa. GCC on GNUn kehitysympäristön tärkein osa ja vapaiden Unixin kaltaisten käyttöjärjestelmien vakiokääntäjä ja usein hyödynnetty myös kaupallisten kehitysympäristöjen kanssa.

GCC:n alkuperäinen nimi oli GNU C Compiler ja se osasi kääntää vain C-kieltä. Nyttemmin GCC osaa kääntää myös C++, Fortran, Ada, Objective-C, Go ja D -kieliä.https://gcc.gnu.org/gcc-8/changes.html#gohttps://gcc.gnu.org/gcc-9/changes.html#d Java-kääntäjä on poistettu GCC:stä versiosta 7 alkaen.https://gcc.gnu.org/gcc-7/changes.html#java Varhainen tuki Rust-kielelle on lisätty joulukuussa 2022, mutta tuki ei ole vielä täysin valmis GCC version 13 julkaisuun mennessä. Modula-2-kielen tuki on lisätty kehitysversioon joulukuussa 2022.

 Historia 
Richard Stallman aloitti GCC:n kehityksen. GCC oli aluksi kirjoitettu Pastel-kielellä, joka oli Pascal-kielen murre. Jotta kääntäjä saatiin kevyemmäksi ja helpommin käännettäväksi Len Tower ja Stallman kirjoittivat sen uudelleen C-kielellä. Ensimmäinen beetaversio julkaistiin 22. maaliskuuta 1987 ja 1.0 julkaistiin 23. toukokuuta.http://groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98 Ensimmäinen C++:aa kääntänyt versio, 1.15.3, julkaistiin 18. joulukuuta samana vuonna.http://www.gnu.org/software/gcc/releases.html

Vuonna 1997 ryhmä kehittäjiä, jotka kyllästyivät GCC:n hitaaseen kehitykseen ja suljettuun kehitysryhmään, muodosti projektin nimeltä EGCS (Experimental/Enhanced GNU Compiler System), joka otti mukaan ominaisuuksia eräistä GCC:n epävirallisista muunnoksista, kuten Fortran 77 -kääntäjän, IBM:n kehittämän Haifa-optimoijan ja Pentium-optimoinnin. Myöhemmin Free Software Foundation lopetti oman GCC 2.x:n kehityksensä ja EGCS:sta tuli virallinen GCC huhtikuussa 1999.

GCC:n versio 4.2.1 oli viimeinen, joka julkaistiin GPL-lisenssin versiolla 2. Myöhemmät versiot käyttävät lisenssin versiota 3.https://web.archive.org/web/20120120133433/http://kerneltrap.org/node/13975

GCC:n toteutusta on muutettu C-kielestä C++:n alijoukolle: tavoitteena on säilyttää yhteensopivuus edeltävään versioon sekä mahdollisuus kääntää GCC muilla kääntäjillä.

Versio 7.1 lisää tuen C++17-standardin kaikille ominaisuuksille. Versio 14.1 sisältää tukea useille C++26-standardin ominaisuuksille. Oletuksena GCC 14 käyttää vielä C++17-standardia.

Versiossa 15 mukana on COBOL-kielen tuki gCobol-kääntäjällä, joka on eri kuin vanhempi C-kieleksi tulkannut GnuCOBOL-kääntäjä.

 Tekniikka 
pienoiskuva|Yleiskuva GCC:n käyttämistä ohjelmista. Käännöksen aikana käytetään varsinaisen kääntäjän lisäksi esikääntäjää, assembleria ja linkkeriohjelmaa.
pienoiskuva|GCC käyttää kolmivaiheista arkkitehtuuria, jolla se tukee useita ohjelmointikieliä ja useita suorittimia.

GCC sisältää useita edustaosia () eri kieliä varten ja taustaosia () kohdesuorittimia varten. GCC käyttää käännöksen aikana kolmea välikieltä: GENERIC, GIMPLE ja RTL. GENERIC on kielestä riippumaton muoto, jota jokainen edustaosa tuottaa. GCC:n välivaihe () käsittelee GIMPLE-välikieltä, jossa jokaisessa ilmaisussa voi olla enintään kolme operandia. GIMPLE:stä tehdään SSA-muoto, johon sovelletaan ohjelman optimointia, ja muunnetaan takaisin GIMPLE-muotoon taustaosaa varten. SSA-muoto (Static Single Assignment) on tarkoitettu tietovuon ja ohjelman ohjausvuon optimointiin. RTL (Register Transfer Language) on lähellä varsinaista käskyä ja viimeinen välikieli käännöksessä.

 Kielituki 
GCC sisältää tuen C-kielen eri standardiversioille sekä GNU-laajennuksille kieleen: versiossa 12.2.0 oletuksena käytössä on gnu17-versio (C18 GNU-laajennuksilla). C90-versio on tuettu teknisien korjausten kanssa (Technical Corrigenda, 1994 ja 1996) ja vuonna 1995 julkaistu laajennettu versio (Amendment 1). C99-versio on tuettu teknisien korjauksien kanssa (2001, 2004 ja 2007). C11-versio on tuettu ja C17-version korjauksien kanssa. Kääntäjässä on myös useita laajennuksia, jotka eivät ole mukana ISO-standardissa. 

C++-kielen versiot C++98, C++11, C++14, C++17 ja C++20 ovat tuettuja.

Objective-C versio 1.0 on tuettu, jonka lisäksi joukko 2.0:n ominaisuuksia on tuettu. Lisäksi Objective-C++ on tuettu.

Go-kielen Go 1 -versio on tuettu GCC:n versiosta 4.7.1 lähtien.

GCC tukee D 2.0 -kieltä.

 Alustat 
GCC:tä voidaan käyttää ristiinkääntäjänä, jolloin käännösympäristönä voi olla eri alusta kuin varsinainen kohdealusta. Kohde voi olla esimerkiksi pelikonsoli (kuten PlayStation 2).

GCC on kehitetty ja tukee pääasiallisesti POSIX-yhteensopivia alustoja (Linux ja muut Unixin kaltaiset käyttöjärjestelmät), mutta se on siirretty myös useille muille alustoille.
GCC:stä on julkaistu epävirallisia käännöksiä muun muassa AIX, HP-UX, DOS (DJGPP), macOS ja Microsoft Windows (MinGW ja Cygwin) -alustoille. Apple poisti vaiheittain kaikki GNU GPL -lisensoidut ohjelmistot OS X -käyttöjärjestelmästä (nykyisin nimellä macOS) ja on ottanut käyttöönsä LLVM:n.

 Arkkitehtuurit 
GCC:n kohdesuorittimet versiosta 4.3 lähtien:

 Alpha
 ARM
 AVR
 Blackfin
 Epiphany (GCC 4.8)
 H8/300
 HC12
 IA-32 (x86)
 IA-64 (Intel Itanium), merkitty poistuvaksi tulevassa versiossa mutta palautettu takaisin
 MIPS
 Motorola 68000 -sarja
 PA-RISC
 PDP-11
 PowerPC
 R8C / M16C / M32C
 SPARC
 SPU
 SuperH
 System/390 / zSeries
 VAX
 x86-64

Vähemmän tunnettuja suorittimia joita tuetaan vakiojulkaisussa:

 68HC11
 AMD Am29000 (A29K)
 CR16
 C6x
 D30V
 DSP16xx
 ETRAX CRIS
 FR-30
 FR-V
 Intel i960
 IP2000
 M32R
 MCORE
 MIL-STD-1750A
 MMIX
 MN10200
 MN10300
 Motorola 88000
 NS32K
 IBM ROMP
 RL78
 Stormy16
 V850
 Xtensa

Lisää suorittimia tuetaan versioissa, joita ylläpidetään erillään GNU-projektin versiosta:

 Cortus APS3
 ARC
 AVR32
 C166 ja C167
 D10V
 EISC
 eSi-RISC
 Hexagon
 LatticeMico32
 LatticeMico8
 MeP
 MicroBlaze
 Motorola 6809
 MSP430
 NEC SX
 Nios II ja Nios
 OpenRISC
 PDP-10
 PIC24/dsPIC
 PIC32
 Propeller
 RISC-V
 Saturn (HP48XGCC)
 System/370
 TIGCC (m68k-muunnos)
 TriCore
 Z8000
 ZPU

Lähteet

 Kirjallisuutta 


Aiheesta muualla
 https://gcc.gnu.org/ – GCC:n kotisivu

Luokka:GNU-projektin ohjelmat
Luokka:Ohjelmointikielen kääntäjät
Luokka:C-kielen kääntäjät