Kompajleri serije GCC 10 stižu u veliku nadogradnju

GCC (GNU Compiler Collection) 10.1, veliko izdanje platforme, objavljeno je 7. svibnja 2020. godine, s naglascima koji uključuju mogućnosti C ++ 20 i podršku jezika C2X. C2X je sljedeća velika revizija jezika C, koja bi trebala nastupiti 2022. godine. 

Napomene o izdanju za GCC 10 pokazuju da je implementirano mnoštvo C ++ 20 značajki, uključujući dopuštanje ugrađenog sastavljanja u constexpr funkcijama i proširivanje strukturiranih veza. Također za C ++ 20, GCC 10 dopušta pretvorbe u nizove nepoznatih veza, omogućuje trivijalnu zadanu inicijalizaciju u kontekstima constexpr, dodaje constinitključnu riječ i odbacuje ključnu  volatile riječ.

Za C2X, predstojeću reviziju ISO C standarda, nekoliko je značajki podržano sintaksom  -std=c2xi -std+gnu2x. Među njima su strftimeoblik provjere pridržavaju element %OBi %Obformata i UTF-8 konstante znakova pomoću U8' 'sintakse.

GCC, koji postoji više od 33 godine, uključuje frontove i knjižnice za C, C ++, Fortran, Ada, Go i D. Objavljen je bilten o prenošenju na GCC 10. Ostale nove mogućnosti u GCC 10.1 uključuju

  • Dodane su ugrađene funkcije, uključujući has_builtinoperatora pretprocesora koji se može koristiti za traženje podrške za ugrađene funkcije koje pružaju GCC i drugi prevoditelji koji ga podržavaju. 
  • Dodane su naredbene opcije. To uključuje  -fallocation-dceuklanjanje nepotrebnih parova newi deleteoperatora i -fanalyzeromogućavanje novog prolaska statičke analize i pridruženih upozorenja. Potonju bi opciju trebalo smatrati u eksperimentalnoj fazi.
  • Izvršena su poboljšanja međuproceduralne optimizacije. To uključuje ponovnu provedbu međuproceduralne skalarne zamjene agregata (IPA-SRA) koja je ponovno implementirana da radi u vrijeme povezivanja. IPA-SRA sada također može ukloniti računanje i vraćati neiskorištene povratne vrijednosti.
  • Poboljšanja optimizacije vremena povezivanja uključuju novu binarnu datoteku ito-dump. Program može izbaciti razne informacije o LTO bytedatoteci objekta.
  • Napravljena su poboljšanja optimizirana na temelju profila, uključujući poboljšanje održavanja profila tijekom kompilacije i vruće / hladne particije.
  • Za obitelj C dodani su accessfunkcija i typeatribut da bi opisali kako funkcija pristupa objektima koji su joj proslijeđeni pokazivačem ili referencom i da bi se takvi argumenti pridružili cjelobrojnim argumentima koji označavaju veličinu objekta. Atribut se koristi za omogućavanje otkrivanja nevaljanih pristupa pomoću korisnički definiranih funkcija. Postoje i nova upozorenja i poboljšanja postojećih upozorenja. Jedno upozorenje -Wzero-length-boundsupozorava na pristup elementima polja nulte duljine koji se mogu preklapati s ostalim članovima istog objekta.
  • Ispravljena je ABI nekompatibilnost između C ++ 14 i C ++ 17. Na nekim ciljevima klasa s podobjektom nulte veličine pogrešno bi se proslijedila kada se prevede kao C ++ 17 ili C ++ 20.