GNU Compiler Collection
Z Wikipedii
| GNU Compiler Collection | |
![]() |
|
| Rodzaj | Kompilator |
| Aktualna wersja stabilna | 4.3.2 / 27 sierpnia 2008; 40 dni temu |
| Producent | The GNU Project |
| Licencja | GPL |
| http://gcc.gnu.org | |
GCC (ang. GNU Compiler Collection) to 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 Linuksa. 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 roku przez Richarda Stallmana. Znaczącym wydarzeniem w historii rozwoju GCC było wydanie wersji 2.95 w lipcu 1999 roku - pierwszej po zintegrowaniu z projektem EGCS.
Spis treści |
[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 ( strona projektu )
[edytuj] Środowisko pracy
Kompilatory wchodzące w skład GCC mogą być uruchamiane na wielu różnych platformach sprzętowych jak 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. Poniżej znajduje się 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; }
[edytuj] Linki zewnętrzne
- Strona domowa GCC
- Wiki GCC
- Port GCC na system Windows
- From Source to Binary: The Inner Workings of GCC (ang.)
| Historia | ||
| Licencje | ||
| Programy |
GNU (warianty) · GNU/Linux · Hurd · GNOME · Bash · GNU Emacs · GCC · GNU C Library · Coreutils · Autotools (GNU build system) · GNU Debugger · GNU Binutils · GNU Scientific Library · GRUB · Gnash · IceWeasel
|
|
| Postacie |
| Związkowa antyreklama szpitali spółek |
„Dostawka na szpitalnym korytarzu z 70-procentowym rabatem” - to wizja ochrony zdrowia w biuletynie „Solidarności”. Ma się urzeczywistnić po zamianie szpitali w spółki. |
| Październikowy zryw ustawowy |
Nadzwyczajna mobilizacja w szeregach PO-PSL. Do końca października Sejm ma uchwalić ponad 120 ustaw |
| Kania pozywa Dochnala |
Sąd Rejonowy w Mysłowicach przesłucha lobbystę Marka Dochnala w procesie, jaki za zniesławienie wytoczyła mu dziennikarka Dorota Kania. |
| Pierwsze czytanie, Ewangelia, drugie czytanie. I pod prąd |
Od niedzieli 253 hierarchów Kościoła katolickiego zastanawia się w Rzymie, jak przybliżyć Biblię katolikom. 59-letni metropolita poznański abp Stanisław Gądecki chce zaproponować zmiany w przebiegu mszy świętej |
| Każdy daje 10 zł na TVP i Polskie Radio |
Publiczna opłata licencyjna pobierana co miesiąc od każdego Polaka - to propozycja stowarzyszeń twórczych na nowy rodzaj abonamentu radiowo-telewizyjnego |
| B. prezydenta Opola nie przyjęto do aresztu, bo się spóźnił |
Skazanego za korupcję byłego prezydenta Opola Leszka Pogana nie przyjęto w poniedziałek do aresztu, gdzie stawił się, by odbyć karę więzienia. Pogan spóźnił się około dwóch godzin. |
| Pogan ugrał jeszcze jedną noc |
Leszek Pogan noc z poniedziałku na wtorek miał spędzić w więzieniu. Ale został odesłany do domu, bo gdy pojawił się na miejscu, nie pracowała już administracja. - Muszę znów przyjechać jutro - skomentował i wsiadł do taksówki. |
| Brutalne zabójstwo 16-latki. Policja zatrzymała podejrzanego |
Policjanci ze specjalnej grupy powołanej przez komendanta wojewódzkiego Policji we Wrocławiu zatrzymali mężczyznę podejrzanego o zabójstwo 16-letniej gimnazjalistki, do którego doszło pod koniec września br. we Wrocławiu. 27-latkowi grozi kara dożywotniego więzienia. |
| Dyrektor ośrodka rehabilitacji oskarżony o molestowanie pracownicy |
Prokuratura rejonowa w Prudniku oskarżyła o molestowanie seksualne pracownicy dyrektora ośrodka rehabilitacji w Racławicach Śląskich. Akt oskarżenia trafił do sądu - poinformowała rzecznik opolskiej prokuratury okręgowej, Lidia Sieradzka. |
| Lekarka "Janosikowa" nie przyznaje się do winy |
Krakowska lekarka, która leczyła bezdomnych i została oskarżona o wyłudzenie pieniędzy z kasy chorych, przed sądem nie przyznała się do winy. W poniedziałek złożyła wyjaśnienia. |


