GCC 4.8.0

GCC 4.8.0

    przez -
    8 450
    Udostępnione zostały źródła finalnej wersji zestawu kompilatorów GCC 4.8. Poza lepszym wsparciem nowszych standardów języków i nowymi i ulepszonymi algorytmami GCC przeszło poważną zmianę natury technicznej – wymaga kompilatora C++. GCC początkowo rozwijany był jako kompilator języka C, obecnie jest zbiorem kompilatorów wielu języków, m.in. C, C++, Fortran, Ada, Objective-C pod różne procesory: x86, AVR, ARM, MIPS, PPC, SPARC. Z wersji na wersji dodawane jest wsparcie dla nowszych standardów języków, wsparcie dla nowszych technologii procesorów oraz ulepszane są algorytmy optymalizacji kodu.

    GCC 4.8 używa teraz agresywniejszych metod optymalizacji kodu, co może spowodować niekompatybilność kodu pisanego pod stare metody optymalizacji, używające “niezdefiniowanych zachowań” (których C++ ma sporo, optymalizacje te można wyłączyć poprzez flagę -fno-aggressive-loop-optimizations), kompilator ostrzega w przypadku wystąpienia takiego konfliktu. Dla przyspieszenia kompilacji kodu w trybie debugowania dodano flagę -Og, która zapewnia wystarczające optymalizacje niespowalniające zbytnio czasu kompilacji.

    Rodzina C otrzymała Clang-owy styl pokazywania błędów, zamiast standardowego numerku linii i kolumny, może tak jak Clang wyświetlić linię i podkreślić znakiem ^ miejsce, w którym zaczyna się błąd (-fno-diagnostics-show-caret wyłącza te komunikaty).

    Kompilator C++ otrzymał kolejne wsparcia standardu C++11 oraz dostał wstępną nazwę roboczą dla kolejnego standardu języka: C++0y (-std=c++0y). Dodano słowo kluczowe thread_local, obsługę atrybutowania funkcji (np. [[noreturn]] void foo()) oraz dziedziczenie konstruktorów.

    Poprawek i ulepszeń doczekała się również między innymi obsługa dynamicznie rozwijającej się architektury ARM. Poprawiono generowanie kodu dla operacji wektorowych. Ulepszono kompilator kodu dla popularnych platform Cortex-A7 i Cortex-A15, który lepiej używa instrukcji działań wektorowych i specyficznych dla danych modeli, co pozwoli lepiej wykorzystać potencjał tych procesorów.

    Zmiany nie ominęły także rodziny IA-32 (x86-32)  i x86-64. Dodano nowe technologie Intela do zarządzania pamięcią (Intel RTM i HLE, zapewniające transakcyjną obsługę pamięci), dodano obsługę zestawów instrukcji FXSR, XSAVE, XSAVEOPT oraz wsparcie (profile kodu) dla procesorów AMD Steamroller i Jaguar.

    Pojawiło się wykrywanie architektury i typu procesora w czasie uruchomienia, programista może teraz pisać kod pod różne procesory jednocześnie, przykładowo może napisać wiele implementacji jednej funkcji dla różnych procesorów, odpowiednia funkcja zostanie wybrana w czasie uruchomienia, co pozwoli wykorzystać w pełni możliwości konkretnych architektur bez utraty przenośności kodu i skompilowanej aplikacji.

    Podobne artykuły

    GNU - logo

    przez -
    1 587