GNU Compiler Collection (zkráceněGCC) je sadapřekladačů vytvořených v rámciprojektu GNU. Původně se jednalo pouze o překladačprogramovacího jazykaC (a zkratka tehdy znamenalaGNU C Compiler), později byly na stejném společném základě vytvořeny překladače jazykůC++,D[1][2],Rust[3][4][5][6][7][8],Fortran,Ada,Modula-2[9],Cobol[10][11][12],Algol 68[13] a dalších.
Původním autorem GCC jeRichard Stallman, který ho roku1987 vytvořil jako jednu ze základních částí svého projektu GNU; dnes projekt zastřešuje nadaceFSF. GCC je šířen pod licencíGNU GPL a stal se již de facto standardním překladačem vopen sourceoperačních systémechunixového typu, ale používá se i v některých komerčních operačních systémech, např. namacOS.[zdroj?] Existují také jehoporty proMicrosoft Windows (např.MinGW).
Richard Stallman začal na GCC pracovat v roce1985. Rozšířil stávající překladačprogramovacího jazyka s názvemPastel, což byl rozšiřující nepřenositelný dialekt programovacího jazykaPascal. Překladač sám byl původně naprogramován v jazyce Pastel a dojazyka C ho v roce1987 přepsal Len Tower a Stallman.[14][15] Překladač se stal součástíGNU Projektu jako volně dostupný a volně šiřitelný překladač (teprve později byl význam „free software“ vysvětlován jako „svobodný“). Na projekt dohlíželaFSF (Free Software Foundation).[16]
V roce1991 dosáhl kompilátor GCC stability ve verzi 1.x, ale použitáarchitektura bránila implementaci mnoha požadovaným vylepšením. Proto FSF zahájila práce na GCC verze 2.x.
Protože bylo GCC free software, existovaliprogramátoři, kteří chtěli pracovat i na jiných rozhraních, než jen pro jazyk C, avšak práce pod vedením FSF pokračovaly nepružně a mnoho programátorů bylofrustrováno nemožností dosáhnout ze strany FSF akceptace jejichzměn a záplat. Vše zašlo tak daleko, žeEric S. Raymond ve své esejiKatedrála a tržiště označil vývoj pod taktovkou FSF za klasický příklad modelukatedrála (i přes to, že dle filozofie free software mělo jít o modeltržiště). Vzniklo mnohoforkůzdrojových kódů, které se však ukázaly jako neefektivní.
V roce1994 byl GCC akceptován jako implicitní překladač pro4.4BSD.
V roce1997 vytvořila skupina vývojářů projektEGCS (Enhanced GNU Compiler System), který spojil několik experimentálních forků (větví) do jedné linie vývoje, která byla oddělena od GCC. Základem se stal kód vycházející z verze mezi vydáním GCC 2.7 a 2.81. Ve sloučeném kódu byl kód z forků g77 (Fortran), PGCC (Pentium-optimized GCC), mnohoC++ vylepšení a podpora mnoha novýchplatforem aoperačních systémů.[17][18]
Vývoj EGCS se ukázal být tak velmi vitální, že FSF oficiálně zastavila práce na verzi 2.x, „posvětila“ EGCS jako oficiální verzi GCC a ustanovila EGCS správce dalším vedením projektu v dubnu1999. Projekt obratem adoptoval pro vývoj model „tržiště“ a odvrátil se od modelu „katedrály“. Projekty se definitivně sjednotily vydáním GCC verze 2.95 v červenci roku 1999.
GCC je nyní spravováno různými skupinami programátorů z celého světa. Překladač byl portován na více různýchprocesorů a operačních systémů, než kterýkoliv jinýsoftwarový překladač.[19]
Od uvolnění verze 4.1.1, standardní verze kompilátoru obsahuje podporu těchto jazyků:
Kompilátor jazykaVala část kompilace provádí s využitím GCC. Kompilace jazykaGo se nejčastěji provádí s gccgo, což je nestandardní verze GCC.
Uživatel spustí řídicí program s názvem gcc, který interpretuje argumenty a rozhodne, jaký jazyk má být pro který vstupní soubor kompilátorem použit. Nejdříve vstupní zdrojový kód zpracujepreprocesor. Výsledek je předánpřekladači a výstupem je program vjazyce symbolických adres. Poté je spuštěnlinker, který vytvoří výsledné soubory sestrojovým kódem.
Pro každý z jazyků, které GCC podporuje, je v k dispozici frontend („přední část“) překladače, jehož vstupem je zdrojový kód a výstupem mezikód v jazyce GIMPLE, který je nezávislý na jazyce vstupního kódu. Tento mezikód dále zpracovává backend.
Překladač provede optimalizace a na kód jsou aplikovány statické metody analýzy kódu (např. FORTIFY_SOURCE, která se snaží odhalit možnápřetečení na zásobníku). Tyto operace se dělí na architektuře nezávislé (GIMPLE) a na architektuře závislé (RTL). Finální kód v jazyce symbolických adres je vytvořen za použití na architektuře závislých vzorů, původně založených naalgoritmu Jacka Davidsona a Chrise Frasera.
GCC je napsán primárně vjazyce C s výjimkou některých částí frontendu pro jazykAda. Distribuce obsahuje standardní knihovny proAdu,C aJavu. Tyto knihovny jsou většinou psané ve stejných jazycích, pro které jsou určeny.[23] Na některých platformách je distribuována nízkoúrovňová knihovnalibgcc, která je z části napsána ve strojově nezávislém jazyce C a z části vjazyce symbolických adres závislých na cílovémprocesoru.
V tomto článku byly použitypřeklady textů z článkůGNU Compiler Collection na anglické Wikipedii aGNU Compiler Collection na italské Wikipedii.
- ↑ The D Language Front-End Finally Merged Into GCC 9 - Phoronix.www.phoronix.com [online]. [cit. 2018-12-28].Dostupné online.
- ↑ GCC 9 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF).gcc.gnu.org [online]. [cit. 2018-12-28].Dostupné online.
- ↑ gccrs: An alternative compiler for Rust | Rust Blog.blog.rust-lang.org [online]. [cit. 2024-11-07].Dostupné online. (anglicky)
- ↑ GCC Rust Compiler "gccrs" Sees ~900 New Patches Upstreamed For GCC 14.www.phoronix.com [online]. [cit. 2024-10-18].Dostupné online. (anglicky)
- ↑JEŽEK, David. Více než 100 patchů pro Rust v GCC 13.Root.cz [online]. [cit. 2023-02-23].Dostupné online.
- ↑KRČMÁŘ, Petr. Podpora Rustu míří do překladače GCC.Root.cz [online]. [cit. 2023-01-02].Dostupné online.
- ↑PROVEN, Liam. Rust support merged for the forthcoming GCC 13.www.theregister.com [online]. [cit. 2023-01-02].Dostupné online. (anglicky)
- ↑ GCC Rust "gccrs" Code Merged Into Mainline GCC 13.www.phoronix.com [online]. [cit. 2023-01-02].Dostupné online. (anglicky)
- ↑ GCC 13.1 Released With Modula-2 Language Support, More C23/C++23 Features.www.phoronix.com [online]. [cit. 2023-05-09].Dostupné online. (anglicky)
- ↑abFIKAR, Jan. COBOL míří do GCC.Root.cz [online]. [cit. 2024-12-17].Dostupné online.
- ↑FIKAR, Jan. Vyšlo GCC 13.1 s jazykem Modula-2.Root.cz [online]. [cit. 2023-04-29].Dostupné online.
- ↑ GnuCOBOL 3.2.www.abclinuxu.cz [online]. [cit. 2023-07-29].Dostupné online.
- ↑ COBOL a ALGOL 68 v GCC?.www.abclinuxu.cz [online]. [cit. 2025-01-02].Dostupné online.
- ↑STALLMAN, Richard M. GNU Status.GNU's Bulletin. Free Software Foundation, February 1986, roč. 1, čís. 1.Dostupné online [cit. 2006-09-26].
- ↑Tower, Leonard (1987) "GNU C compiler beta test release,"comp.lang.misc USENET newsgroup; see alsohttp://gcc.gnu.org/releases.html#timeline
- ↑Stallman, Richard M. (2001) "Contributors to GCC," inUsing and Porting the GNU Compiler Collection (GCC) for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
- ↑A Brief History of GCC [online].Dostupné online.
- ↑The Short History of GCC development [online].Dostupné online.
- ↑Linux Information Project (LINFO) accessed 2010-04-27
- ↑http://gdcproject.org/ GDC
- ↑ COBOL a ALGOL 68 v GCC?.www.abclinuxu.cz [online]. [cit. 2025-01-02].Dostupné online.
- ↑http://gcc.gnu.org/gcc-4.6/changes.html
- ↑jazyky používající GCC při kompilaci [online]. [cit. 2010-04-13].Dostupné v archivu pořízeném dne 2008-05-27.