Kutolewa kwa safu ya mkusanyaji ya LLVM 16.0

Baada ya miezi sita ya maendeleo, kutolewa kwa mradi wa LLVM 16.0 kuliwasilishwa - zana ya zana inayoendana na GCC (compilers, viboreshaji na jenereta za msimbo) ambayo inakusanya programu katika bitcode ya kati ya maagizo ya mtandaoni kama RISC (mashine pepe ya kiwango cha chini iliyo na mfumo wa uboreshaji wa ngazi nyingi). Msimbo wa uchapishaji unaozalishwa unaweza kubadilishwa kwa kutumia kikusanyaji cha JIT kuwa maagizo ya mashine moja kwa moja wakati wa utekelezaji wa programu.

Maboresho makubwa katika Clang 16.0:

  • Kiwango chaguomsingi C++/ObjC++ ni gnu++17 (awali gnu++14), ambayo ina maana kwamba vipengele vya C++17 vilivyo na viendelezi vya GNU vinaauniwa kwa chaguomsingi. Ili kurudisha tabia ya awali, unaweza kutumia chaguo la "-std=gnu++14".
  • Vipengele vya juu vilivyotekelezwa vinavyohusiana na kiwango cha C++20:
    • Majukumu maalum ya wanachama kwa masharti madogo,
    • kukamata vifungo vilivyoundwa katika kazi za lambda,
    • Opereta wa usawa ndani ya misemo,
    • Chaguo la kuacha jina la msingi la jina katika muktadha fulani,
    • Uanzishaji wa jumla halali katika mabano (β€œAggr(val1, val2)”).
  • Vipengele vilivyoainishwa katika kiwango cha C++2b cha siku zijazo vimetekelezwa:
    • Inaruhusiwa kuweka lebo mwishoni mwa misemo ya mchanganyiko,
    • mwendeshaji tuli(),
    • mwendeshaji tuli[],
    • Utangamano na aina ya char8_t imehakikishwa,
    • Aina mbalimbali za herufi zinazoruhusiwa kutumika katika "\N{...}" zimepanuliwa
    • Imeongeza uwezo wa kutumia vigeu vilivyotangazwa kama "static constexpr" katika chaguo za kukokotoa zilizotangazwa kama constexpr.
  • Vipengele vilivyofafanuliwa katika C2x ya kawaida ya siku zijazo vimetekelezwa:
    • Ili kuzima onyo la "-Wunused-label", sifa ya "[[labda_unused]]" inaruhusiwa kutumika kwa lebo.
    • Inaruhusiwa kuweka lebo mahali popote ndani ya maneno ambatani,
    • Imeongeza aina na aina ya waendeshaji_wasio na usawa,
    • Aina mpya nullptr_t na nullptr constant ili kufafanua viashiria null ambavyo vinaweza kubadilisha hadi aina yoyote ya kielekezi na kuwakilisha lahaja ya NULL ambayo haifungwi kwa aina kamili na batili*.
    • Katika hali ya C2x, kupiga simu va_start macro na idadi tofauti ya hoja (variadic) inaruhusiwa.
  • Katika hali za kufuata za C99, C11, na C17, chaguo-msingi "-Wimplicit-function-declaration" na "-Wimplicit-int" sasa hutoa hitilafu badala ya onyo.
  • Matumizi yasiyo ya moja kwa moja ya "batili *" (k.m. "void func(void *p) { *p; }") katika modi ya C++ sasa yanazalisha hitilafu, sawa na ISO C++, GCC, ICC na MSVC.
  • Kubainisha sehemu ndogo kama uendeshaji wa maagizo (k.m. "__asm ​​​​{ mov eax, s.bf }") katika vizuizi vya kuunganisha ndani vya mtindo wa Microsoft sasa huzalisha hitilafu.
  • Utambuzi ulioongezwa kwa uwepo wa miundo tofauti na miungano yenye majina sawa katika moduli tofauti.
  • Uwezo unaohusishwa na usaidizi wa OpenCL na OpenMP umepanuliwa. Uchunguzi ulioboreshwa wa violezo vya C++ vinavyotumika katika hoja za kernel za OpenCL. Usaidizi wa kuzuia foleni ulioboreshwa kwa AMDGPU. Sifa ya nomino imeongezwa kwa utendakazi wote. Usaidizi ulioboreshwa kwa vipengele vilivyojengwa ndani.
  • Aliongeza uwezo wa kutumia utofauti wa mazingira wa CLANG_CRASH_DIAGNOSTICS_DIR ili kufafanua saraka ambayo data ya uchunguzi wa kuacha kufanya kazi huhifadhiwa.
  • Usaidizi wa Unicode umesasishwa hadi vipimo vya Unicode 15.0. Baadhi ya alama za hisabati zinaruhusiwa katika vitambulishi, kama vile "β‚Š" (k.m. "double xβ‚–β‚Šβ‚").
  • Usaidizi ulioongezwa wa kupakia faili nyingi za usanidi (faili za usanidi chaguo-msingi hupakiwa kwanza, na kisha zile zilizobainishwa kupitia alama ya "--config=", ambayo sasa inaweza kubainishwa mara kadhaa). Ilibadilisha mpangilio chaguo-msingi wa upakiaji wa faili za usanidi: clang inajaribu kupakia faili kwanza - .cfg, na ikiwa haijapatikana inajaribu kupakia faili mbili .cfg na .cfg. Ili kuzima upakiaji wa faili za usanidi kwa chaguo-msingi, alama ya "--no-default-config" imeongezwa.
  • Ili kuhakikisha miundo inayoweza kurudiwa, inawezekana kuchukua nafasi ya tarehe na thamani za sasa katika makro ya __DATE__, __TIME__ na __TIMESTAMP__ kwa muda uliobainishwa katika tofauti ya mazingira ya SOURCE_DATE_EPOCH.
  • Ili kuangalia uwepo wa kazi zilizojengwa (builtin) ambazo zinaweza kutumika katika muktadha wa mara kwa mara, macro "__has_constexpr_builtin" imeongezwa.
  • Imeongeza bendera mpya ya mkusanyiko "-fcoro-aligned-allocation" kwa ugawaji wa fremu ya utaratibu wa mpangilio.
  • Alama ya "-fstrict-flex-arrays=" hutekeleza usaidizi kwa kiwango cha tatu cha uthibitishaji wa vipengele vya safu vinavyonyumbulika katika miundo (Flexible Array Members, safu ya ukubwa usiojulikana mwishoni mwa muundo). Katika kiwango cha tatu, ni saizi "[]" pekee (kwa mfano, "int b[]") inachukuliwa kama safu inayoweza kunyumbulika, lakini saizi "[0]" (kwa mfano, "int b[0]"). sio.
  • Imeongeza alama ya "-fmodule-output" ili kuwezesha muundo wa ujumuishaji wa awamu moja kwa moduli za kawaida za C++.
  • Hali ya "-Rpass-analysis=stack-frame-layout" imeongezwa ili kusaidia kutambua matatizo na mpangilio wa fremu za rafu.
  • Aliongeza sifa mpya __attribute__((target_version("cpu_features"))) na kupanua utendakazi wa sifa __attribute__((target_clones("cpu_features1","cpu_features2",...)))) ili kuchagua matoleo mahususi ya vipengele vilivyotolewa na Arch64. CPU.
  • Zana za utambuzi zimepanuliwa:
    • Imeongeza onyo "-Wsingle-bit-bitfield-constant-conversion" ili kugundua ukataji kamili wakati wa kugawa moja kwa sehemu ndogo iliyotiwa saini kwa sehemu moja.
    • Uchunguzi wa vigeu vya uninitialized constexpr umepanuliwa.
    • Imeongeza maonyo ya "-Wcast-function-type-strict" na "-Wincompatible-function-pointer-types-strict" ili kutambua matatizo yanayoweza kutokea na utumaji wa aina ya chaguo-tendakazi.
    • Uchunguzi ulioongezwa kwa kutumia majina ya sehemu zisizo sahihi au zilizohifadhiwa katika vizuizi vya kusafirisha.
    • Ugunduzi ulioboreshwa wa kukosa maneno muhimu ya "otomatiki" katika ufafanuzi.
    • Utekelezaji wa onyo la "-Winteger-overflow" umeongeza ukaguzi wa hali za ziada zinazosababisha mafuriko.
  • Usaidizi uliotekelezwa wa usanifu wa seti ya maagizo ya LoongArch (-march=loongarch64 au -march=la464), unaotumika katika vichakataji vya Loongson 3 5000 na kutekeleza RISC ISA mpya, sawa na MIPS na RISC-V.

Ubunifu muhimu katika LLVM 16.0:

  • Msimbo wa LLVM unaruhusiwa kutumia vipengele vilivyofafanuliwa katika kiwango cha C++17.
  • Mahitaji ya mazingira kwa ajili ya ujenzi wa LLVM yameongezwa. Vyombo vya ujenzi vinapaswa sasa kusaidia kiwango cha C ++17, i.e. Ili kujenga, unahitaji angalau GCC 7.1, Clang 5.0, Apple Clang 10.0 au Visual Studio 2019 16.7.
  • Sehemu ya nyuma ya usanifu wa AArch64 inaongeza usaidizi kwa Cortex-A715, Cortex-X3 na Neoverse V2 CPUs, kiunganishi cha RME MEC (Muktadha wa Usimbaji wa Kumbukumbu), viendelezi vya Armv8.3 (Nambari Changamano) na Matoleo mengi ya Kazi.
  • Katika upande wa nyuma wa usanifu wa ARM, usaidizi wa majukwaa lengwa ya Armv2, Armv2A, Armv3 na Armv3M umekatishwa, ambayo utoaji wa msimbo sahihi haukuhakikishwa. Imeongeza uwezo wa kutengeneza msimbo kwa maagizo ya kufanya kazi na nambari changamano.
  • Nyuma ya usanifu wa X86 imeongeza usaidizi wa usanifu wa seti ya maagizo (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT. Usaidizi ulioongezwa kwa maagizo ya RDMSRLIST, RMSRLIST na WRMSRNS. Chaguo zilizotekelezwa "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" na "-mcpu=grandridge".
  • Aliongeza usaidizi rasmi kwa jukwaa la LoongArch.
  • Mipangilio iliyoboreshwa ya usanifu wa MIPS, PowerPC na RISC-V
  • Usaidizi ulioongezwa wa utatuzi wa utekelezaji wa 64-bit kwa usanifu wa LoongArch kwa kitatuzi cha LLDB. Utunzaji ulioboreshwa wa alama za utatuzi za COFF. Hutoa uchujaji wa nakala za DLL katika orodha ya moduli za Windows zilizopakiwa.
  • Katika maktaba ya Libc++, kazi kuu ililenga katika kutekeleza usaidizi wa vipengele vipya vya viwango vya C++20 na C++23.
  • Kiunganishi cha LDD kwa kiasi kikubwa hupunguza muda wa kuunganisha kwa kusawazisha uchanganuzi wa kuhamisha anwani na shughuli za uanzishaji wa sehemu. Usaidizi ulioongezwa kwa ukandamizaji wa sehemu kwa kutumia algoriti ya ZSTD.

Chanzo: opennet.ru

Kuongeza maoni