Ukukhishwa kwe-LLVM 16.0 compiler suite

Ngemva kwezinyanga eziyisithupha zokuthuthukiswa, kwethulwa ukukhishwa kwephrojekthi ye-LLVM 16.0 - ikhithi yamathuluzi ehambisana ne-GCC (abahlanganisi, izithuthukisi kanye namakhodi akhiqiza amakhodi) ehlanganisa izinhlelo zibe yi-bitcode ephakathi yemiyalelo ye-RISC efana ne-virtual (umshini wezinga eliphansi one- uhlelo lokusebenzisa amazinga amaningi). I-pseudocode ekhiqiziwe ingaguqulwa kusetshenziswa i-JIT compiler ibe imiyalelo yomshini ngokuqondile ngesikhathi sokwenziwa kohlelo.

Ukuthuthukiswa okukhulu ku-Clang 16.0:

  • Izinga elizenzakalelayo le-C++/ObjC++ lithi gnu++17 (ngaphambilini eyayiyi-gnu++14), okusho ukuthi izici ze-C++17 ezinezandiso ze-GNU zisekelwa ngokuzenzakalelayo. Ukuze ubuyisele ukuziphatha kwangaphambilini, ungasebenzisa inketho ethi "-std=gnu++14".
  • Kusetshenziswe izici ezithuthukile ezihlobene nezinga le-C++20:
    • Imisebenzi yelungu elikhethekile ngokwemibandela engabalulekile,
    • ukuthatha izibopho ezihlelekile emisebenzini ye-lambda,
    • I-Equality operator ngaphakathi kwezinkulumo,
    • Inketho yokushiya igama elingukhiye legama kwezinye izimo,
    • Ukuqaliswa okuhlanganisiwe okuvumelekile kubakaki (β€œAggr(val1, val2)”).
  • Izici ezichazwe esikhathini esizayo ezijwayelekile ze-C++2b sezisetshenzisiwe:
    • Kuvunyelwe ukubeka amalebula ekugcineni kwezinkulumo ezihlanganisiwe,
    • u-opharetha omile(),
    • u-opharetha omile[],
    • Ukuhambisana nohlobo lwe-char8_t kuyaqinisekiswa,
    • Ububanzi bezinhlamvu ezivunyelwe ukusetshenziswa kokuthi "\N{...}" bunwetshiwe
    • Kwengezwe amandla okusebenzisa okuguquguqukayo okumenyezelwe njengokuthi "static constexpr" emisebenzini emenyezelwe njenge-constexpr.
  • Izici ezichazwe esikhathini esizayo C-standard C2x sezisetshenzisiwe:
    • Ukuze ukhubaze isexwayiso esithi "-Wunused-lebel", isibaluli se-"[[mhlawumbe_esingasetshenzisiwe]" sivunyelwe ukuthi sisetshenziswe kumalebula.
    • Kuvunyelwe ukubeka amalebula noma yikuphi ngaphakathi kwezinkulumo ezihlanganisiwe,
    • Kwengezwe uhlobo lwama-opharetha_ongalingani,
    • Uhlobo olusha lwe-nullptr_t kanye ne-nullptr engaguquki ukuze kuchazwe izikhombi eziyinull ezingaguqulela kunoma yiluphi uhlobo lwesikhombi futhi zimele okuhlukile kokuthi NULL okungaboshelwe kunombolo kanye nezinhlobo ezingenalutho*.
    • Kumodi ye-C2x, ukushayela i-va_start macro ngenombolo eguquguqukayo yezimpikiswano (i-variadic) kuvunyelwe.
  • Kumamodi okuthobela e-C99, C11, kanye ne-C17, izinketho ezizenzakalelayo "-Isimemezelo-se-Wimplicit-function-declaration" kanye "-Wimplicit-int" manje kukhiqiza iphutha esikhundleni sesexwayiso.
  • Ukusetshenziswa okungaqondile kwe-"void *" (isb. "void func(void *p) { *p; }") kumodi ye-C++ manje kukhiqiza iphutha, elifana ne-ISO C++, GCC, ICC kanye ne-MSVC.
  • Ukucacisa ama-bitfields njengemisebenzi yemiyalelo (isb. "__asm ​​​​{mov eax, s.bf }") kumabhulokhi wokuhlanganisa omugqa wesitayela se-Microsoft manje kudala iphutha.
  • Ukuxilongwa okwengeziwe kokuba khona kwezinhlaka ezahlukene nezinyunyana ezinamagama afanayo kumamojula ahlukene.
  • Amandla ahlotshaniswa ne-OpenCL ne-OpenMP ukwesekwa anwetshiwe. Ukuxilongwa okuthuthukisiwe kwezifanekiso ze-C++ ezisetshenziswa kuma-agumenti e-OpenCL kernel. Usekelo lwebhulokhi yomugqa oluthuthukisiwe lwe-AMDGPU. Isibaluli se-nonwind sengezwe ngokusobala kuyo yonke imisebenzi. Usekelo oluthuthukisiwe lwemisebenzi eyakhelwe ngaphakathi.
  • Kwengezwe amandla okusebenzisa imvelo eguquguqukayo ye-CLANG_CRASH_DIAGNOSTICS_DIR ukuze kuchazwe uhla lwemibhalo lapho kugcinwa khona idatha yokuxilonga ukuphahlazeka.
  • Ukusekelwa kwe-Unicode kubuyekezwe ekucacisweni kwe-Unicode 15.0. Ezinye izimpawu zezibalo zivunyelwe kuzihlonzi, njengokuthi "β‚Š" (isb. "double xβ‚–β‚Šβ‚").
  • Ukwesekwa okwengeziwe kokulayisha amafayela amaningi okumisa (amafayela okumisa azenzakalelayo alayishwa kuqala, bese kuba lawo acaciswe ngefulegi elithi β€œ--config=", manje elingacaciswa izikhathi eziningi). Kushintshwe uhlelo lokulayisha oluzenzakalelayo lwamafayela okumisa: u-clang uzama ukulayisha ifayela kuqala - .cfg, futhi uma ingatholakali izama ukulayisha amafayela amabili .cfg kanye .cfg. Ukuze ukhubaze ukulayisha amafayela okumisa ngokuzenzakalelayo, ifulegi elithi "--no-default-config" lengeziwe.
  • Ukuqinisekisa ukwakhiwa okuphindaphindwayo, kuyenzeka kushintshwe amanani amanje edethi nesikhathi kumamakhro __DATE__, __TIME__ kanye __TIMESTAMP__ nesikhathi esishiwo kokuhlukahluka kwemvelo kwe-SOURCE_DATE_EPOCH.
  • Ukuze uhlole ukuba khona kwemisebenzi eyakhelwe ngaphakathi (i-builtin) engasetshenziswa kumongo wama-constants, i-macro "__has_constexpr_builtin" yengeziwe.
  • Kwengezwe ifulegi elisha lokuhlanganiswa "-fcoro-aligned-allocation" lokwabiwa kozimele we-coroutine.
  • Ifulegi elithi β€œ-fstrict-flex-arrays=” lisebenzisa usekelo lweleveli yesithathu yokuqinisekiswa kwezinto zamalungu afanayo aguqukayo ezakhiweni (Amalungu E-Flexible Array, uhlu lobukhulu obungenamkhawulo ekugcineni kwesakhiwo). Ezingeni lesithathu, kuphela usayizi "[]" (isibonelo, "int b[]") ophathwa njengohlelo oluvumelana nezimo, kodwa usayizi "[0]" (ngokwesibonelo, "int b[0]") ayiyona.
  • Kwengezwe ifulegi elithi "-fmodule-output" ukuze kunikwe amandla imodeli yokuhlanganisa yesigaba esisodwa kumamojula ajwayelekile e-C++.
  • Kwengezwe imodi ethi "-Rpass-analysis=stack-frame-layout" ukusiza ukuhlonza izinkinga ngesakhiwo sozimele wesitaki.
  • Kwengezwe isici esisha __attribute__((target_version("cpu_features"))) futhi kwanwetshwa ukusebenza kwesichasiso __attribute__((target_clones("cpu_features1","cpu_features2",...))) ukuze ukhethe izinguqulo ezithile zezici ezinikezwe i-Arch64 Ama-CPU.
  • Amathuluzi okuxilonga anwetshiwe:
    • Isexwayiso esingeziwe "-Wsingle-bit-bitfield-constant-conversion" ukuze kutholwe ukunqanyulwa okucacile lapho kwabela eyodwa ku-bitfield esayiniwe ngebhithi elilodwa.
    • Ukuxilongwa kokuguquguquka kwe-constexpr okungasetshenzisiwe kunwetshiwe.
    • Kwengezwe izexwayiso "-Wcast-function-type-strict" kanye "-Wincompatible-function-pointer-types-strict" ukuze kukhonjwe izinkinga ezingaba khona ngokusakazwa kohlobo lomsebenzi.
    • Ukuxilongwa okungeziwe kokusebenzisa amagama emojuli angalungile noma agodliwe kumabhulokhi wokuthekelisa.
    • Ukutholwa okuthuthukisiwe kwamagama angukhiye "okuzenzakalelayo" angekho ezincazelweni.
    • Ukuqaliswa kwesexwayiso esithi "-Winteger-overflow" kungeze amasheke ezimo ezengeziwe eziholela ekuchichimeni.
  • Usekelo olusetshenzisiwe lwesethi yezakhiwo ze-LoongArch (-march=loongarch64 noma -march=la464), esetshenziswa kumaphrosesa e-Loongson 3 5000 kanye nokusebenzisa i-RISC ISA entsha, efana ne-MIPS ne-RISC-V.

Izinto ezintsha ezibalulekile ku-LLVM 16.0:

  • Ikhodi ye-LLVM ivunyelwe ukusebenzisa izici ezichazwe ku-C++17 ejwayelekile.
  • Izidingo zemvelo zokwakha i-LLVM zenyusiwe. Amathuluzi okwakha manje kufanele asekele izinga le-C++17, i.e. Ukuze wakhe, udinga okungenani i-GCC 7.1, Clang 5.0, Apple Clang 10.0 noma i-Visual Studio 2019 16.7.
  • Ingemuva le-Architecture ye-AArch64 yengeza ukusekelwa kwe-Cortex-A715, Cortex-X3 kanye ne-Neoverse V2 CPUs, isihlanganisi se-RME MEC (Izimo Zenkumbulo Yokubethela), izandiso ze-Armv8.3 (Inombolo Eyinkimbinkimbi) kanye Nenguqulo Eningi Ye-Function Multi.
  • Ngasemuva kwezakhiwo ze-ARM, ukusekelwa kwezingxenyekazi eziqondiwe ze-Armv2, Armv2A, Armv3 kanye ne-Armv3M kunqanyuliwe, okungazange kuqinisekiswe ukukhiqizwa kwekhodi efanele. Kwengezwe ikhono lokukhiqiza ikhodi yemiyalelo yokusebenza ngezinombolo eziyinkimbinkimbi.
  • Ingemuva le-architecture ye-X86 yengeze ukwesekwa kwezakhiwo ze-instruction set architectures (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Ukwesekwa okwengeziwe kwe-RDMSRLIST, RMSRLIST kanye nemiyalelo ye-WRMSRNS. Izinketho ezisetshenzisiwe "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" kanye "-mcpu=grandridge".
  • Kwengezwe usekelo olusemthethweni lwenkundla ye-LoongArch.
  • Izingemuva ezithuthukisiwe ze-MIPS, PowerPC kanye ne-RISC-V yezakhiwo
  • Ukwesekwa okwengeziwe kokulungisa iphutha le-64-bit executables yezakhiwo ze-LoongArch kusilungisi sephutha se-LLDB. Ukuphathwa okuthuthukisiwe kwezimpawu zokususa iphutha ze-COFF. Kunikezwe ukuhlungwa kwama-DLL ayimpinda ohlwini lwamamojula alayishiwe e-Windows.
  • Kulabhulali ye-Libc++, umsebenzi oyinhloko ubugxile ekusebenziseni ukusekelwa kwezici ezintsha zamazinga e-C++20 kanye ne-C++23.
  • Isixhumanisi se-LDD sehlisa kakhulu isikhathi sokuxhumanisa ngokuqhathanisa ukuskena kokuthuthwa kwekheli kanye nemisebenzi yokuqalisa isigaba. Kwengezwe ukusekelwa kokucindezelwa kwesigaba kusetshenziswa i-algorithm ye-ZSTD.

Source: opennet.ru

Engeza amazwana