Projekt GCC - podstawa GNU

Natywny kompilator Javy

Wraz z wersją 3, częścią GCC jest kompilator GCJ (specjalna wersja kompilatora GNU Javy). Kompiluje ona kod źródłowy w Javie zarówno do byte- code, jak i do kodu natywnego dla danej platformy. Zawiera jednocześnie narzędzie, które przekształca kod bytecode'ów Javy, skompilowanych np. przy użyciu innego kompilatora, na kod maszynowy danego procesora. W ten sposób można niemal wyeliminować konieczność interpretacji kodu Javy. Oczywiście oprócz tego GCJ zawiera specjalny interpreter bytecode'ów.

GCJ można skonfigurować także w taki sposób, by działał jako cross compilator i tworzył kod na inną platformę niż aktualnie wykorzystywana. Ta właściwość znajduje zastosowanie w niektórych projektach dotyczących opracowywania rozwiązań wbudowanych (embedded). Warto podkreślić, że np. wykorzystując serwer aplikacyjny Tomcat można kompilować strony JSP przy użyciu właśnie GCJ i uruchamiać je nie za pośrednictwem interpretera, lecz jako kod maszynowy właściwy dla danej platformy.

Jedną z części pakietu jest program gcjh, który dla zadanego pliku .class Javy wygeneruje odpowiednie nagłówki w C++. Pozwala to łatwo łączyć kod C++ z kodem w Javie.

Wraz z kompilatorem jest dostępna biblioteka libgcj, reprezentująca duży podzbiór rozwiązań Java Development Kit. Obsługiwana jest większość API z Java 2, w tym kolekcje, klasy do obsługi sieci itp. Brakuje głównie fragmentów związanych z interfejsem użytkownika, np. biblioteki AWT. Dopiero niedawno Richard Stallman, założyciel Free Software Foundation, zmienił sposób licencjonowania pewnych bibliotek powstających w ramach innych projektów GNU, tak by mogły być dołączone do libgcj. Co ważniejsze, libgcj może dynamicznie ładować i interpretować pliki klas. W ten sposób mogą działać aplikacje, gdzie część kodu jest interpretowana, a część wykonywana po skompilowaniu.

Debugger GDB

Projekt GCC - podstawa GNU

Schemat działania Supra MDC Server

Oprócz kompilatorów opracowano także debugger, który pozwala śledzić każdy program skompilowany przy użyciu GCC. Co więcej, w przypadku łączenia np. Fortranu, C++ i Javy można śledzić całe rozwiązanie, przechodząc między częściami kodu napisanymi w różnych językach. Podobnie jak GCC, także GDB działa na każdej platformie. Debugger planowano w taki sposób, by mógł śledzić aplikacje uruchamiane lokalnie i zdalnie.

Red Hat oferuje (jako część płatnego pakietu GnuPro) narzędzie o nazwie Insight, które przypomina debuggery dostępne dla Windows, gdzie w łatwym do obsługi oknie można obserwować kod źródłowy, podglądać zmienne bądź szybko ustawiać pułapki warunkowe. Wszystkie operacje wykonywane w Insight przekładają się na ciąg poleceń przekazywanych do GDB, pracującego wyłącznie w trybie liniowym.

Biblioteki

Jednym z największych źródeł problemów w języku C++ są biblioteki. Niemal każdy producent kompilatora dodawał "częściowo" standardowy zestaw bibliotek. I chociaż możliwe było w takim przypadku kompilowanie kodu z wykorzystaniem różnych narzędzi, to często przenoszenie odwołań do bibliotek wymagało używania nieco innego zestawu funkcji czy wręcz pisania "funkcji pośrednich". Duża część projektów open source miała w kodzie instrukcje warunkowe preprocesora, które w zależności od wykorzystywanego kompilatora korzystały z konkretnego zestawu funkcji standardowych.

Jednym z projektów, który ma na celu implementację biblioteki C++ zgodnej ze standardem ISO 14882, jest libstdc++-v3. W ten sposób środowisko C++ otrzyma przenośny zestaw narzędzi, procedur i klas (obsługa dynamicznych tablic, łańcuchów i strumieniowych funkcji I/O). Jednak nadal pozostaje kwestia zgodności ze starszymi bibliotekami. Co więcej, część starszych bibliotek wymaga np. specyficznej implementacji wzorców. Aby tego typu kod mógł być kompilowany, GCC udostępnia wiele opcji włączających zgodność z danym "standardem" lub raczej jego niestandardową implementacją. W ten sposób za pomocą jednego narzędzia można skompilować niemal każdy kod i wykorzystać większość dostępnych bibliotek.

Upowszechnienie standardowej biblioteki C++ może jednak uwolnić programistów od uciążliwości warunkowych instrukcji preprocesora, dołączających do kompilacji fragmenty kodu. Twórcy tej biblioteki zapowiadają, że będzie ona mogła być kompilowana za pomocą dowolnego kompilatora zgodnego ze standardem ISO, jednak będzie optymalizowana pod GCC. Najnowsza, stabilna wersja libstdc++ to 3.1 z 1 maja br.


TOP 200