Нашри маҷмӯи компилятори LLVM 16.0

Пас аз шаш моҳи таҳия, нашри лоиҳаи LLVM 16.0 муаррифӣ шуд - як абзори мувофиқи GCC (компиляторҳо, оптимизаторҳо ва генераторҳои код), ки барномаҳоро ба биткоди фосилавии дастурҳои виртуалии ба RISC монанд (мошини виртуалии сатҳи пасти дорои системаи оптимизатсияи бисёрсатҳа). Псевдокоди тавлидшуда метавонад бо истифода аз компилятори JIT ба дастурҳои мошин бевосита дар вақти иҷрои барнома табдил дода шавад.

Такмилҳои асосӣ дар Clang 16.0:

  • Стандарти пешфарз C++/ObjC++ gnu++17 (қаблан gnu++14) мебошад, ки маънои онро дорад, ки хусусиятҳои C++17 бо васеъшавии GNU бо нобаёнӣ дастгирӣ мешаванд. Барои баргардонидани рафтори қаблӣ, шумо метавонед опсияи "-std=gnu++14"-ро истифода баред.
  • Имкониятҳои пешрафтаи марбут ба стандарти C++ 20:
    • Функсияҳои махсуси узвҳои шартан ночиз,
    • гирифтани пайвандҳои сохторӣ дар функсияҳои ламбда,
    • Оператори баробарӣ дар дохили ифодаҳо,
    • Опсияи дар баъзе контекстҳо партофтани калимаи калидии typename,
    • Оғозсозии маҷмӯи эътибор дар қавс ("Aggr(val1, val2)").
  • Хусусиятҳое, ки дар стандарти ояндаи C++2b муайян шудаанд, амалӣ карда шуданд:
    • Ҷойгир кардани тамғакоғазҳо дар охири ибораҳои мураккаб иҷозат дода мешавад,
    • оператори статикӣ (),
    • оператори статикӣ[],
    • Мутобиқат бо намуди char8_t таъмин карда мешавад,
    • Доираи аломатҳое, ки барои истифода дар "\N{...}" иҷозат дода шудаанд, васеъ карда шуд
    • Имконияти истифодаи тағирёбандаҳое, ки ҳамчун "constexpr static" эълон шудаанд, дар функсияҳои ҳамчун constexpr эълоншуда илова карда шуданд.
  • Хусусиятҳое, ки дар оянда C-стандарти C2x муайян шудаанд, амалӣ карда шуданд:
    • Барои хомӯш кардани огоҳии "-Wunused-label", атрибути "[[maybe_unused]]" иҷозат дода мешавад, ки ба нишонаҳо татбиқ карда шавад
    • Ҷойгир кардани тамғакоғазҳо дар ҳама ҷо дар дохили ибораҳои мураккаб иҷозат дода мешавад,
    • Иловаи операторҳои typeof ва typeof_unqual,
    • Навъи нави nullptr_t ва доимии nullptr барои муайян кардани нишондиҳандаҳои нул, ки метавонанд ба ҳама гуна намуди нишондиҳанда табдил дода шаванд ва варианти NULL-ро намояндагӣ кунанд, ки ба намудҳои бутун ва void* вобаста нест.
    • Дар реҷаи C2x занг задан ба макроси va_start бо шумораи тағйирёбандаи аргументҳо (вариадикӣ) иҷозат дода мешавад.
  • Дар шеваҳои мувофиқати C99, C11 ва C17, имконоти пешфарз "-Wimplicit-function-declaration" ва "-Wimplicit-int" акнун ба ҷои огоҳӣ хато эҷод мекунанд.
  • Истифодаи ғайримустақими "void *" (масалан, "void func(void *p) { *p; }") дар реҷаи C++ ҳоло хатоеро ба вуҷуд меорад, ки ба ISO C++, GCC, ICC ва MSVC монанд аст.
  • Муайян кардани майдонҳои бит ҳамчун операндҳои дастурӣ (масалан, "__asm  {mov eax, s.bf }") дар блокҳои монтажи дохилии сабки Microsoft ҳоло хаторо ба вуҷуд меорад.
  • Иловаи ташхис барои мавҷудияти сохторҳо ва иттиҳодияҳои гуногун бо як ном дар модулҳои гуногун.
  • Имкониятҳои марбут ба дастгирии OpenCL ва OpenMP васеъ карда шуданд. Ташхиси мукаммал барои қолибҳои C++, ки дар аргументҳои ядрои OpenCL истифода мешаванд. Дастгирии мукаммали блоки навбат барои AMDGPU. Хусусияти nounwind ба ҳама функсияҳо илова карда мешавад. Дастгирии беҳтар барои функсияҳои дарунсохт.
  • Имконияти истифодаи тағирёбандаи муҳити CLANG_CRASH_DIAGNOSTICS_DIR барои муайян кардани феҳрист, ки дар он маълумоти ташхиси садама захира карда мешавад, илова карда шуд.
  • Дастгирии Юникод ба мушаххасоти Юникод 15.0 навсозӣ шудааст. Баъзе аломатҳои математикӣ дар идентификаторҳо иҷозат дода шудаанд, ба монанди "₊" (масалан, "дучандон xₖ₊₁").
  • Дастгирии иловашуда барои боркунии файлҳои конфигуратсияи сершумор (файлҳои конфигуратсияи пешфарз аввал бор карда мешаванд ва баъд файлҳое, ки тавассути парчами “--config=” муайян карда мешаванд, ки ҳоло онҳоро чанд маротиба муайян кардан мумкин аст). Тартиби пешфарзии файлҳои конфигуратсияро тағир дод: clang кӯшиш мекунад, ки аввал файлро бор кунад - .cfg, ва агар он ёфт нашавад, кӯшиш мекунад, ки ду файлро бор кунад .cfg ва .cfg. Барои хомӯш кардани боркунии файлҳои конфигуратсия бо нобаёнӣ, парчами "--no-default-config" илова карда шудааст.
  • Барои таъмини сохтани такроршаванда, мумкин аст, ки арзишҳои сана ва вақти ҷорӣ дар макросҳои __DATE__, __TIME__ ва __TIMESTAMP__ бо вақти дар тағирёбандаи муҳити SOURCE_DATE_EPOCH муқарраршуда иваз карда шаванд.
  • Барои санҷидани мавҷудияти функсияҳои дарунсохт (сохташуда), ки метавонанд дар контексти доимӣ истифода шаванд, макроси "__has_constexpr_builtin" илова карда шудааст.
  • Парчами нави компилятсионӣ "-fcoro-aligned-allocation" барои тақсимоти чаҳорчӯбаи ҳамоҳангшудаи корутинӣ илова карда шуд.
  • Парчами "-fstrict-flex-arrays=" дастгирии сатҳи сеюми санҷиши унсурҳои массиви чандирро дар сохторҳо амалӣ мекунад (Аъзоёни массиви чандир, массиви андозаи номуайян дар охири сохтор). Дар сатҳи сеюм танҳо андозаи "[]" (масалан, "int b[]") ҳамчун массиви чандир баррасӣ мешавад, аммо андозаи "[0]" (масалан, "int b[0]") нест.
  • Парчами "-fmodule-output" илова карда шуд, то модели компиляцияи якфазаро барои модулҳои стандартии C++ фаъол созад.
  • Ҳолати "-Rpass-analysis=stack-frame-layout" илова карда шуд, то дар ташхиси мушкилот бо тарҳбандии чаҳорчӯбаи стек кӯмак расонад.
  • Иловаи аттрибути нав __attribute__((target_version("cpu_features"))) ва васеъ кардани функсияи аттрибут __attribute__((target_clones("cpu_features1","cpu_features2",...))) барои интихоби версияҳои мушаххаси хусусиятҳои аз ҷониби AArch64 пешниҳодшуда CPUs.
  • Воситаҳои ташхис васеъ карда шуданд:
    • Огоҳии иловагии "-Wsingle-bit-bitfield-constant-conversion" барои ошкор кардани ихтисори номуайян ҳангоми таъини як ба битфилди як-битаи имзошуда.
    • Ташхиси тағирёбандаҳои constexpr-и оғознашуда васеъ карда шуд.
    • Огоҳиҳои "-Wcast-function-type-strict" ва "-Wincompatible-function-pointer-types-strict" барои муайян кардани мушкилоти эҳтимолӣ бо рехтани навъи функсия илова карда шуданд.
    • Иловаи ташхис барои истифодаи номҳои модулҳои нодуруст ё ҳифзшуда дар блокҳои содиротӣ.
    • Муайянкунии беҳтари калимаҳои калидии "авто" дар таърифҳо.
    • Татбиқи огоҳии "-Winteger-overflow" санҷишҳои ҳолатҳои иловагиро, ки ба обхезӣ оварда мерасонанд, илова кардааст.
  • Дастгирии амалӣ барои меъмории маҷмӯи дастурҳои LoongArch (-march=loongarch64 ё -march=la464), ки дар Loongson 3 5000 протсессор истифода мешавад ва татбиқи RISC ISA-и нави шабеҳ ба MIPS ва RISC-V.

Навовариҳои асосӣ дар LLVM 16.0:

  • Ба рамзи LLVM иҷозат дода мешавад, ки унсурҳои дар стандарти C++17 муайяншударо истифода барад.
  • Талаботи муҳити зист барои сохтани LLVM зиёд карда шуд. Воситаҳои сохтмон ҳоло бояд стандарти C++ 17-ро дастгирӣ кунанд, яъне. Барои сохтан ба шумо ҳадди аққал GCC 7.1, Clang 5.0, Apple Clang 10.0 ё Visual Studio 2019 16.7 лозим аст.
  • Дар пушти меъмории AArch64 дастгирии Cortex-A715, Cortex-X3 ва Neoverse V2 CPUs, ассемблер барои RME MEC (Контекстҳои рамзгузории хотира), васеъшавии Armv8.3 (Рақами мураккаб) ва Функсияи Multi Versioning илова мекунад.
  • Дар пуштибонии меъмории ARM, дастгирии платформаҳои ҳадафии Armv2, Armv2A, Armv3 ва Armv3M қатъ карда шуд, ки барои онҳо тавлиди коди дуруст кафолат дода нашудааст. Имконияти тавлиди код барои дастурҳо барои кор бо рақамҳои мураккаб илова карда шуд.
  • Дар пушти меъмории X86 дастгирии меъмории маҷмӯи дастурҳо (ISAs) AMX-FP16, CMPCCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT-ро илова кардааст. Дастгирии иловагӣ барои дастурҳои RDMSRLIST, RMSRLIST ва WRMSRNS. Вариантҳои амалӣ "-mcpu=raptorlake", "-mcpu=meteorlake", "-mcpu=emeraldrapids", "-mcpu=sierraforest", "-mcpu=graniterapids" ва "-mcpu=grandridge".
  • Дастгирии расмӣ барои платформаи LoongArch илова карда шуд.
  • Барқарорсозии такмилёфта барои меъмории MIPS, PowerPC ва RISC-V
  • Дастгирии изофа барои ислоҳи файлҳои иҷрошавандаи 64-бит барои меъмории LoongArch ба ислоҳкунандаи LLDB. Муносибати беҳтаршудаи рамзҳои ислоҳи COFF. Филтркунии DLL-ҳои такрорӣ дар рӯйхати модулҳои боркардаи Windows таъмин карда шудааст.
  • Дар китобхонаи Libc++ кори асосӣ ба татбиқи дастгирии хусусиятҳои нави стандартҳои C++20 ва C++23 нигаронида шуда буд.
  • Пайвасткунаки LDD тавассути параллелизатсияи сканеркунии кӯчонидани суроғаҳо ва амалиёти оғозкунии қисмат вақти пайвастшавиро ба таври назаррас коҳиш медиҳад. Дастгирии иловашуда барои фишурдани бахш бо истифода аз алгоритми ZSTD.

Манбаъ: opennet.ru

Илова Эзоҳ