Wydanie zestawu kompilatorów GCC 13

Po roku rozwoju wydano darmowy pakiet kompilatorów GCC 13.1, pierwsze znaczące wydanie w nowej gałęzi GCC 13.x. Zgodnie z nowym schematem numeracji wydań, wersja 13.0 była używana podczas opracowywania, a na krótko przed wydaniem GCC 13.1 gałąź GCC 14.0 została już rozwidlona, ​​z której zostanie utworzone kolejne znaczące wydanie GCC 14.1.

Główne zmiany:

  • GCC przyjęło nakładkę do budowania programów w języku programowania Modula-2. Obsługuje kod budowlany zgodny z dialektami PIM2, PIM3 i PIM4, a także akceptowanym standardem ISO dla tego języka.
  • Do drzewa źródeł GCC dodano frontend z implementacją kompilatora języka Rust przygotowany przez projekt gccrs (GCC Rust). W bieżącym widoku forntend jest oznaczony jako eksperymentalny i domyślnie wyłączony. Gdy frontend będzie gotowy (oczekiwany w następnym wydaniu), standardowy zestaw narzędzi GCC może być używany do kompilowania programów Rusta bez konieczności instalowania kompilatora rustc zbudowanego przy użyciu rozwiązań LLVM.
  • Link-in-Step Optimization (LTO) dodaje obsługę serwera zadań (serwera zadań) utrzymywanego przez projekt GNU make w celu optymalizacji równoległego wykonywania kompilacji w wielu wątkach. W GCC serwer zadań służy do zrównoleglenia pracy podczas optymalizacji LTO w kontekście całego programu (WPA, Whole-program Analysis). Nazwane potoki (--jobserver-style=fifo) są domyślnie używane do interakcji z serwerem zadań.
  • Analizator statyczny (-fanalyzer) oferuje 20 nowych testów diagnostycznych, w tym „-Wanalyzer-out-of-bounds”, „-Wanalyzer-allocation-size”, „-Wanalyzer-deref-before-check”, „-Wanalyzer-infinity -rekursja" -Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Zaimplementowano możliwość wyprowadzania diagnostyki w formacie SARIF w oparciu o JSON. Nowy format może służyć do uzyskiwania wyników analizy statycznej (GCC - fanalyzer), a także do uzyskiwania informacji o ostrzeżeniach i błędach. Włączenie odbywa się za pomocą opcji „-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file”, gdzie opcje z „json” dają wynik w formacie JSON specyficznym dla GCC .
  • Zaimplementowano niektóre funkcje zdefiniowane w standardzie C23 C, takie jak stała nullptr do definiowania wskaźników zerowych, ułatwiająca korzystanie z list ze zmienną liczbą argumentów (variadic), rozszerzenie możliwości wyliczeń, atrybut noreturn, constexpr i auto podczas definiowania obiektów, typeof i typeof_unqual, nowe słowa kluczowe alignas, alignof, bool, false, static_assert, thread_local i true, dopuszczają puste nawiasy podczas inicjalizacji.
  • Zaimplementowano niektóre funkcje zdefiniowane w standardzie C++23, takie jak możliwość umieszczania znaczników na końcu wyrażeń złożonych, zgodność z typem char8_t, dyrektywa preprocesora #warning, rozdzielana przez (\u{}, \o{} , \x{}) i nazwane ('\N{LITERA ŁACIŃSKA A}') sekwencje specjalne, operator statyczny(), operator statyczny[], operator równości w wyrażeniach, wyjątek niektórych ograniczeń dotyczących używania constexpr, obsługa dla UTF-8 w tekstach źródłowych.
  • Ulepszona eksperymentalna obsługa standardów C++20 i C++23 w libstdc++, na przykład dodanie obsługi plików nagłówkowych i std::format, rozszerzone możliwości plików nagłówkowych , dodano dodatkowe typy zmiennoprzecinkowe, zaimplementowano pliki nagłówkowe I .
  • Dodano nowe atrybuty funkcji do dokumentu, że deskryptor pliku jest przekazywany w zmiennej całkowitej: „__attribute__((fd_arg(N)))”, „__attribute__((fd_arg_read(N)))” i „__attribute__((fd_arg_write(N)) )) ". Określonych atrybutów można użyć w analizatorze statycznym (-fanalyzer) do wykrywania nieprawidłowej pracy z deskryptorami plików.
  • Dodano nowy atrybut „__attribute__((assume(EXPR)))”, za pomocą którego można powiedzieć kompilatorowi, że wyrażenie jest prawdziwe, a kompilator może wykorzystać ten fakt bez oceniania wyrażenia.
  • Dodano flagę „-fstrict-flex-arrays=[level]”, aby wybrać zachowanie podczas przetwarzania elastycznego elementu tablicy w strukturach (elementy elastycznej tablicy, tablica o nieokreślonym rozmiarze na końcu struktury, na przykład „int b[] ").
  • Dodano flagę „-Wenum-int-mismatch”, która generuje ostrzeżenia w przypadku niezgodności między typem wyliczeniowym a typem całkowitym.
  • Front-end Fortran ma pełne wsparcie dla finalizacji.
  • Dodano obsługę funkcji i typów generycznych (generics) do frontendu dla języka Go oraz zapewniono kompatybilność z pakietami dla języka Go 1.18.
  • Backend AArch64 obsługuje CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) i Arm Neoverse V2 (neoverse -v2) . Do opcji „-march=” dodano obsługę argumentów „armv9.1-a”, „armv9.2-a” i „armv9.3-a”. Dodano obsługę rozszerzeń procesorów FEAT_LRCPC, FEAT_CSSC i FEAT_LSE2.
  • Do zaplecza architektury ARM dodano obsługę procesorów STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) i Arm Cortex-M85 (cortex-m85).
  • Do backendu x86 dodano obsługę procesorów Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids i AMD Zen 4 (znver4). Zaimplementowano rozszerzenia architektury zestawu instrukcji AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT i AMX-COMPLEX proponowane w procesorach Intel. W przypadku języków C i C++ w systemach z SSE2 dostępny jest typ __bf16.
  • Backend generowania kodu dla procesorów graficznych AMD Radeon (GCN) implementuje możliwość korzystania z akceleratorów AMD Instinct MI200 w celu poprawy wydajności OpenMP/OpenACC. Ulepszona wektoryzacja przy użyciu instrukcji SIMD.
  • Znacząco rozszerzone możliwości backendu dla platformy LoongArch.
  • Dodano obsługę procesora T-Head XuanTie C906 (thead-c906) w zapleczu RISC-V. Zaimplementowano obsługę procedur obsługi wektorów zdefiniowanych w specyfikacji RISC-V Vector Extension Intrinsic 0.11. Dodano obsługę 30 rozszerzeń specyfikacji RISC-V.
  • Podczas generowania obiektów udostępnionych z opcją „-shared” kod startowy nie jest już dodawany po dodaniu środowiska zmiennoprzecinkowego, jeśli włączone są optymalizacje „-Ofast”, „-ffast-math” lub „-funsafe-math-optimizations” .
  • Obsługa formatu debugowania DWARF jest zaimplementowana w prawie wszystkich konfiguracjach.
  • Dodano opcję „-gz=zstd” do kompresji informacji debugowania przy użyciu algorytmu Zstandard. Usunięto obsługę wycofanego trybu kompresji informacji debugowania „-gz=zlib-gnu”.
  • Dodano wstępne wsparcie dla OpenMP 5.2 (Open Multi-Processing) i kontynuowano wdrażanie standardów OpenMP 5.0 i 5.1, definiując API i metody stosowania metod programowania równoległego w systemach wielordzeniowych i hybrydowych (CPU + GPU / DSP) z jednostki pamięci współdzielonej i wektoryzacji (SIMD).
  • Obsługa starszego formatu przechowywania informacji debugowania „STABS” (włączanego przez opcje -gstabs i -gxcoff), utworzonego w latach 1980. XX wieku i używanego w debugerze dbx, została wycofana.
  • Wycofana obsługa systemu Solaris 11.3 (kod obsługujący tę platformę zostanie usunięty w przyszłej wersji).

Źródło: opennet.ru

Dodaj komentarz