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.
Ciekawe czy będzie w repozytorium ubuntu 13.04.
Już w Precise jest (12.04) od wczoraj chyba, więc w 13.04 na pewno będzie.
[…] Mesa 10.1, Unity 7.2.0, Python 3.4, Upstart 1.12.1, GRUB 2.0, Firefox 28.0, Thunderbird 24.4.0, GCC 4.8, CUPS 1.6.2, GTK+ 3.10.8, LibreOffice 4.2.3, Nautilus 3.10.1, Ubuntu Software Center 13.10.0, Gedit […]
[…] projektu LLVM ogłosili, że Clang otrzymał pełną obsługę standardu C++11. Do tej pory jedynie GCC 4.8 posiadało pełną implementację specyfikacji języka C++11. W czerwcu tego roku powinniśmy […]
C GB Spender liked this on Facebook.
Michał Olber liked this on Facebook.
[…] Rzeczy ważkie jednak trafiają do Slackware w tempie odpowiednim, a nawet zbyt szybkim, jak wyraził swoje podejrzenia jeden z blogerów po tym, gdy w połowie kwietnia trafił tam kompilator GCC 4.8. […]
[…] na jądrze Linux 3.13.6, X.Org Server 1.15.0, Mesa 10.1, Python 3.4, Upstart 1.12.1, GRUB 2.0, GCC 4.8, CUPS 1.6.2. Prócz tego dodano sporo nowości: Puppet 3, Xen 4.4, Ceph 0.79, QEMU 2.0.0, Open […]