Po viac ako šiestich mesiacoch vývoja, spustenie nová verzia projektu LLVM 16.0, verzia, v ktorej je implementovaných veľké množstvo zmien a vylepšení.
Pre tých, ktorí nepoznajú LLVM, mali by ste vedieť, že toto je kompilátor kompatibilný s GCC (kompilátory, optimalizátory a generátory kódu), ktorý kompiluje programy do medzibitového kódu virtuálnej inštrukcie podobnej RISC (nízkoúrovňový virtuálny stroj s viacúrovňovým optimalizačným systémom).
Vygenerovaný pseudokód môže kompilátor JIT previesť na strojové inštrukcie práve v čase vykonávania programu.
Hlavné nové funkcie LLVM 16.0
V tejto novej verzii, ktorá je predstavená, môžeme nájsť niekoľko dôležitých vylepšení v clang 16.0, z ktorých vyniká predvolený štandard C++/ObjC++, ktorý je nastavený na gnu++17 (predtým gnu++14), ktorý znamená, že štandardne podporuje funkcie C++17 s rozšíreniami GNU. V kóde LLVM je povolené používanie prvkov definovaných v štandarde C++17.
Ďalšou zo zmien, ktorá vyniká, je to, že bola pridaná podpora procesorov Cortex-A715, Cortex-X3 a Neoverse Rozšírenia V2, Armv8.3 a funkcie viacerých verzií pre backend AArch64.
La kompatibilita platformy Armv2, Armv2A, Armv3 a Armv3M boli ukončené v backende architektúry ARM, pre ktorý nebolo zaručené správne generovanie kódu. Pridaná možnosť generovania kódu pre inštrukcie na prácu s komplexnými číslami a pridaná podpora architektúr inštrukčných sád (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT na backend X86.
Okrem toho, požiadavky na budovanie LLVM sa zvýšili, Zostava by teraz mala byť kompatibilná aj so štandardom C++17, t.j. zostava vyžaduje aspoň GCC 7.1, Clang 5.0, Apple Clang 10.0 alebo Visual Studio 2019 16.7.
Na druhej strane aj zvýrazňuje vylepšené backendy pre MIPS, PowerPC a RISC-V architektúry, ako aj podporu pre ladenie 64-bitových spustiteľných súborov pre architektúru LoongArch na ladiaci program LLDB a vylepšené spracovanie symbolov ladenia COFF.
Z ďalších zmien ktoré vynikajú:
- V knižnici Libc++ bola hlavná práca zameraná na implementáciu podpory nových funkcií štandardov C++20 a C++23.
- Linkový čas sa výrazne skrátil v LDD linkeri paralelizáciou operácií skenovania premiestnenia adries a inicializácie sekcií. Pridaná podpora pre kompresiu sekcií pomocou algoritmu ZSTD.
- Vyzdvihnuté sú aj pokročilé funkcie implementované štandardom C++20.
- zachytiť štruktúrované väzby vo funkciách lambda.
- Operátor rovnosti vo výrazoch.
- Schopnosť nešpecifikovať kľúčové slovo typename v niektorých kontextoch,
- Povolenie inicializácie pridané medzi zátvorky ("Aggr(val1, val2)").
- Implementované funkcie definované v budúcom štandarde C++2b.
- Podpora poskytovaná s typom char8_t,
- Rozšírený rozsah znakov povolených na použitie v "\N{…}",
- Pridaná možnosť používať premenné deklarované ako "static constexpr" vo funkciách deklarovaných ako constexpr.
- Implementované funkcie definované v budúcom štandarde C2x C:
- Pridaná podpora pre načítanie viacerých konfiguračných súborov (najskôr sa načítajú predvolené konfiguračné súbory, potom tie, ktoré sú zadané pomocou príznaku „–config=“, ktorý je teraz možné zadať viackrát).
- Zmenené poradie načítania predvolených konfiguračných súborov: clang sa pokúša načítať súbor ako prvý - .cfg a ak ho nenájde, pokúsi sa načítať dva súbory .cfg a .cfg.
- Pridaný nový príznak zostavy „-fcoro-aligned-allocation“ pre rutinnú distribúciu zarovnanú s rámcom.
- Pridaný príznak "-fmodule-output" na povolenie jednofázového zostavovacieho modelu štandardných modulov C++.
- Pridaný režim "-Rpass-analysis=stack-frame-layout" na diagnostiku problémov s rozložením rámca zásobníka.
- Pridaný nový atribút __attribute__((target_version("cpu_features"))) a rozšírená funkčnosť atribútu __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) na výber konkrétnych verzií funkcií poskytovaných CPU AArch64 .
- Vylepšené diagnostické nástroje:
- Pridané varovanie „-Wsingle-bit-bitfield-constant-conversion“ na zachytenie implicitného skrátenia pri priraďovaní jedného bitovému poľu so znamienkom s jedným bitom.
- Rozšírená diagnostika pre neinicializované premenné constexpr.
- Pridané upozornenia „-Wcast-function-type-strict“ a „-Wincompatible-function-pointer-types-strict“ na zachytenie potenciálnych problémov pri prenášaní typov funkcií.
Konečne Ak máte záujem dozvedieť sa viac, môžete skontrolovať podrobnosti v nasledujúci odkaz.