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, Rust, Fortran, Ada, Modula-2, Cobol a dalších.

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. Existují také jeho porty pro Microsoft Windows (např. MinGW).

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

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

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

Jazyky 
Od 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 (GCC D, také jako GDC)
 Fortran (GCC Fortran nebo GFortran)
 Go
 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 
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. 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

Reference

Související články 
 LLVM

Externí odkazy 
 
  gcc.gnu.org – domovská stránka GCC

Překladače
GNU
Multiplatformní software
Unixové programátorské nástroje
Svobodný software naprogramovaný v C++