GNU Compiler Collection
Z Wikipedii
| GNU Compiler Collection | |
![]() |
|
| Rodzaj | Kompilator |
| Aktualna wersja stabilna | 4.3.2 / 27 sierpnia 2008; 135 dni temu |
| Producent | The GNU Project |
| Licencja | GPL |
| http://gcc.gnu.org | |
GCC (ang. GNU Compiler Collection) - zestaw kompilatorów do różnych języków programowania rozwijany w ramach projektu GNU i udostępniany na licencji GPL oraz LGPL.
GCC jest podstawowym kompilatorem w systemach uniksopodobnych, przy czym szczególnie ważną rolę odgrywa w procesie budowy jądra Linux.
Spis treści |
[edytuj] Historia
Początkowo skrótowiec GCC oznaczał GNU C Compiler, ponieważ był to kompilator wyłącznie do języka C.
Pierwsza wersja kompilatora o numerze 1.0 została opublikowana 23 maja 1987 przez Richarda Stallmana.
Znaczącym wydarzeniem w historii rozwoju GCC było wydanie wersji 2.95 w lipcu 1999 - pierwszej po zintegrowaniu z projektem EGCS.
[edytuj] Kompilatory dostępne w GCC
W skład GCC wchodzą kompilatory następujących języków programowania:
- C - gcc
- C++ - g++
- Objective-C - gobjc
- Fortran - g77 oraz nowa implementacja Fortrana 95 o nazwie gfortran
- Java - gcj
- Ada - gnat
a także eksperymentalnie
Istnieje również frontend języka D dla GCC - gdc[1].
[edytuj] Środowisko pracy
Kompilatory wchodzące w skład GCC mogą być uruchamiane na wielu różnych platformach sprzętowych i systemowych. Za ich pomocą można generować kod wynikowy przeznaczony dla różnych procesorów i systemów operacyjnych oraz dokonywać tzw. kompilacji skrośnej.
Lista kilku najważniejszych architektur sprzętowych, na których uruchomiono GCC:
- x86
- x86-64
- IA-64
- Alpha
- ARM
- Motorola M68000 i wiele innych układów tej firmy
- MIPS
- PowerPC
- SPARC/SPARC64
Poniżej zestawiono systemy operacyjne umożliwiające uruchomienie GCC:
Kompilatory GCC (w szczególności kompilator C) służą do kompilacji wielu jąder systemów operacyjnych, takich jak Linux, Hurd, FreeBSD oraz wielu systemów eksperymentalnych.
[edytuj] Budowa i działanie GCC
Program gcc (wywoływany podczas kompilacji np. z linii poleceń) odpowiada za przetworzenie argumentów, uruchomienie odpowiedniego kompilatora właściwego dla języka programowania w jakim zakodowano plik z kodem źródłowym, wykonanie programu asemblera dla tak otrzymanego wyniku oraz uruchomienie konsolidatora (linkera) w celu uzyskania pliku wykonywalnego.
Przykładowo dla pliku napisanego w C zostaną wykonane następujące programy: preprocesor cpp, kompilator cc1, asembler as oraz konsolidator collect2 (dostępny zazwyczaj jako program ld). Należy przy tym zwrócić uwagę, iż program as wchodzi w skład pakietu oprogramowania binutils. Również pliki nagłówkowe biblioteki standardowej języka C nie są częścią GCC.
Kompilator GCC składa się z 3 głównych części: front endu, middle endu oraz back endu.
[edytuj] front end
Dla każdego języka programowania obsługiwanego przez GCC istnieje oddzielny front end. Dzięki temu względnie łatwo można dodawać kompilatory do nowych języków. Plik z kodem źródłowym poddawany jest procesowi analizy składniowej za pomocą ręcznie zakodowanego parsera. W efekcie tego działania powstaje reprezentacja programu zwana AST (ang. abstract syntax tree), która jest następnie przetwarzana do postaci w pełni niezależnej od pierwotnie użytego języka programowania GENERIC lub GIMPLE.
[edytuj] middle end
Na tym etapie kompilator dokonuje optymalizacji kodu polegającej na:
- usunięciu "martwego" kodu, który się nigdy nie wykona
- obliczeniu stałych wartości i zastąpieniu nimi wyrażeń zawartych w programie
- wyeliminowaniu kodu nadmiarowego
- wykonaniu innych optymalizacji
Reprezentacja kodu zamieniana jest z postaci GIMPLE do innej zwanej RTL (ang. Register Transfer Language).
[edytuj] back end
Ta część GCC odpowiada za wygenerowanie kodu asemblera przeznaczonego dla konkretnej architektury sprzętowej, a z niego kodu obiektowego. Ponieważ na tym etapie kompilator ma wiele informacji na temat docelowej platformy może dokonać kolejnych optymalizacji kodu np. uwzględniając budowę procesora, zestaw jego rozkazów czy specyficzne rozszerzenia.
[edytuj] Rozszerzenia języka C
GCC zawiera wiele rozszerzeń ponad to, co określają standardy ANSI i ISO.
Są to m.in.:
- zmienne etykietowe
- etykiety lokalne
- traktowanie dowolnych fragmentów kodu (statement) jako wyrażeń (expression)
- zagnieżdżane definicje funkcji
- heksadecymalne deklarowanie zmiennych zmiennoprzecinkowych
- makra o zmiennej liczbie argumentów
- konstrukcja case z przedziałami
[edytuj] Zmienne etykietowe
# include <stdio.h> void foo (int nr) { static void * labels [] = {&&label0, &&label1}; goto *labels [nr]; label0: printf("Code 0\n"); return; label1: printf("Code 1\n"); return; } int main() { foo(0); foo(1); return 0; }
[edytuj] Inline Assembler w C/C++
GCC umożliwia użycie asemblera w kodzie. Nie są to jednak pojedyncze instrukcje, tylko całe bloki razem ze zdefiniowanymi specjalnym systemem interfejsem między asemblerem a C/C++. Dzięki temu GCC może o wiele lepiej optymalizować kod.
W poniższym przykładzie program drukuje najpierw i=1, później i=2. GCC sam dokonuje alokacji rejestrów oraz przeniesienia między rejestrami a zmienną i na stosie.
# include <stdio.h> int main() { int i=0; asm("movl $1, %0" : "=g" (i)); printf("i = %d\n", i); asm("addl $1, %0" : "+g" (i)); printf("i = %d\n", i); return 0; }
Przypisy
[edytuj] Linki zewnętrzne
- Strona domowa GCC
- Wiki GCC
- Port GCC na system Windows
- From Source to Binary: The Inner Workings of GCC (ang.)
|
||||||||||||||||
| Prokuratura czeka na ekspertyzę w sprawie "dopalaczy" |
Łódzka prokuratura zleciła biegłym zbadanie próbek tzw. dopalaczy. Jeżeli wyniki badań potwierdzą, że w ich składzie znajdują się substancje odurzające lub psychotropowe możliwe będzie ściganie dystrybutora tych używek. |
| Prokurator: Nie zgubiłem akt Pruszkowa. Ukradli mi |
Pendrive z prokuratorskimi dokumentami został skradziony, a nie zgubiony. Jak nieoficjalnie dowiedział się reporter radia TOK FM tak przynajmniej twierdzi prokurator, do którego należał nośnik danych. |
| SLD chce "białej księgi" w sprawie polityki gazowej Polski |
SLD chce, by powstała tzw. biała księga w sprawie polityki gazowej Polski. |
| Suwalszczyzna: zawieje i zamiecie przeszkodziły uczniom w dotarciu do szkół |
Z powodu śnieżyc wiele dzieci na Suwalszczyźnie nie dotarło w piątek do szkół. Problemy z dowozem miały autobusy PKS i gimbusy. |
| Sejm: PO i PiS przeciw nowelizacji ustawy o CBA |
Sejm odrzucił w pierwszym czytaniu projekt nowelizacji ustawy o Centralnym Biurze Antykorupcyjnym. Według projektu nadzór nad Biurem miałby objąć minister odpowiedzialny za sprawy wewnętrzne, a nie - jak dotychczas - premier. |
| Wszystkie gesty dyrektora Pardy |
Do zdjęcia Radosława Pardy, na którym prezentuje faszystowski gest dotarł „Super Express". Parda, od niedawna wicedyrektor ośrodka administracji w TVP, tłumaczy - To gest przedwojennej prawicy i antykomunistów. |
| Dziś "majtkowy" proces Dody z "Super Expressem" |
Dziś o 12.30 kolejna odsłona procesu Doda kontra "Super Express". Piosenkarka zarzuciła dziennikowi, że ten przy użyciu programu graficznego wyciął jej majtki i opublikował poprawione zdjęcie. |
| Stasiak: Zróbmy sobie sami gazoport |
Szef Biura Bezpieczeństwa Narodowego uważa, dla zapewnienia bezpieczeństwa energetycznego Polski niezbędna jest budowa gazoportu. Władysław Stasiak, który był gościem Sygnałów Dnia jest zdania, że Sejm powinien przyjąć specjalną ustawę, która pozwoli na przyspieszenie budowy terminala. |
| Prezydent wbija klin między Tuska i Pawlaka |
Problemy w koalicji. PO przekłada głosowanie nad prezydenckim wetem do ustawy o Krajowej Szkole Sądownictwa i Prokuratury, bo PSL bierze stronę Lecha Kaczyńskiego |
| Mniejszy klub PiS |
Poseł Andrzej Walkowiak opuścił klub PiS i przeszedł do założonego przez b. posłów PiS koła Polska XXI. |


