GCC

Sada překladačů
Tento článek je o softwaru. O mezinárodní organizaci pojednává článek Rada pro spolupráci arabských států v Zálivu.

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.

GCC
Logo
VývojářProjekt GNU
První vydání23. května 1987
Aktuální verze14.2 (1. srpna 2024)
Operační systémGNU/Linux
BSD
macOS
Microsoft Windows
UN*X
MINIX 3
Platformamultiplatformní software
Vyvíjeno vC++ a C
Typ softwaruoptimalizující překladač, GNU balíček a svobodný software
LicenceGPLv3
GNU Lesser General Public License, version 2.1
Webgcc.gnu.org
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

editovat

Richard 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]

Od uvolnění verze 4.1.1, standardní verze kompilátoru obsahuje podporu těchto jazyků:

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

editovat

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

Reference

editovat

V 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.

  1. The D Language Front-End Finally Merged Into GCC 9 - Phoronix. www.phoronix.com [online]. [cit. 2018-12-28]. Dostupné online. 
  2. 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. 
  3. GCC Rust Compiler "gccrs" Sees ~900 New Patches Upstreamed For GCC 14. www.phoronix.com [online]. [cit. 2024-10-18]. Dostupné online. (anglicky) 
  4. JEŽEK, David. Více než 100 patchů pro Rust v GCC 13. Root.cz [online]. [cit. 2023-02-23]. Dostupné online. 
  5. KRČMÁŘ, Petr. Podpora Rustu míří do překladače GCC. Root.cz [online]. [cit. 2023-01-02]. Dostupné online. 
  6. PROVEN, Liam. Rust support merged for the forthcoming GCC 13. www.theregister.com [online]. [cit. 2023-01-02]. Dostupné online. (anglicky) 
  7. GCC Rust "gccrs" Code Merged Into Mainline GCC 13. www.phoronix.com [online]. [cit. 2023-01-02]. Dostupné online. (anglicky) 
  8. FIKAR, Jan. Vyšlo GCC 13.1 s jazykem Modula-2. Root.cz [online]. [cit. 2023-04-29]. Dostupné online. 
  9. 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) 
  10. GnuCOBOL 3.2. www.abclinuxu.cz [online]. [cit. 2023-07-29]. Dostupné online. 
  11. STALLMAN, Richard M. GNU Status. GNU's Bulletin. Free Software Foundation, February 1986, roč. 1, čís. 1. Dostupné online [cit. 2006-09-26]. 
  12. Tower, Leonard (1987) "GNU C compiler beta test release," comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline
  13. 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)
  14. A Brief History of GCC [online]. Dostupné online. 
  15. The Short History of GCC development [online]. Dostupné online. 
  16. Linux Information Project (LINFO) accessed 2010-04-27
  17. http://gdcproject.org/ GDC
  18. http://gcc.gnu.org/gcc-4.6/changes.html
  19. 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

editovat

Externí odkazy

editovat