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. == Tekniikka == 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