Pärast veidi enam kui kuuekuulist arendustööd aasta käivitamine projekti uus versioon LLVM 16.0, versioon, milles on rakendatud palju muudatusi ja täiustusi.
Need, kes LLVM-iga ei tunne, peaksid teadma, et see on GCC-ga ühilduv kompilaator (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerib programmid RISC-laadseks virtuaalkäskude vahebitkoodiks (madala tasemega virtuaalmasin mitmetasandilise optimeerimissüsteemiga).
Loodud pseudokoodi saab JIT-i kompilaator teisendada masinakäskudeks just programmi täitmise ajal.
LLVM 16.0 peamised uued funktsioonid
Selles esitletavas uues versioonis leiame mitmeid olulisi täiustusi Clangis 16.0, millest paistab silma vaikimisi C++/ObjC++ standard, mis on seatud väärtusele gnu++17 (varem gnu++14), mis tähendab vaikimisi GNU laiendustega C++17 funktsioonide tuge. LLVM koodis on lubatud kasutada C++17 standardis määratletud elemente.
Veel üks silmapaistev muudatus on see, et see on lisatud Cortex-A715, Cortex-X3 ja Neoverse protsessorite tugi V2, Armv8.3 laiendused ja mitme versiooni funktsioonid AArch64 taustaprogrammile.
La platvormi ühilduvus Armv2, Armv2A, Armv3 ja Armv3M tootmine on lõpetatud ARM-i arhitektuuri taustaprogrammis, mille puhul korrektne koodi genereerimine ei olnud garanteeritud. Lisati võimalus genereerida kood juhiste jaoks kompleksarvudega töötamiseks ja lisatud arhitektuuride tugi juhiste komplektidest (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT X86 taustaprogrammiks.
Peale selle, on tõstetud nõudeid LLVM-i ehitamisele, Samuti peaks järg nüüd ühilduma C++17 standardiga, st et ehitamine nõuab vähemalt GCC 7.1, Clang 5.0, Apple Clang 10.0 või Visual Studio 2019 16.7.
Teisest küljest tõstab see ka esile täiustatud taustaprogrammid MIPS-i, PowerPC- ja RISC-V-arhitektuuride jaoks, samuti tugi 64-bitiste käivitatavate failide silumiseks LoongArchi arhitektuuri jaoks LLDB silurile ja COFF-i silumissümbolite täiustatud käsitsemine.
Muudest muudatustest mis paistavad silma:
- Libc++ teegis keskenduti põhitööle C++20 ja C++23 standardite uute funktsioonide toe juurutamisele.
- Linkimisaega on LDD linkeris märkimisväärselt lühendatud, paralleelses aadressi ümberpaigutamise skannimise ja sektsiooni lähtestamise toimingud. Lisatud tugi sektsioonide tihendamiseks ZSTD algoritmi abil.
- Samuti on esile tõstetud C++20 standardiga rakendatud täiustatud funktsioonid.
- jäädvustada struktureeritud linke lambda funktsioonides.
- Võrdsuse operaator avaldistes.
- Võimalus mõnes kontekstis tüübinime märksõna mitte määrata,
- Sulgude vahele lisatud lähtestamise lubatavus ("Aggr(val1, val2)").
- Rakendatud funktsioonid, mis on määratletud tulevases C++2b standardis.
- char8_t tüübi tugi,
- Laiendas kaustas "\N{…}" kasutamiseks lubatud tähemärkide ulatust,
- Lisatud on võimalus kasutada muutujaid, mis on deklareeritud kui "staatiline constexpr", funktsioonides, mis on deklareeritud kui constexpr.
- Rakendatud funktsioonid, mis on määratletud tulevases C2x C standardis:
- Lisatud tugi mitme konfiguratsioonifaili laadimiseks (kõigepealt laaditakse vaikimisi konfiguratsioonifailid, seejärel need, mis on määratud lipuga „–config=”, mida saab nüüd mitu korda määrata).
- Vaikimisi konfiguratsioonifailide laadimise järjekord on muudetud: clang proovib faili kõigepealt laadida - .cfg ja kui see ei leia seda, proovib see laadida kahte faili .cfg ja .cfg.
- Rutiinse kaadri joondatud levitamise jaoks on lisatud uus järgu lipp "-fcoro-aligned-allocation".
- Lisatud lipp "-fmodule-output", et võimaldada standardsete C++ moodulite ühefaasilist ehitusmudelit.
- Virnaraami paigutusega seotud probleemide diagnoosimiseks on lisatud režiim "-Rpass-analysis=stack-frame-layout".
- Lisati uus atribuut __attribute__((target_version("cpu_features"))) ja laiendati atribuudi __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) funktsionaalsust, et valida CPU Aarch64 pakutavate funktsioonide konkreetsed versioonid .
- Täiustatud diagnostikavahendid:
- Lisatud hoiatus "-Wsingle-bit-bitfield-constant-conversion", et tabada kaudne kärpimine, kui määrate selle ühebitise märgiga bitiväljale.
- Laiendatud diagnostika initsialiseerimata constexpr-muutujatele.
- Lisatud hoiatused "-Wcast-function-type-strict" ja "-Wincompatible-function-pointer-types-strict", et tuvastada võimalikud probleemid funktsioonitüüpide ülekandmisel.
Lõpuks Kui soovite sellest rohkem teada saada, üksikasju saate vaadata lehelt järgmine link.