Pe 3 mai a avut loc lansarea publică a versiunii a noua a GCC: GCC 9.1.
Aceasta conține o mulțime de îmbunătățiri și adăugiri semnificative comparativ cu versiunea a opta.
versiune.
Modificări generale
Opțiuni
- Comenzile care acceptă dimensiunea sprijină acum valori de 64 de biți și sufixe pentru a indica dimensiunea;
- O opțiune a fost adăugată -flive-patching, pentru gestionarea optimizărilor potențial dăunătoare pentru înlocuirea dinamică a codului;
- A fost adăugată opțiunea —completion pentru a sprijini completarea automată în terminal;
- Diagnosticile compilatorului includ acum numere de linie (-fno-diagnostics-show-line-numbers) și
informații despre tipuri (fno-diagnostics-show-labels); - O opțiune a fost adăugată -fdiagnostics-format=json pentru a produce diagnostice în format JSON;
- Opțiuni pentru specificarea aliniamentului (-falign-functions, de exemplu) pot acum accepta o pereche de opțiuni de aliniere;
- Au fost adăugate opțiuni pentru filtrarea listei de fișiere (-fprofile-filter-files, -fprofile-exclude-files), care sunt supuse instrumentării profilatorului;
- AddressSanitizer folosește acum un aliniament mai compact pentru a prinde accesurile incorecte la variabilele de pe stivă;
- Numeroase îmbunătățiri în ieșirea -fopt-info;
- O opțiune a fost adăugată -fsave-optimization-record pentru a salva raportul despre optimizări într-un fișier;
- O opțiune a fost adăugată -fipa-stack-alignment și -fipa-reference-addressable.
Funcții încorporate noi
A fost adăugat un nou atribut
- copy.
Altele
Numeroase îmbunătățiri ale generării de cod legate de:
- generarea construcțiilor switch;
- optimizările interprocedurale;
- optimizarea bazată pe informații de profilare;
- optimizarea în etapa de linkare (LTO);
De asemenea, formatul intern gcov este acum JSON, iar noua opțiune —use-hotness-colors include colorarea liniilor de cod în funcție de frecvența utilizării acestora.
Limbi
Calitatea și completitudinea implementării OpenACC în limbile C, C++ și Fortran continuă să se îmbunătățească.
Limbi asemănătoare C
- S-a implementat suport parțial pentru OpenMP 5.0;
- Funcție adăugată __builtin_convertvector;
- A fost adăugat un avertisment -Waddress-of-packed-member;
- Îmbunătățiri în mai multe avertismente existente;
- Textul erorii atunci când se trece un număr incorect de argumente în macro-uri include acum declarația macro-ului însuși;
- Îmbunătățiri în sugestiile de corectare a greșelilor de tipar.
C
- Suport pentru _Static_assert cu un singur argument pentru -std=c2x (futurul standard C);
- Un nou avertisment -Wabsolute-value, care prinde tipuri de argument greșite pentru funcții precum abs().
C++
- Avertismente noi: -Wdeprecated-copy,
-Winit-list-lifetime,
-Wredundant-move,
-Wpessimizing-move,
-Wclass-conversion; - Sunt în curs de implementare noi funcționalități din standardul viitor C++ 2a;
- Frontendul acum păstrează informații mai precise despre diverse elemente din codul sursă, permițându-le să fie afișate informații detaliate în diagnostice;
- Diagnosticele pentru funcții suprasolicitate, operatori binari, apeluri de funcții și șiruri de format au fost îmbunătățite;
- Au fost adăugate corecții automate susținute de unele medii de dezvoltare pentru diverse erori comune (paranteze lipsă, spații de nume, greșeli de tipar etc.).
libstdc++
- Implementarea C++17 nu mai este experimentală;
- Au fost adăugate algoritmi paraleli, <execution>, <memory_resource>, iar <filesystem> nu mai necesită -lstdc++fs;
- A fost îmbunătățită suportul experimental pentru C++ 2a (<bit>, <version>, std::bind_front etc.);
- Suport pentru deschiderea fluxurilor de fișiere pe Windows, ale căror căi conțin caractere care depășesc char;
- Suport inițial pentru <filesystem> pe Windows;
- Suport inițial pentru Networking TS.
D
Limba D versiunea 2.076 este inclusă în GCC.
Fortran
- Suport complet pentru intrare/ieșire asincronă;
- Argumentul BACK pentru MINLOC și MAXLOC a fost implementat;
- Funcțiile FINDLOC și IS_CONTIGUOUS au fost implementate;
- Sintaxa de acces la componentele numerelor complexe: c%re și c%im a fost implementată;
- Sintaxa str%len și a%kind a fost implementată;
- Descriptorii C și antetul ISO_Fortran_binding.h au fost implementați;
- Cerințele pentru rezultatele funcțiilor MAX și MIN au fost relaxate atunci când unul dintre argumente este NaN;
- O opțiune a fost adăugată -fdec-include;
- A fost adăugată directiva BUILTIN.
libgccjit
- Funcție adăugată gcc_jit_context_add_driver_option.
Altele
Numeroase modificări specifice arhitecturii și sistemului de operare.
Sursa: linux.org.ru

