Projekt GCC - podstawa GNU

GCC to najpopularniejszy kompilator aplikacji GNU. Niepodzielnie króluje poza platformą Windows, a dzięki stałemu rozwojowi nic nie wskazuje na to, by jego pozycja miała się zmienić.

GCC to najpopularniejszy kompilator aplikacji GNU. Niepodzielnie króluje poza platformą Windows, a dzięki stałemu rozwojowi nic nie wskazuje na to, by jego pozycja miała się zmienić.

Początkowo skrótowa nazwa GCC miała rozwinięcie GNU C Compiler i określała bezpłatny kompilator języka C, udostępniony po raz pierwszy w 1987 r. i przeznaczony do kompilacji "wolnego oprogramowania" tworzonego w ramach projektu GNU (dokładny opis znajduje się w Internecie pod adresemhttp://www.gnu.org/gnu/thegnuproject.html). Podobnie jak ewoluował kompilator GCC, tak również ewoluowało rozwinięcie jego nazwy. Obecnie coraz częściej określa się go jako GNU Compiler Collection, ponieważ projekt GCC zaowocował wieloma różnymi językami programowania (front-end), które są oparte na kompilatorze GCC oraz jego mechanizmach tworzenia kodu i optymalizacji. Zgodnie ze zmodyfikowanymi w 1999 r. założeniami projektu, GCC ma za zadanie zapewnić narzędzia (kompilatory różnych języków), które pozwolą na tworzenie aplikacji GNU, pracujących na różnych architekturach czy w różnych środowiskach systemowych.

Skład komitetu kierującego pracami nad GCC ma obecnie 14 członków, z czego czterech jest związanych z firmą Red Hat, aktywnie angażującą się w rozwój kompilatora.

Spojrzenie wstecz

Pierwszą wersję GCC (kompilatora C) udostępniono w połowie 1987 r. W roku 1991 GCC 1.0 określono jako "w pełni stabilną" i rozpoczęto prace nad drugą wersją kompilatora - już w innej architekturze.

W roku 1997 pojawiła się eksperymentalna wersja kompilatora EGCS (na bazie GCC 2.8), w której zaimplementowano nowe elementy zaburzające w niektórych przypadkach zgodność z poprzednimi wersjami kompilatora. EGCS implementował wiele najnowszych standardów i zawierał m.in. eksperymentalne rozszerzenia GCC (niedostępne w oficjalnej wersji release kompilatora) po to, by jak najszersze grono użytkowników mogło przetestować np. nowe metody optymalizacji. Głównym motorem projektu EGCS była firma Cygnus, przejęta później przez Red Hat. Prowadziła ona tak intensywne prace, że grupa zarządzająca oficjalnym projektem GCC nie nadążała z analizą wszystkich zmian wprowadzanych w kompilatorze. Pojawiły się również rozbieżności co do tego, jakie elementy powinny się znaleźć w ofic-jalnej wersji.

Ostatecznie, w kwietniu 1999 r. Free Software Foundation wstrzymało prace nad kompilatorem, a projekt EGCS stał się oficjalnym projektem GCC. W ten sposób zażegnano groźbę zbytniego "rozgałęzienia" się projektu - sytuacji, w której kilka grup programistów zaczyna pracę nad jednym projektem, ale wyniki ich działań prowadzą do powstania odrębnych wersji produktu.

Kompilator C/C++ w wersji 3.0

Obecnie dostępna, najnowsza wersja GCC 3.0.4 to najpełniejsza implementacja standardów C/C++. Kompilator jest zgodny z pierwszą wersją C (opub-likowaną w 1990 r. - X3.159). Co ciekawe, w GCC można wymusić pełną zgodność z tym standardem (w takim przypadku inne, niestandardowe elementy składni będą odrzucane). Początkowa specyfikacja C zawierała kilka błędów, jednak GCC implementuje tylko poprawioną wersję specyfikacji. W kompilatorze można także włączyć pracę w trybie niestandardowej wersji C - sprzed momentu uchwalenia ofic-jalnego C przez komitet ISO.

GCC ma wiele rozszerzeń standardu, ale wszystkie można wyłączyć na etapie kompilacji. Ze względu na to, że dla języka Objective-C formalny standard nie istnieje, uwzględniono wersję, która jest pochodną większości implementacji tego języka, które pojawiły się na rynku, i z dużą częścią kodu kompilator radzi sobie bez problemów. Sytuacja jest jeszcze bardziej skomplikowana w przypadku C++, tu bowiem większość producentów kompilatorów znacznie rozszerzyła podstawową propozycję języka. GCC oferuje jednak programistom ponad 70 opcji związanych z implementacją składni C++. Można wybrać sposób realizacji wzorców, RTTI i innych zaawansowanych mechanizmów tego języka.

W przypadku języka Fortran, kompilator jest zgodny z ANSI FORTRAN 77 (z kilkoma wyjątkami, usuniętymi w standardzie Fortran 90). To właśnie w tej wersji języka jest napisana większość bibliotek procedur numerycznych, z których tak słynie Fortran. GCC pozwala bez trudu łączyć skompilowane moduły w Fortranie z kodem pisanym w innych językach.

Kompilator, a w zasadzie ta jego część, która generuje kod wykonywalny, w projekcie GCC jest obudowywany różnymi "nakładkami" czy parserami, które analizują konkretne języki programowania. Zintegrowane są moduły dla C, C++, Objective C, Fortran oraz Java. Jako zewnętrzny (częściowo oddzielny) dostępny jest kompilator Pascal. Kompilator G++ (kompilujący kod C++) nie tworzy kodu pośredniego w C, tylko bezpośrednio generuje kod maszynowy.

GCC można używać zarówno jako cross compilator (tzn. narzędzie, które na danej platformie wygeneruje kod działający na zupełnie innej architekturze), jak i można przenosić go tak, by działał na danym systemie operacyjnym lub procesorze. Skrócona lista procesorów i platform obsługiwanych przez ten kompilator obejmuje: x86, HP-UX, PowerPC, Alpha, XScale, AVR, AM33, Motorola 68HC11, picoJava Sun czy ostatnio S/390 IBM.

Nie tylko kompilator

Oprócz kompilatora, do stworzenia pliku wykonywalnego czy biblioteki potrzebne są inne narzędzia z pakietu binutils. Do najważniejszych z nich należą:

  • ld - linker, który łączy biblioteki i skompilowany kod w plik wykonalny lub tworzy bibliotekę

  • as - assembler GNU, dostępne są wersje dla niemal każdego istniejącego procesora

  • objcopy - kopiuje i przekształca pliki obiektów generowane przez kompilator

  • objdump - wyświetla informacje o plikach obiektów

  • gprof - pozwala analizować informacje o profilowaniu kodu, np. przy badaniu wydajności

  • windres - kompilator do plików zasobów Microsoft Windows

  • W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

    TOP 200