
LLVM je okvir za razvoj kompajlera, kao i pomoć u izgradnji novih programskih jezika i poboljšanju postojećih jezika.
Nakon nešto više od šest mjeseci razvoja, lansiranje nova verzija projekta LLVM 16.0, verzija u kojoj je implementiran velik broj izmjena i poboljšanja.
Za one koji nisu upoznati s LLVM-om, trebali biste znati da ovo je GCC kompatibilan prevodilac (kompilatori, optimizatori i generatori koda) koji kompajlira programe u srednji bit kod virtualnih instrukcija nalik RISC-u (virtualni stroj niske razine s višerazinskim optimizacijskim sustavom).
Generirani pseudokod JIT kompajler može pretvoriti u strojne instrukcije upravo u trenutku izvođenja programa.
Glavne nove značajke LLVM-a 16.0
U ovoj novoj verziji koja je predstavljena, možemo pronaći nekoliko važnih poboljšanja u clang 16.0, od kojih se ističe zadani standard C++/ObjC++ koji je postavljen na gnu++17 (prije gnu++14), koji podrazumijeva podršku za značajke C++17 s GNU ekstenzijama prema zadanim postavkama. Korištenje elemenata definiranih u standardu C++17 dopušteno je u kodu LLVM.
Još jedna od promjena koja se ističe je da je dodan podrška za procesore Cortex-A715, Cortex-X3 i Neoverse V2, Armv8.3 proširenja i značajke s više verzija za pozadinu AArch64.
La kompatibilnost platforme Armv2, Armv2A, Armv3 i Armv3M su ukinuti u pozadini ARM arhitekture, za koju nije zajamčeno ispravno generiranje koda. Dodana mogućnost generiranja koda za upute za rad sa složenim brojevima i dodano podrška za arhitekture skupova instrukcija (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT u X86 pozadinu.
Osim toga, zahtjevi za izgradnju LLVM su povećani, Također, izrada bi sada trebala biti kompatibilna sa standardom C++17, tj. izrada zahtijeva najmanje GCC 7.1, Clang 5.0, Apple Clang 10.0 ili Visual Studio 2019 16.7.
S druge strane, također ističe poboljšana pozadina za MIPS, PowerPC i RISC-V arhitekture, kao i podršku za ispravljanje pogrešaka 64-bitnih izvršnih datoteka za LoongArch arhitekturu u LLDB debugger i poboljšano rukovanje COFF simbolima za ispravljanje pogrešaka.
Od ostalih promjena koji se ističu:
- U biblioteci Libc++ glavni rad bio je usmjeren na implementaciju podrške za nove značajke standarda C++20 i C++23.
- Vrijeme veze značajno je smanjeno u LDD povezivaču paraleliziranjem skeniranja premještanja adresa i operacija inicijalizacije odjeljka. Dodana podrška za kompresiju odjeljaka pomoću ZSTD algoritma.
- Također su istaknute napredne funkcije implementirane sa standardom C++20.
- uhvatiti strukturirane veze u lambda funkcijama.
- Operator jednakosti unutar izraza.
- Mogućnost nenavođenja ključne riječi typename u nekim kontekstima,
- Dopuštenost inicijalizacije dodana između zagrada ("Aggr(val1, val2)").
- Implementirane funkcije definirane u budućem C++2b standardu.
- Podršku pruža tip char8_t,
- Proširen je raspon znakova dopuštenih za upotrebu u "\N{…}",
- Dodana je mogućnost korištenja varijabli deklariranih kao "static constexpr" u funkcijama deklariranim kao constexpr.
- Implementirane funkcije definirane u budućem C2x C standardu:
- Dodana je podrška za učitavanje višestrukih konfiguracijskih datoteka (prvo se učitavaju zadane konfiguracijske datoteke, a zatim one navedene preko oznake “–config=”, koje se sada mogu navesti više puta).
- Promijenjen redoslijed učitavanja zadanih konfiguracijskih datoteka: clang pokušava prvi učitati datoteku - .cfg i ako ga ne može pronaći, pokušava učitati dvije datoteke .cfg i .cfg.
- Dodana je nova oznaka izgradnje "-fcoro-aligned-allocation" za rutinsku distribuciju usklađenu s okvirom.
- Dodana je oznaka "-fmodule-output" kako bi se omogućio jednofazni model izgradnje standardnih C++ modula.
- Dodan način "-Rpass-analysis=stack-frame-layout" za dijagnosticiranje problema s rasporedom okvira hrpe.
- Dodan je novi atribut __attribute__((target_version("cpu_features")))) i proširena funkcionalnost atributa __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) atribut za odabir određenih verzija značajki koje pruža CPU AArch64 .
- Poboljšani dijagnostički alati:
- Dodano upozorenje "-Wsingle-bit-bitfield-constant-conversion" za hvatanje implicitnog skraćivanja prilikom dodjele jednobitnom bitnom polju s predznakom.
- Proširena dijagnostika za neinicijalizirane constexpr varijable.
- Dodana su upozorenja "-Wcast-function-type-strict" i "-Wincompatible-function-pointer-types-strict" za uočavanje potencijalnih problema s tipovima funkcija emitiranja.
Konačno Ako vas zanima više o tome, pojedinosti možete provjeriti u sljedeći link.