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

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

Такмилҳо дар Clang 13.0:

  • Дастгирии амалӣ барои зангҳои кафолатноки думдор (дар охири функсия даъват кардани зерпрограмма, ташкили рекурсияи дум, агар зерпрограмма худашро даъват кунад). Дастгирии зангҳои кафолатноки думдор аз ҷониби атрибути "[[clang::musttail]]" дар C++ ва "__attribute__((musttail))" дар C, ки дар изҳороти "return" истифода мешавад, таъмин карда мешавад. Хусусият ба шумо имкон медиҳад, ки оптимизатсияҳоро тавассути ҷойгиркунии код дар итератсияи ҳамвор барои сарфаи истеъмоли стек амалӣ кунед.
  • Эъломияҳои "бо истифода аз" ва васеъшавии зангҳо барои муайян кардани атрибутҳои услуби C++ 11 бо истифода аз формати "[[]]" дастгирӣ мекунанд.
  • Парчами "-Wreserved-identifier" барои нишон додани огоҳӣ ҳангоми муайян кардани идентификаторҳои ҳифзшуда дар рамзи корбар илова карда шуд.
  • Парчамҳои "-Wunused-but-set-parameter" ва "-Wunused-but-set-variable" барои намоиш додани огоҳӣ, агар параметр ё тағирёбанда таъин шуда бошад, аммо истифода нашавад, илова карда шуд.
  • Парчами "-Wnull-pointer-subtraction" илова карда шуд, то огоҳӣ диҳад, агар код метавонад рафтори номуайянро аз сабаби истифодаи нишондиҳандаи нул дар амалиёти тарҳкунӣ ҷорӣ кунад.
  • Парчами "-fstack-usage" илова карда шуд, то барои ҳар як файли код файли иловагии ".su"-ро тавлид кунад, ки дорои маълумот дар бораи андозаи чаҳорчӯбаҳои стек барои ҳар як функсияи дар файли коркардшаванда муайяншуда.
  • Ба анализатори статикӣ навъи нави баромад – “sarif-html” илова карда шуд, ки боиси тавлиди гузоришҳо дар як вақт дар форматҳои HTML ва Sarif мегардад. Санҷиши нави allocClassWithName илова карда шуд. Ҳангоми муайян кардани варианти "-analyzer-display-progress", вақти таҳлили ҳар як функсия нишон дода мешавад. Анализатори интеллектуалии нишондиҳанда (alpha.cplusplus.SmartPtr) қариб омода аст.
  • Имкониятҳои марбут ба дастгирии OpenCL васеъ карда шуданд. Дастгирии иловашуда барои васеъшавии cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields ва __cl_clang_non_portable_kernel_param_types. Татбиқи мушаххасоти OpenCL 3.0 идома ёфт. Барои C, мушаххасоти OpenCL 1.2 ба таври нобаёнӣ истифода мешавад, агар версияи дигар ба таври возеҳ интихоб карда нашавад. Барои C++, дастгирии файлҳо бо тамдиди ".clcpp" илова карда шудааст.
  • Дастгирии директиваҳои табдилдиҳии давр (“#pragma omp unrol” ва “#pragma omp tile”), ки дар мушаххасоти OpenMP 5.1 муайян шудаанд, амалӣ карда шуд.
  • Имконоти иловашуда ба утилитаи clang-format: SpacesInLineCommentPrefix барои муайян кардани шумораи ҷойҳо пеш аз шарҳҳо, IndentAccessModifiers, LambdaBodyIndentation ва PPIndentWidth барои назорат кардани ҳамоҳангии вурудҳо, ифодаҳои ламбда ва дастурҳои пешазпросессор. Имкониятҳои мураттабсозии рӯйхати файлҳои сарлавҳа (SortIncludes) васеъ карда шуданд. Дастгирии иловашуда барои формат кардани файлҳои JSON.
  • Қисми зиёди чекҳои нав ба linter clang-tidy илова карда шуданд.

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

  • Опсияи "-ehcontguard" барои истифодаи технологияи CET (Windows Control-flow Enforcement Technology) барои муҳофизат аз иҷрои истисморҳое, ки бо истифода аз усулҳои баргардонидани барномасозӣ (ROP) дар марҳилаи коркарди истисно сохта шудаанд, илова карда шуд.
  • Лоиҳаи debuginfo-test ба номи санҷишҳои байнисоҳавӣ иваз карда шуд ва барои санҷиши ҷузъҳои лоиҳаҳои гуногун тарҳрезӣ шудааст, на танҳо бо иттилооти ислоҳи ислоҳ.
  • Системаи васлкунӣ барои сохтани якчанд дистрибюторҳо дастгирӣ мекунад, масалан, яке бо хидматрасонӣ ва дигаре бо китобхонаҳо барои таҳиягарон.
  • Дар пуштибонии меъмории AArch64, дастгирии васеъшавии Armv9-A RME (Extension Management Realm) ва SME (Scalable Matrix Extension) дар ассемблер амалӣ карда мешавад.
  • Дастгирии ISA V68/HVX ба пуштибонии меъмории Hexagon илова карда шудааст.
  • Бозгашти x86 дастгирии протсессори AMD Zen 3-ро беҳтар кардааст.
  • Дастгирии GFX1013 RDNA2 APU ба пуштибонии AMDGPU илова карда шуд.
  • Libc++ татбиқи хусусиятҳои нави стандартҳои C++20 ва C++2b, аз ҷумла анҷоми китобхонаи “консепсияҳо”-ро идома медиҳад. Дастгирии иловашуда барои std :: filesystem барои платформаи Windows дар асоси MinGW. Файлҳои сарлавҳа ҷудо карда шудаанд , Ва . Опсияи сохтани LIBCXX_ENABLE_INCOMPLETE_FEATURES барои хомӯш кардани файлҳои сарлавҳа бо функсияи пурра иҷронашуда илова карда шуд.
  • Имкониятҳои пайвандгари LLD васеъ карда шуданд, ки дар он дастгирии протсессори Big-endian Aarch64 амалӣ карда мешавад ва пуштибонии Mach-O ба ҳолате оварда шудааст, ки имкон медиҳад бо барномаҳои муқаррарӣ пайваст карда шавад. Такмилҳое, ки барои пайваст кардани Glibc бо истифода аз LLD лозиманд.
  • Утилитаи llvm-mca (Machine Code Analyzer) дастгирии протсессорҳоро илова кардааст, ки дастурҳоро бо тартиб иҷро мекунанд (қубури суперскалярӣ), ба монанди ARM Cortex-A55.
  • Debuger LLDB барои платформаи AArch64 дастгирии пурраи Authentication Pointer, MTE (MemTag, Memory Tagging Extension) ва регистрҳои SVE-ро таъмин мекунад. Фармонҳои иловашуда, ки ба шумо имкон медиҳанд, ки тегҳоро ба ҳар як амалиёти ҷудокунии хотира пайваст кунед ва санҷиши нишондодро ҳангоми дастрасӣ ба хотира ташкил кунед, ки бояд бо теги дуруст алоқаманд бошад.
  • Debuger LLDB ва интерфейс барои забони Fortran - Flang ба ассамблеяҳои дуӣ, ки аз ҷониби лоиҳа тавлид шудааст, илова карда шуданд.

Манбаъ: opennet.ru

Илова Эзоҳ