GCC
GNU Compiler Collection (zkráceně GCC) je sada překladačů vytvořených v rámci projektu GNU. Původně se jednalo pouze o překladač programovacího jazyka C (a zkratka tehdy znamenala GNU 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], Fortran, Ada, Modula-2[8][9], Cobol[10] a dalších.
Vývojář | Projekt GNU |
---|---|
První vydání | 23. května 1987 |
Aktuální verze | 14.2 (1. srpna 2024) |
Operační systém | GNU/Linux BSD macOS Microsoft Windows UN*X MINIX 3 |
Platforma | multiplatformní software |
Vyvíjeno v | C++ a C |
Typ softwaru | optimalizující překladač, GNU balíček a svobodný software |
Licence | GPLv3 GNU Lesser General Public License, version 2.1 |
Web | gcc |
Některá data mohou pocházet z datové položky. |
Původním autorem GCC je Richard Stallman, který ho roku 1987 vytvořil jako jednu ze základních částí svého projektu GNU; dnes projekt zastřešuje nadace FSF. GCC je šířen pod licencí GNU GPL a stal se již de facto standardním překladačem v open source operačních systémech unixového typu, ale používá se i v některých komerčních operačních systémech, např. na macOS.[zdroj?] Existují také jeho porty pro Microsoft Windows (např. MinGW).
Historie
editovatRichard Stallman začal na GCC pracovat v roce 1985. Rozšířil stávající překladač programovacího jazyka s názvem Pastel, což byl rozšiřující nepřenositelný dialekt programovacího jazyka Pascal. Překladač sám byl původně naprogramován v jazyce Pastel a do jazyka C ho v roce 1987 přepsal Len Tower a Stallman.[11][12] 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ížela FSF (Free Software Foundation).[13]
V roce 1991 dosáhl kompilátor GCC stability ve verzi 1.x, ale použitá architektura bránila implementaci mnoha požadovaným vylepšení. Proto FSF zahájila práce na GCC verze 2.x.
Protože bylo GCC free software, existovali programá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ů bylo frustrováno nemožností dosáhnout ze strany FSF akceptace jejich změn a záplat. Vše zašlo tak daleko, že Eric S. Raymond ve své eseji Katedrála a tržiště označil vývoj pod taktovkou FSF za klasický příklad modelu katedrála (i přes to, že dle filozofie free software mělo jít o model tržiště). Vzniklo mnoho forků zdrojových kódů, které se však ukázaly jako neefektivní.
V roce 1994 byl GCC akceptován jako implicitní překladač pro 4.4BSD.
V roce 1997 vytvořila skupina vývojářů projekt EGCS (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), mnoho C++ vylepšení a podpora mnoha nových platforem a operačních systémů.[14][15]
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 dubnu 1999. 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ých procesorů a operačních systémů, než kterýkoliv jiný softwarový překladač.[16]
Jazyky
editovatOd uvolnění verze 4.1.1, standardní verze kompilátoru obsahuje podporu těchto jazyků:
- Ada (GCC Ada, také známý jako GNAT)
- jazyk C
- C++ (GCC pro C++ nebo G++)
- jazyk D[17] (GCC D, také jako GDC)
- Fortran (GCC Fortran nebo GFortran)
- Go[18]
- Java (GCC Java nebo GCJ)
- Objective-C
- Objective-C++
Kompilátor jazyka Vala část kompilace provádí s využitím GCC. Kompilace jazyka Go se nejčastěji provádí s gccgo, což je nestandardní verze GCC.
Struktura
editovatUž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 zpracuje preprocesor. Výsledek je předán překladači a výstupem je program v jazyce symbolických adres. Poté je spuštěn linker, který vytvoří výsledné soubory se strojový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 na algoritmu Jacka Davidsona a Chrise Frasera.
GCC je napsán primárně v jazyce C s výjimkou některých částí frontendu pro jazyk Ada. Distribuce obsahuje standardní knihovny pro Adu, C a Javu. Tyto knihovny jsou většinou psané ve stejných jazycích, pro které jsou určeny.[19] Na některých platformách je distribuována nízkoúrovňová knihovna libgcc, která je z části napsána ve strojově nezávislém jazyce C a z části v jazyce symbolických adres závislých na cílovém procesoru.
Odkazy
editovatReference
editovatV tomto článku byly použity překlady textů z článků GNU Compiler Collection na anglické Wikipedii a GNU 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.
- ↑ 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)
- ↑ FIKAR, Jan. Vyšlo GCC 13.1 s jazykem Modula-2. Root.cz [online]. [cit. 2023-04-29]. Dostupné online.
- ↑ 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)
- ↑ GnuCOBOL 3.2. www.abclinuxu.cz [online]. [cit. 2023-07-29]. 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 also http://gcc.gnu.org/releases.html#timeline
- ↑ Stallman, Richard M. (2001) "Contributors to GCC," in Using 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
- ↑ 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.
Související články
editovatExterní odkazy
editovat- Obrázky, zvuky či videa k tématu GCC na Wikimedia Commons
- (anglicky) gcc.gnu.org – domovská stránka GCC
- (anglicky) GCC Rust Compiler "gccrs" Sees ~900 New Patches Upstreamed For GCC 14 – Phoronix.com