Movatterモバイル変換


[0]ホーム

URL:


Siirry sisältöön
Wikipedia
Haku

GCC

Wikipediasta
Tämä artikkeli kertoo ohjelmoinnista. GCC on myösGulf Cooperation Councilin lyhenne
GCC
KehittäjäGNU-projekti
Kehityshistoria
Ensijulkaisu23. toukokuuta 1987[1]
Vakaa versio14.2.0 ()[2]
Tiedot
Ohjelmistotyyppiohjelmointikielen kääntäjä
Alustaalustariippumaton
LisenssiGNU GPL
Aiheesta muualla
Verkkosivusto
Versiohallinta
Infobox OK

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

GCC:n alkuperäinen nimi oliGNU C Compiler ja se osasi kääntää vainC-kieltä. Nyttemmin GCC osaa kääntää myösC++,Fortran,Ada,Objective-C,Go jaD -kieliä.[3][4]Java-kääntäjä on poistettu GCC:stä versiosta 7 alkaen.[5] Varhainen tukiRust-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 kirjoitettuPastel-kielellä, joka oliPascal-kielen murre.[9] Jotta kääntäjä saatiin kevyemmäksi ja helpommin käännettäväksiLen 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, kutenFortran 77 -kääntäjän,IBM:n kehittämän Haifa-optimoijan jaPentium-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ää tuenC++17-standardin kaikille ominaisuuksille.[15] Versio 14.1 sisältää tukea useilleC++26-standardin ominaisuuksille. Oletuksena GCC 14 käyttää vielä C++17-standardia.[16][17]

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

Tekniikka

[muokkaa |muokkaa wikitekstiä]
Yleiskuva GCC:n käyttämistä ohjelmista. Käännöksen aikana käytetään varsinaisen kääntäjän lisäksiesikääntäjää,assembleria jalinkkeriohjelmaa.
GCC käyttää kolmivaiheista arkkitehtuuria, jolla se tukee useita ohjelmointikieliä ja useita suorittimia.

GCC sisältää useitaedustaosia (engl.front end) eri kieliä varten jataustaosia (engl.back end) kohdesuorittimia varten.[19][20][21] GCC käyttää käännöksen aikana kolmeavälikieltä: GENERIC, GIMPLE ja RTL. GENERIC on kielestä riippumaton muoto, jota jokainen edustaosa tuottaa. GCC:nvälivaihe (engl.middle end) käsittelee GIMPLE-välikieltä, jossa jokaisessa ilmaisussa voi olla enintään kolmeoperandia. GIMPLE:stä tehdään SSA-muoto, johon sovelletaanohjelman optimointia, ja muunnetaan takaisin GIMPLE-muotoon taustaosaa varten.[22][23][24][25][26] SSA-muoto (Static Single Assignment) on tarkoitettu tietovuon ja ohjelman ohjausvuon optimointiin.[27][28] RTL (Register Transfer Language) on lähellä varsinaista käskyä ja viimeinen välikieli käännöksessä.[29]

Kielituki

[muokkaa |muokkaa wikitekstiä]

GCC sisältää tuen C-kielen eri standardiversioille sekä GNU-laajennuksille kieleen: versiossa 12.2.0 oletuksena käytössä ongnu17-versio (C18 GNU-laajennuksilla).[30]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.[30] Kääntäjässä on myös useita laajennuksia, jotka eivät ole mukana ISO-standardissa.[31]

C++-kielen versiotC++98,C++11,C++14,C++17 jaC++20 ovat tuettuja.[30]

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

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

GCC tukee D 2.0 -kieltä.[30]

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.[32] Kohde voi olla esimerkiksipelikonsoli (kutenPlayStation 2).[33][34]

GCC on kehitetty ja tukee pääasiallisestiPOSIX-yhteensopivia alustoja (Linux ja muut Unixin kaltaiset käyttöjärjestelmät), mutta se on siirretty myös useille muille alustoille.[35][36]GCC:stä on julkaistu epävirallisia käännöksiä muun muassaAIX,HP-UX,DOS (DJGPP),macOS jaMicrosoft Windows (MinGW jaCygwin) -alustoille.[37]Apple poisti vaiheittain kaikkiGNU GPL -lisensoidut ohjelmistot OS X -käyttöjärjestelmästä (nykyisin nimellä macOS) ja on ottanut käyttöönsäLLVM:n.[38][39][40]

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:

Lähteet

[muokkaa |muokkaa wikitekstiä]
  1. abchttp://www.gnu.org/software/gcc/releases.html
  2. GCC 14.2 Released,(viitattu). Tieto on haettuWikidatasta.
  3. https://gcc.gnu.org/gcc-8/changes.html#go
  4. https://gcc.gnu.org/gcc-9/changes.html#d
  5. https://gcc.gnu.org/gcc-7/changes.html#java
  6. Michael Larabel: GCC Rust "gccrs" Code Merged Into Mainline GCC 13 phoronix.com. 13.12.2022. Viitattu 13.12.2022. (englanniksi)
  7. GCC 13 and the state of gccrs rust-gcc.github.io. 24.4.2023. Viitattu 25.4.2023. (englanniksi)
  8. Michael Larabel: Modula-2 Language Frontend Merged Into GCC 13 phoronix.com. 14.12.2022. Viitattu 15.12.2022. (englanniksi)
  9. abGnu's Bulletin (sivu 10) web.cecs.pdx.edu. helmikuu 1986. Viitattu 15.1.2020. (englanniksi)
  10. Richard Stallman: The GNU Project gnu.org. Viitattu 7.3.2020. (englanniksi)
  11. http://groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98
  12. Reunification gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  13. https://web.archive.org/web/20120120133433/http://kerneltrap.org/node/13975
  14. GCC's move to C++ lwn.net. 13.3.2013. Viitattu 29.2.2020. (englanniksi) 
  15. GCC 7.1 Released LWN.net. 2.5.2017. Viitattu 8.5.2017.
  16. GCC 14.1 Released lwn.net. Viitattu 17.7.2024. (englanniksi)
  17. Marek Polacek: New C++ features in GCC 14 developers.redhat.com. 15.5.2024. Viitattu 17.7.2024. (englanniksi)
  18. Liam Proven: GCC 15 is close: COBOL and Itanium are in, but ALGOL is out theregister.com. 13.3.2025. Viitattu 13.3.2025. (englanniksi)
  19. GCC Front Ends gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  20. Writing a GCC back end kristerw.blogspot.com. 4.8.2017. Viitattu 16.4.2024. (englanniksi)
  21. Tom Tromey: Writing a GCC Front End linuxjournal.com. 6.4.2005. Viitattu 16.4.2024. (englanniksi)
  22. 12 GIMPLE gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  23. Introduction to Gimple IR (PDF) cse.iitb.ac.in. heinäkuu 2009. Viitattu 16.4.2024. (englanniksi)
  24. 13 Analysis and Optimization of GIMPLE tuples gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  25. 13 Analysis and Optimization of GIMPLE tuples gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  26. 11 GENERIC gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  27. 13.3 Static Single Assignment gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  28. Efficiently Computing Static Single Assignment Form and the Control Dependence Graph cs.utexas.edu. 1991. Viitattu 16.4.2024. (englanniksi)
  29. 14 RTL Representation gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  30. abcdef2 Language Standards Supported by GCC gcc.gnu.org. Viitattu 28.11.2022. (englanniksi)
  31. 6 Extensions to the C Language Family gcc.gnu.org. Viitattu 20.1.2024. (englanniksi)
  32. How to Build a GCC Cross-Compiler preshing.com. 19.11.2014. Viitattu 10.2.2020. (englanniksi)
  33. setting up gcc as a cross-compiler ps2stuff.playstation2-linux.com. Arkistoitu Viitattu 10.2.2020. (englanniksi)
  34. 32-bit life support: Cross-compiling with GCC opensource.com. Viitattu 10.2.2020. (englanniksi)
  35. GCC wiki.osdev.org. Viitattu 16.4.2024. (englanniksi)
  36. GCC Definition linfo.org. Viitattu 16.4.2024. (englanniksi)
  37. Installing GCC: Binaries gcc.gnu.org. Viitattu 16.4.2024. (englanniksi)
  38. Apple’s GPLv3 purge meta.ath0.com. 5.2.2012. Viitattu 16.4.2024. (englanniksi)
  39. LLVM Users Arkistoitu Viitattu 16.4.2024. (englanniksi)
  40. Why Clang lists.freebsd.org. 20.6.2012. Viitattu 16.4.2024. (englanniksi)
  41. GCC 14 Release Series gcc.gnu.org. Viitattu 12.4.2024. (englanniksi)
  42. Liam Proven: GCC 15 to keep Itanium support for now, after all theregister.com. 1.11.2024. Viitattu 2.11.2024. (englanniksi)
  43. Hexagon Project Wiki codeaurora.org. Arkistoitu 24.12.2013. Viitattu 10.2.2020.
  44. sx-gcc: port gcc to nec sx vector cpu code.google.com.

Kirjallisuutta

[muokkaa |muokkaa wikitekstiä]

Aiheesta muualla

[muokkaa |muokkaa wikitekstiä]
Noudettu kohteesta ”https://fi.wikipedia.org/w/index.php?title=GCC&oldid=23107263
Luokat:
Piilotetut luokat:

[8]ページ先頭

©2009-2025 Movatter.jp