GCC
GCC | |
---|---|
Kehittäjä | GNU-projekti |
Kehityshistoria | |
Ensijulkaisu | 23. toukokuuta 1987[1] |
Vakaa versio | 14.2 ()[2] |
Tiedot | |
Ohjelmistotyyppi | ohjelmointikielen kääntäjä |
Alusta | alustariippumaton |
Lisenssi | GNU GPL |
Aiheesta muualla | |
Verkkosivusto | |
Versiohallinta |
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ä.[3][4] Java-kääntäjä on poistettu GCC:stä versiosta 7 alkaen.[5] Varhainen tuki Rust-kielelle on lisätty joulukuussa 2022, mutta tuki ei ole vielä täysin valmis GCC version 13 julkaisuun mennessä.[6][7] Modula-2-kielen tuki on lisätty kehitysversioon joulukuussa 2022.[8]
Historia
[muokkaa | muokkaa wikitekstiä]Richard Stallman aloitti GCC:n kehityksen. GCC oli aluksi kirjoitettu Pastel-kielellä, joka oli Pascal-kielen murre.[9] Jotta kääntäjä saatiin kevyemmäksi ja helpommin käännettäväksi Len Tower ja Stallman kirjoittivat sen uudelleen C-kielellä.[9][10] Ensimmäinen beetaversio julkaistiin 22. maaliskuuta 1987 ja 1.0 julkaistiin 23. toukokuuta.[11][1] Ensimmäinen C++:aa kääntänyt versio, 1.15.3, julkaistiin 18. joulukuuta samana vuonna.[1]
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.[12]
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.[13]
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ä.[14]
Versio 7.1 lisää tuen C++17-standardin kaikille ominaisuuksille.[15] Versio 14.1 sisältää tukea useille C++26-standardin ominaisuuksille. Oletuksena GCC 14 käyttää vielä C++17-standardia.[16][17]
Tekniikka
[muokkaa | muokkaa wikitekstiä]GCC sisältää useita edustaosia (engl. front end) eri kieliä varten ja taustaosia (engl. back end) kohdesuorittimia varten.[18][19][20] 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 (engl. middle end) 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.[21][22][23][24][25] SSA-muoto (Static Single Assignment) on tarkoitettu tietovuon ja ohjelman ohjausvuon optimointiin.[26][27] RTL (Register Transfer Language) on lähellä varsinaista käskyä ja viimeinen välikieli käännöksessä.[28]
Kielituki
[muokkaa | muokkaa wikitekstiä]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).[29] 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.[29] Kääntäjässä on myös useita laajennuksia, jotka eivät ole mukana ISO-standardissa.[30]
C++-kielen versiot C++98, C++11, C++14, C++17 ja C++20 ovat tuettuja.[29]
Objective-C versio 1.0 on tuettu, jonka lisäksi joukko 2.0:n ominaisuuksia on tuettu. Lisäksi Objective-C++ on tuettu.[29]
Go-kielen Go 1 -versio on tuettu GCC:n versiosta 4.7.1 lähtien.[29]
GCC tukee D 2.0 -kieltä.[29]
Alustat
[muokkaa | muokkaa wikitekstiä]GCC:tä voidaan käyttää ristiinkääntäjänä, jolloin käännösympäristönä voi olla eri alusta kuin varsinainen kohdealusta.[31] Kohde voi olla esimerkiksi pelikonsoli (kuten PlayStation 2).[32][33]
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.[34][35] GCC:stä on julkaistu epävirallisia käännöksiä muun muassa AIX, HP-UX, DOS (DJGPP), macOS ja Microsoft Windows (MinGW ja Cygwin) -alustoille.[36] 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.[37][38][39]
Arkkitehtuurit
[muokkaa | muokkaa wikitekstiä]GCC:n kohdesuorittimet versiosta 4.3 lähtien:
Vähemmän tunnettuja suorittimia joita tuetaan vakiojulkaisussa:
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[42]
- LatticeMico32
- LatticeMico8
- MeP
- MicroBlaze
- Motorola 6809
- MSP430
- NEC SX[43]
- 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
[muokkaa | muokkaa wikitekstiä]- ↑ a b c http://www.gnu.org/software/gcc/releases.html
- ↑ GCC 14.2 Released, (viitattu ). Tieto on haettu Wikidatasta.
- ↑ https://gcc.gnu.org/gcc-8/changes.html#go
- ↑ https://gcc.gnu.org/gcc-9/changes.html#d
- ↑ https://gcc.gnu.org/gcc-7/changes.html#java
- ↑ Michael Larabel: GCC Rust "gccrs" Code Merged Into Mainline GCC 13 phoronix.com. 13.12.2022. Viitattu 13.12.2022. (englanniksi)
- ↑ GCC 13 and the state of gccrs rust-gcc.github.io. 24.4.2023. Viitattu 25.4.2023. (englanniksi)
- ↑ Michael Larabel: Modula-2 Language Frontend Merged Into GCC 13 phoronix.com. 14.12.2022. Viitattu 15.12.2022. (englanniksi)
- ↑ a b Gnu's Bulletin (sivu 10) web.cecs.pdx.edu. helmikuu 1986. Viitattu 15.1.2020. (englanniksi)
- ↑ Richard Stallman: The GNU Project gnu.org. Viitattu 7.3.2020. (englanniksi)
- ↑ http://groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98
- ↑ Reunification gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ https://web.archive.org/web/20120120133433/http://kerneltrap.org/node/13975
- ↑ GCC's move to C++ lwn.net. 13.3.2013. Viitattu 29.2.2020. (englanniksi)
- ↑ GCC 7.1 Released LWN.net. 2.5.2017. Viitattu 8.5.2017.
- ↑ GCC 14.1 Released lwn.net. Viitattu 17.7.2024. (englanniksi)
- ↑ Marek Polacek: New C++ features in GCC 14 developers.redhat.com. 15.5.2024. Viitattu 17.7.2024. (englanniksi)
- ↑ GCC Front Ends gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ Writing a GCC back end kristerw.blogspot.com. 4.8.2017. Viitattu 16.4.2024. (englanniksi)
- ↑ Tom Tromey: Writing a GCC Front End linuxjournal.com. 6.4.2005. Viitattu 16.4.2024. (englanniksi)
- ↑ 12 GIMPLE gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ Introduction to Gimple IR (PDF) cse.iitb.ac.in. heinäkuu 2009. Viitattu 16.4.2024. (englanniksi)
- ↑ 13 Analysis and Optimization of GIMPLE tuples gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ 13 Analysis and Optimization of GIMPLE tuples gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ 11 GENERIC gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ 13.3 Static Single Assignment gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ Efficiently Computing Static Single Assignment Form and the Control Dependence Graph cs.utexas.edu. 1991. Viitattu 16.4.2024. (englanniksi)
- ↑ 14 RTL Representation gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ a b c d e f 2 Language Standards Supported by GCC gcc.gnu.org. Viitattu 28.11.2022. (englanniksi)
- ↑ 6 Extensions to the C Language Family gcc.gnu.org. Viitattu 20.1.2024. (englanniksi)
- ↑ How to Build a GCC Cross-Compiler preshing.com. 19.11.2014. Viitattu 10.2.2020. (englanniksi)
- ↑ setting up gcc as a cross-compiler ps2stuff.playstation2-linux.com. Arkistoitu Viitattu 10.2.2020. (englanniksi)
- ↑ 32-bit life support: Cross-compiling with GCC opensource.com. Viitattu 10.2.2020. (englanniksi)
- ↑ GCC wiki.osdev.org. Viitattu 16.4.2024. (englanniksi)
- ↑ GCC Definition linfo.org. Viitattu 16.4.2024. (englanniksi)
- ↑ Installing GCC: Binaries gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
- ↑ Apple’s GPLv3 purge meta.ath0.com. 5.2.2012. Viitattu 16.4.2024. (englanniksi)
- ↑ LLVM Users Arkistoitu Viitattu 16.4.2024. (englanniksi)
- ↑ Why Clang lists.freebsd.org. 20.6.2012. Viitattu 16.4.2024. (englanniksi)
- ↑ GCC 14 Release Series gcc.gnu.org. Viitattu 12.4.2024. (englanniksi)
- ↑ Liam Proven: GCC 15 to keep Itanium support for now, after all theregister.com. 1.11.2024. Viitattu 2.11.2024. (englanniksi)
- ↑ Hexagon Project Wiki codeaurora.org. Arkistoitu 24.12.2013. Viitattu 10.2.2020.
- ↑ sx-gcc: port gcc to nec sx vector cpu code.google.com.
Kirjallisuutta
[muokkaa | muokkaa wikitekstiä]- William von Hagen: The Definitive Guide to GCC. Apress, 2006. ISBN 978-1-59059-585-5 Teoksen verkkoversio. (englanniksi)
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- https://gcc.gnu.org/ – GCC:n kotisivu