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

Пас аз шаш моҳи таҳия, LLVM 22.1.0 бароварда шуд. Он абзорҳоеро (компилятсиякунандагон, оптимизаторҳо ва генераторҳои рамз) таҳия мекунад, ки барномаҳоро ба рамзи миёнаравии дастурҳои виртуалии монанд ба RISC (мошини виртуалии сатҳи паст бо системаи оптимизатсияи бисёрсатҳа) тартиб медиҳанд. Псевдокоди тавлидшударо метавон ба рамзи мошинӣ барои платформаи мақсадноки додашуда табдил дод ё аз ҷониби компилятори just-in-time (JIT) барои тавлиди дастурҳои мошинӣ мустақиман ҳангоми иҷрои барнома истифода бурд. Бар асоси технологияҳои LLVM, лоиҳа компилятори Clang-ро таҳия мекунад, ки забонҳои барномасозии C, C++ ва Objective-C-ро дастгирӣ мекунад. Аз шохаи 18.x сар карда, лоиҳа ба схемаи рақамгузории версияи нав гузашт, ки мувофиқи он ҳангоми таҳия версияи 0 ("N.0") истифода мешавад ва версияи аввали устувор "N.1" рақамгузорӣ шудааст.

Такмилҳо дар Clang 22 иборатанд аз:

  • Дастгирии токенҳои тақсимоти хотира (Tokens Allocation) барои қайд кардани амалиётҳои тақсимоти хотира, ки бо истифода аз функсияҳо ба монанди malloc бо идентификатори беназир иҷро мешаванд, илова карда шуд. Токенҳои тақсимот имкон медиҳанд, ки маълумоти тӯда сохта шавад, ошкоркунии ихроҷи хотира содда карда шавад ва гурӯҳбандии объектҳо дар асоси мақсад ё намунаҳои тағирот (масалан, ҷудо кардани маълумоти "гарм" аз "хунук") имконпазир гардад. Барои фаъол кардан, аз парчами "-fsanitize=alloc-token" истифода баред.
  • Хусусиятҳои марбут ба забони C:
    • Мушаххасоти лоиҳавӣ, ки механизми иҷрои таъхирёфтаи "департамент"-ро муайян мекунад, амалӣ карда шуд, ки имкон медиҳад, ки амалҳо ҳангоми баромадан аз доираи ҷорӣ иҷро карда шаванд. Барои фаъол кардани дастгирии "департамент" парчами "-fdefer-ts" илова карда шуд.
    • Функсияи дарунсохти __builtin_stack_address() илова карда шуд, ки функсияи шабеҳро дар GCC инъикос мекунад. Ин функсия суроғаи стекро бармегардонад, ки майдони стекии функсияи ҷории __builtin_stack_address()-ро даъват мекунад ва функсияҳои минбаъдаеро, ки он даъват мекунад, ҷудо мекунад.
  • Имкониятҳое, ки барои стандарти ояндаи C2y таҳия мешаванд:
    • Дастгирии ҳалқаҳои номгузорӣ илова карда шуд, ки ба шумо имкон медиҳад ба ҳалқаҳо ва операторҳои switch номҳо таъин кунед, ки онҳоро дар операторҳои break ва continue муайян кардан мумкин аст, то ҳалқаи аз он баромаданро ба таври возеҳ муайян кунанд. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // go to CONT1 continue outer; // go to CONT2 // CONT1 } // CONT2 }
    • Татбиқи макрои дарунсохти "__COUNTER__", ки барои тавлиди номҳои беназири идентификаторҳо пешбинӣ шудааст, васеъ ва ба стандарт дохил карда шудааст. Ҳадди даъвати 2147483647 ба ин макро муқаррар карда шудааст; аз ҳад зиёд шудан аз ин маҳдудият боиси хатогӣ мегардад.
    • Ҳангоми истифодаи функсияҳои статикӣ ё тағирёбандаҳо дар дохили функсияҳое, ки ҳамчун "extern inline" эълон шудаанд, огоҳӣ (-Wstatic-in-line) хориҷ карда шуд.
  • Имкониятҳое, ки дар стандарти C23 C муайян шудаанд:
    • Файли сарлавҳаи float.h ҳоло макросҳои FLT_SNAN, DBL_SNAN ва LDBL_SNAN-ро дастгирӣ мекунад, ки арзишҳои NaN-и сигналшударо (ҳангоми истифода дар амалҳои арифметикӣ истисно ба вуҷуд меорад) барои намудҳои float, double ва long double амалӣ мекунанд.
    • Хатогие ислоҳ карда шуд, ки дар он намудҳои гуногуни беном дар дохили як воҳиди тарҷума ҳамчун мувофиқ ҳисобида мешуданд, агар онҳо майдонҳои якхела дошта бошанд.
    • Парчами "-MG", ки барои нодида гирифтани файлҳои сарлавҳаи гумшуда ҳангоми сканкунии вобастагӣ истифода мешуд, ба дастурҳои "#embed" васеъ карда шуд ва ҳоло хатогии "file not found"-ро ҳангоми гум шудани файли дар дастури "#embed" муайяншуда пахш мекунад.
  • Хусусиятҳои марбут ба C++:
    • Имконияти истифодаи пайвандҳои сохторӣ дар контексти "constexpr", чунон ки дар мушаххасоти C++2c (C++26) таҳия шудааст, илова карда шуд. Ин маънои онро дорад, ки истинодҳо ба ифодаҳои доимӣ акнун метавонанд худашон ифодаҳои доимӣ бошанд. Дастгирӣ барои массивҳо ва сохторҳои оддӣ амалӣ карда мешавад (туплҳо ҳанӯз дастгирӣ намешаванд). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Тибқи талаботи стандарти C++20, маҳдудиятҳо ҳоло пеш аз санҷиш ба шакли стандартӣ табдил дода мешаванд, ки имкон медиҳад паёмҳои ташхисии дақиқтар ва коркарди дурусти хатогиҳои ивазкунӣ дар аргументҳои шаблон, ки танҳо дар concept-id истифода мешаванд, таъмин карда шаванд.
    • Барои фаҳмидани он, ки оё операторҳои муқоисавии "<", ">", "<=" ва ">=" аз оператори "<=>" синтез карда шудаанд, як оилаи функсияҳои дарунсохт "__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship" илова карда шуд.
    • Параметри "-Wincompatible-pointer-types" барои баровардани хато ба ҷои огоҳӣ иваз карда шудааст. Барои баргаштан ба рафтори қаблӣ, аз имконоти "-Wno-error=incompatible-pointer-types" истифода баред.
  • Функсияҳои дарунсохт илова карда шуданд: __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter ва __builtin_dedup_pack. Масалан, builtin_dedup_pack ба шумо имкон медиҳад, ки нусхабардориро аз рӯйхати намудҳо тоза кунед: бо истифода аз MyTypeList = TypeList<__builtin_dedup_pack …>; // намуди натиҷа TypeList хоҳад буд
  • Ҳангоми ислоҳи рафтори номуайян бо UBSan (-fsanitize=undefined -fsanitize-trap=undefined), маълумоти сабаби хатогӣ ҳоло дар маълумоти ислоҳи хатогии тавлидшуда дохил карда мешавад. Барои муайян кардани сатҳи тафсилот дар маълумоти хатогӣ, парчами "-fsanitize-debug-trap-reasons" илова карда шудааст. Онро барои тавсифҳои умумӣ (масалан, "Иловакунии бутун аз ҳад зиёд пур шуд") ба "basic" ва барои дохил кардани маълумоти муфассал (масалан, "Иловакунии бутуни имзошуда дар 'a + b') ба "detailed" муқаррар кардан мумкин аст.
  • Парчамҳои нави компилятор илова карда шуданд:
    • "-f[no-]sanitize-debug-trap-reasons" барои назорат кардани он, ки оё сабабҳои истисноӣ дар маълумоти ислоҳи хато ҳангоми тартиб додан бо режими "-fsanitize-trap" ҷойгир карда шудаанд ё не.
    • "-fsanitize=alloc-token", "-falloc-token-max", "-fsanitize-alloc-token-fast-abi" ва "-fsanitize-alloc-token-extended"-ро барои идоракунии токенҳои тақсимоти хотира истифода баред.
    • "-fmatrix-memory-layout" барои идоракунии тарҳбандии хотираи намудҳои матритсаҳо (масалан, column-major барои сутуни асосӣ, row-major барои сатри асосӣ).
  • Функсияҳо ҳоло атрибути "malloc_span" доранд, ки ба атрибути malloc монанд аст, аммо барои функсияҳое, ки сохторҳои монанд ба span-ро, ки дорои нишондиҳанда ва майдон бо андоза ё нишондиҳанда ба охири блок мебошанд, бармегардонанд, татбиқ мешаванд.
  • Атрибути "modular_format" илова карда шуд, то татбиқи зарурии статикӣ пайвастшудаи функсияи printf-ро дар вақти пайвастшавӣ ба таври динамикӣ интихоб кунед.
  • Воситаҳои ташхисӣ ва таҳлили статикӣ васеъ карда шуданд, санҷишҳои нав илова карда шуданд (даҳҳо беҳбудиҳои марбут ба ташхис).
  • Ба сервери X86 хусусиятҳои иловагии дохилӣ барои васеъкуниҳои SSE, AVX ва AVX512 илова карда шуданд. Режимҳои сохтмон барои CPU-ҳои Intel, ки бар асоси микроархитектураҳои Wildcat Lake (-march=wildcatlake) ва Nova Lake (-march=novalake) асос ёфтаанд, илова карда шуданд.
  • Акнун сервери AArch64 протсессорҳои Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) ва Arm C1-Ultra (c1-ultra)-ро дастгирӣ мекунад. Функсияҳои иловагии дарунсохт барои дастурҳои FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US] ва FCVTA[US] илова карда шудаанд. Дастгирии бисёрверсиявии функсия (FMV) устувор карда шудааст. Истифодабарандагон акнун метавонанд афзалияти версияҳои гуногуни функсияро бекор кунанд.
  • Дастгирии меъмории LoongArch32 (LA32R, LA32S) илова карда шуд.
  • Бэкэндҳои беҳтаршуда барои меъмориҳои ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly ва PowerPC.

Манбаъ: opennet.ru

Хостинги боэътимодро барои сайтҳо бо муҳофизати DDoS, серверҳои VPS VDS харед 🔥 Харидани хостинги боэътимоди вебсайт бо муҳофизати DDoS, серверҳои VPS VDS | ProHoster