Nakon godinu dana razvoja, Objavljena nova verzija GCC 11.1 paketa kompajlera, prvo značajno izdanje u novoj grani GCC 11.x. Prema novoj shemi numeriranja verzija, verzija 11.0 korištena je tijekom razvoja, a nedugo prije izlaska GCC 11.1, grana GCC 12.0 već je bila račvasta da formira sljedeću glavnu verziju GCC 12.1.
GCC 11.1 izdvaja se po prijelazu na zadani format datoteke za uklanjanje pogrešaka DWARF 5, zadano uključivanje standarda C ++ 17 ("-std = gnu ++ 17"), značajna poboljšanja u kompatibilnosti sa standardom C ++ 20, eksperimentalna podrška za C ++ 23, poboljšanja vezana uz budući standard jezik C (C2x), nove optimizacije izvedbe.
GCC 11.1 Glavne nove značajke
Zadani način rada za jezik C ++ promijenjen je kako bi se koristio standard C ++ 17, umjesto prethodno predloženog C ++ 14. Moguće je selektivno onemogućiti novo ponašanje C ++ 17 prilikom obrade predložaka koji koriste druge predloške kao parametar (-fno-new-ttp-matching).
Dodana podrška za hardversko ubrzanje alata AddressSanitizer, koji vam omogućuje utvrđivanje činjenica pristupa oslobođenim memorijskim područjima, prekoračenja ograničenja dodijeljenog međuspremnika i nekih drugih vrsta pogrešaka pri radu s memorijom. Hardversko ubrzanje trenutno je dostupno samo za arhitekturu AArch64 i usredotočeno je na njegovu upotrebu prilikom sastavljanja Linux jezgre.
Još jedna novost koja se predstavlja su optimizacije i poboljšanja između postupaka, jer je dodana nova IPA-modref propusnica (-fipa-modref) za praćenje nuspojava u pozivima funkcija i poboljšanje točnosti analize. Osim toga a poboljšana primjena prolaska IPA-ICF (-fipa-icf), koji smanjuje potrošnju memorije kompilacije i povećava broj objedinjenih funkcija za koje se spajaju identični blokovi koda.
El mehanizam za optimizaciju vođen profilom (PGO), poboljšani način rada "-fprofile-values" praćenjem više parametara za neizravne pozive.
također Istaknuta je kontinuirana primjena standarda OpenMP 5.0 (Otvorena višestruka obrada), u kojem dodana je početna podrška za direktivu o dodjeli i mogućnost korištenja neujednačenih petlji u OpenMP građevinama. Sada je podržana varijabla okoline OMP_TARGET_OFFLOAD.
Poboljšana je implementacija specifikacije paralelnog programiranja OpenACC 2.6 za jezike C, C ++ i Fortran, koja definira alate za istovar operacija na GPU-ove i specijalizirane procesore kao što je NVIDIA PTX.
Za jezike obitelji C implementiran je novi atribut "no_stack_protector", dizajniran za označavanje funkcija za koje zaštita hrpe ne bi trebala biti omogućena ("-fstack-protector"). Atribut "malloc" proširen je podrškom za prepoznavanje parova poziva za dodjelu i oslobađanje memorije, koji se koristi u statičkom parseru za otkrivanje tipičnih pogrešaka u memoriji (curenje memorije, upotreba nakon besplatnog, dvostruki pozivi na besplatnu funkciju itd.) i upozorenja kompajlera "-Wmismatched-dealloc", "-Wmismatched- new-delete" i " -Wfree-nonheap-object "izvještavanje o nedosljednom preusmjeravanju i preusmjeravanju.
Pri generiranju podataka za otklanjanje pogrešaka, prema zadanim se postavkama koristi format DWARF 5, koji u usporedbi s prethodnim verzijama omogućuje generiranje 25% kompaktnijih podataka za uklanjanje pogrešaka. Potpuna podrška za DWARF 5 zahtijeva binutils najmanje verzije 2.35.2.
Poboljšane mogućnosti načina rada ThreadSanitizer (-fsanitize = nit), budući daDodaje podršku za alternativna vremena izvođenja i okruženja, kao i podrška za alat za ispravljanje pogrešaka Kernel Concurrency Sanitizer (KCSAN) za dinamičko otkrivanje uvjeta utrke unutar Linux jezgre. Dodane su nove opcije "–param tsan-distinct-volatile" i "–param tsan-instrument-func-entry-exit".
Vektorizator omogućuje računovodstvo cjelokupnog sadržaja funkcije i dodatnu obradu mogućnosti povezanih s presjecima i referencama na prethodne blokove u kontrolnom dijagramu tijeka (CFG).
Optimizator ima mogućnost pretvoriti niz uvjetnih operacija u izraz promjene u kojem se uspoređuje ista varijabla. U budućnosti se izraz promjene može kodirati pomoću uputa za testiranje bitova (za kontrolu ove pretvorbe dodana je opcija "-fbit-tests").
Za C ++ implementiran je dio promjena i inovacija predloženih u standardu C ++ 20, uključujući virtualne funkcije "consteval virtual", pseudo-razarače za završavanje životnog ciklusa objekata, koristeći klasu enum i izračunavanje veličina niza u izrazu "novo".
Ako želite znati više o tome, detalje možete provjeriti u sljedeći link.