Ħruġ tas-suite tal-kompilaturi LLVM 16.0

Wara sitt xhur ta 'żvilupp, ġie ppreżentat ir-rilaxx tal-proġett LLVM 16.0 - sett ta' għodod kompatibbli mal-GCC (kompilaturi, ottimizzaturi u ġeneraturi tal-kodiċi) li jikkompila programmi f'bitcode intermedju ta 'struzzjonijiet virtwali bħal RISC (magna virtwali ta' livell baxx b' sistema ta’ ottimizzazzjoni f’diversi livelli). Il-psewdocode iġġenerat jista 'jiġi kkonvertit bl-użu ta' kompilatur JIT fi struzzjonijiet tal-magni direttament fil-ħin tal-eżekuzzjoni tal-programm.

Titjib kbir f'Clang 16.0:

  • L-istandard C++/ObjC++ default huwa gnu++17 (preċedentement gnu++14), li jfisser li l-karatteristiċi C++17 b'estensjonijiet GNU huma appoġġjati awtomatikament. Biex tirritorna l-imġieba preċedenti, tista' tuża l-għażla "-std=gnu++14".
  • Implimentaw karatteristiċi avvanzati relatati mal-istandard C++20:
    • Funzjonijiet speċjali tal-membri kondizzjonali trivjali,
    • jinqabad rbit strutturati f'funzjonijiet lambda,
    • Operatur tal-ugwaljanza ġewwa l-espressjonijiet,
    • Għażla li titħalla barra l-kelma prinċipali tal-isem tat-tip f'xi kuntesti,
    • Inizjalizzazzjoni aggregata valida fil-parentesi (“Aggr(val1, val2)”).
  • Il-karatteristiċi definiti fl-istandard futur C++2b ġew implimentati:
    • Huwa permess li jitqiegħdu tikketti fl-aħħar ta 'espressjonijiet komposti,
    • operatur statiku (),
    • operatur statiku[],
    • Il-kompatibilità mat-tip char8_t hija żgurata,
    • Il-firxa ta' karattri permessi għall-użu f'"\N{...}" ġiet estiża
    • Miżjud il-kapaċità li tuża varjabbli ddikjarati bħala "constexpr statiku" f'funzjonijiet iddikjarati bħala constexpr.
  • Il-karatteristiċi definiti fil-futur C-standard C2x ġew implimentati:
    • Biex tiddiżattiva t-twissija "-Wunused-label", l-attribut "[[maybe_unused]]" huwa permess li jiġi applikat għat-tikketti
    • Huwa permess li jitqiegħdu tikketti kullimkien fi ħdan espressjonijiet komposti,
    • Miżjud typeof u typeof_unqual operators,
    • Tip ġdid nullptr_t u kostanti nullptr biex jiddefinixxu null pointers li jistgħu jikkonvertu għal kwalunkwe tip ta' pointer u jirrappreżentaw varjant ta' NULL li mhuwiex marbut mat-tipi integer u void*.
    • Fil-modalità C2x, is-sejħa tal-makro va_start b'numru varjabbli ta 'argumenti (variadic) hija permessa.
  • Fil-modi ta' konformità C99, C11, u C17, l-għażliet default "-Wimplicit-function-declaration" u "-Wimplicit-int" issa jipproduċu żball minflok twissija.
  • L-użu indirett ta' "void *" (eż. "void func(void *p) { *p; }") fil-mod C++ issa jiġġenera żball, simili għal ISO C++, GCC, ICC u MSVC.
  • L-ispeċifikazzjoni tal-bitfields bħala operandi tal-istruzzjoni (eż. "__asm ​​​​{ mov eax, s.bf }") fi blokki ta 'assemblaġġ inline ta' stil Microsoft issa tiġġenera żball.
  • Miżjuda dijanjostika għall-preżenza ta 'strutturi u unjonijiet differenti bl-istess ismijiet f'moduli differenti.
  • Il-kapaċitajiet assoċjati mal-appoġġ OpenCL u OpenMP ġew estiżi. Dijanjostika mtejba għal mudelli C++ użati fl-argumenti tal-kernel OpenCL. Appoġġ imtejjeb tal-blokk tal-kju għall-AMDGPU. L-attribut nounwind huwa miżjud impliċitament mal-funzjonijiet kollha. Appoġġ imtejjeb għall-funzjonijiet integrati.
  • Żid il-kapaċità li tuża l-varjabbli ambjentali CLANG_CRASH_DIAGNOSTICS_DIR biex tiddefinixxi d-direttorju li fih tiġi ssejvjata d-dejta dijanjostika tal-ħabta.
  • L-appoġġ Unicode ġie aġġornat għall-ispeċifikazzjoni Unicode 15.0. Xi simboli matematiċi huma permessi f'identifikaturi, bħal "₊" (eż. "double xₖ₊₁").
  • Appoġġ miżjud għat-tagħbija ta 'fajls ta' konfigurazzjoni multipli (fajls ta 'konfigurazzjoni default huma mgħobbija l-ewwel, u mbagħad dawk speċifikati permezz tal-bandiera "--config=", li issa tista' tiġi speċifikata diversi drabi). Biddlet l-ordni tat-tagħbija default tal-fajls tal-konfigurazzjoni: clang jipprova jgħabbi l-fajl l-ewwel - .cfg, u jekk ma jinstabx jipprova jgħabbi żewġ fajls .cfg u .cfg. Biex tiddiżattiva t-tagħbija tal-fajls tal-konfigurazzjoni b'mod awtomatiku, il-bandiera "--no-default-config" ġiet miżjuda.
  • Biex jiġu żgurati bini ripetibbli, huwa possibbli li l-valuri attwali tad-data u l-ħin jiġu sostitwiti fil-makros __DATE__, __TIME__ u __TIMESTAMP__ bil-ħin speċifikat fil-varjabbli ambjentali SOURCE_DATE_EPOCH.
  • Biex tiċċekkja l-preżenza ta 'funzjonijiet built-in (builtin) li jistgħu jintużaw fil-kuntest ta' kostanti, il-makro "__has_constexpr_builtin" ġiet miżjuda.
  • Miżjud marka ġdida ta' kumpilazzjoni "-fcoro-aligned-allocation" għall-allokazzjoni tal-qafas coroutine allinjat.
  • Il-bandiera "-fstrict-flex-arrays=" timplimenta appoġġ għat-tielet livell ta 'verifika ta' elementi ta 'array flessibbli fi strutturi (Membri ta' Array Flessibbli, firxa ta 'daqs indefinit fit-tarf tal-istruttura). Fit-tielet livell, id-daqs "[]" biss (per eżempju, "int b[]") huwa ttrattat bħala firxa flessibbli, iżda d-daqs "[0]" (per eżempju, "int b[0]") m'huwiex.
  • Miżjud il-marka "-fmodule-output" biex tippermetti mudell ta 'kumpilazzjoni ta' fażi waħda għal moduli C++ standard.
  • Miżjud il-mod "-Rpass-analysis=stack-frame-layout" biex jgħin id-dijanjosi ta 'problemi bit-tqassim tal-frejm tal-munzell.
  • Żieda attribut ġdid __attribute__((target_version("cpu_features"))) u estendiet il-funzjonalità tal-attribut __attribute__((target_clones("cpu_features1","cpu_features2",...))) biex tagħżel verżjonijiet speċifiċi tal-karatteristiċi pprovduti minn AArch64 CPUs.
  • Għodod dijanjostiċi estiżi:
    • Twissija miżjuda "-Wsingle-bit-bitfield-constant-conversion" biex tiskopri truncation impliċita meta tassenja waħda għal bitfield iffirmat b'bit wieħed.
    • Id-dijanjostika tal-varjabbli constexpr mhux inizjalizzati ġiet estiża.
    • Miżjud twissijiet "-Wcast-function-type-strict" u "-Wincompatible-function-pointer-types-strict" biex jiġu identifikati problemi potenzjali bl-ikkastjar tat-tip ta 'funzjoni.
    • Miżjuda dijanjostika għall-użu ta 'ismijiet ta' moduli mhux korretti jew riżervati fi blokki ta 'esportazzjoni.
    • Sejbien imtejjeb ta' kliem prinċipali "awto" neqsin fid-definizzjonijiet.
    • L-implimentazzjoni tat-twissija "-Winteger-overflow" żiedet kontrolli għal sitwazzjonijiet addizzjonali li jwasslu għal overflows.
  • Appoġġ implimentat għall-arkitettura tas-sett ta 'struzzjonijiet LoongArch (-march=loongarch64 jew -march=la464), użata fil-proċessuri Loongson 3 5000 u li timplimenta l-RISC ISA il-ġdida, simili għal MIPS u RISC-V.

Innovazzjonijiet ewlenin f'LLVM 16.0:

  • Il-kodiċi LLVM huwa permess li juża elementi definiti fl-istandard C++17.
  • Ir-rekwiżiti ambjentali għall-bini tal-LLVM żdiedu. L-għodod tal-bini issa għandhom jappoġġjaw l-istandard C++17, i.e. Biex tibni, għandek bżonn mill-inqas GCC 7.1, Clang 5.0, Apple Clang 10.0 jew Visual Studio 2019 16.7.
  • Il-backend għall-arkitettura AArch64 iżid appoġġ għal Cortex-A715, Cortex-X3 u Neoverse V2 CPUs, assembler għal RME MEC (Memory Encryption Contexts), estensjonijiet Armv8.3 (Complex Number) u Function Multi Versioning.
  • Fil-backend għall-arkitettura ARM, l-appoġġ għall-pjattaformi fil-mira Armv2, Armv2A, Armv3 u Armv3M twaqqaf, li għalihom il-ġenerazzjoni ta 'kodiċi korretta ma kinitx garantita. Miżjud il-kapaċità li tiġġenera kodiċi għal struzzjonijiet biex taħdem ma 'numri kumplessi.
  • Il-backend għall-arkitettura X86 żied appoġġ għall-arkitetturi tas-sett ta 'struzzjonijiet (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Appoġġ miżjud għall-istruzzjonijiet RDMSRLIST, RMSRLIST u WRMSRNS. Għażliet implimentati "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" u "-mcpu=grandridge".
  • Żid appoġġ uffiċjali għall-pjattaforma LoongArch.
  • Backends imtejba għall-arkitetturi MIPS, PowerPC u RISC-V
  • Appoġġ miżjud għad-debugging eżekutibbli 64-bit għall-arkitettura LoongArch għad-debugger LLDB. Immaniġġjar imtejjeb tas-simboli tad-debug COFF. Ipprovda filtrazzjoni ta 'DLLs duplikati fil-lista ta' moduli Windows mgħobbija.
  • Fil-librerija Libc++, ix-xogħol ewlieni kien iffukat fuq l-implimentazzjoni ta' appoġġ għal karatteristiċi ġodda tal-istandards C++20 u C++23.
  • Il-linker LDD inaqqas b'mod sinifikanti l-ħin tal-konnessjoni billi jipparallelizza l-iskannjar tar-rilokazzjoni tal-indirizz u l-operazzjonijiet tal-inizjalizzazzjoni tas-sezzjonijiet. Appoġġ miżjud għall-kompressjoni tas-sezzjoni bl-użu tal-algoritmu ZSTD.

Sors: opennet.ru

Żid kumment