GCC

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
GCC
Logo
GCC na příkazové řádce
GCC na příkazové řádce.
Vývojář GNU
Aktuální verze 4.9.1 (16. července 2014[1])
Operační systém multiplatformní
Typ softwaru překladač
Licence GPL
Web gcc.gnu.org

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, Fortran, Ada 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 Mac OS X. Existují také jeho portace pro Microsoft Windows (např. MinGW).

Historie[editovat | editovat zdroj]

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.[2][3] 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).[4]

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ů.[5][6]

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

Jazyky[editovat | editovat zdroj]

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

Kompilátor jazyku Vala část kompilace provádí s využitím GCC. Kompilace jazyku Go se nejčastěji provádí s gccgo, což je nestandardní verze GCC.

Struktura[editovat | editovat zdroj]

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 se 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.[10] 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.

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

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. https://gcc.gnu.org/gcc-4.9/ GCC 4.9 Release Series
  2. STALLMAN, Richard M.. GNU Status. GNU's Bulletin. Free Software Foundation, February 1986, roč. 1, čís. 1. Dostupné online [cit. 2006-09-26].  
  3. Tower, Leonard (1987) "GNU C compiler beta test release," comp.lang.misc USENET newsgroup; see also http://gcc.gnu.org/releases.html#timeline
  4. 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)
  5. A Brief History of GCC [online]. . Dostupné online.  
  6. The Short History of GCC development [online]. . Dostupné online.  
  7. Linux Information Project (LINFO) accessed 2010-04-27
  8. http://gdcproject.org/ GDC
  9. http://gcc.gnu.org/gcc-4.6/changes.html
  10. jazyky používající GCC při kompilaci [online]. . Dostupné online.