Нашри маҷмӯи компилятори GCC 12

Пас аз як соли рушд, маҷмӯи компиляторҳои ройгони GCC 12.1 бароварда шуд, ки аввалин нашри муҳим дар филиали нави GCC 12.x. Тибқи нақшаи рақамгузории нави релиз, версияи 12.0 дар раванди таҳия истифода мешуд ва чанде пеш аз нашри GCC 12.1, филиали GCC 13.0 аллакай шоха шуда буд, ки дар асоси он версияи навбатии версияи асосии GCC 13.1 хоҳад буд. ташкил карда шавад. Рӯзи 23 май лоиҳа 35-солагии таъсиси нашри якуми GCC-ро ҷашн мегирад.

Тағйироти асосӣ:

  • Дастгирии иловашуда барои формати ислоҳи CTF (Format Type Compact), ки нигоҳдории паймонеро дар бораи намудҳои C, пайвастшавӣ байни функсияҳо ва рамзҳои ислоҳиро таъмин мекунад. Вақте ки дар объектҳои ELF ворид карда мешавад, формат имкон медиҳад, ки ҷадвалҳои аломатҳои EFL барои пешгирӣ кардани такрори маълумот истифода шаванд.
  • Дастгирии формати нигоҳдории иттилооти ислоҳи "STABS", ки дар солҳои 1980-ум сохта шудааст, бекор карда шудааст.
  • Кор барои тавсеаи дастгирии стандартҳои ояндаи C2X ва C++23 барои забонҳои C ва C++ идома дорад. Масалан, дастгирии ифодаи «агар констевал» илова карда шудааст; иҷозат дода мешавад, ки auto дар аргументҳои функсия истифода шавад (“f(auto(g()))”); истифодаи тағирёбандаҳои ғайримуқаррарӣ, goto ва нишонаҳо дар функсияҳои ҳамчун constexpr эълоншуда иҷозат дода мешавад; дастгирии иловашуда барои операторҳои индекси бисёрченака оператор[]; дар агар, барои ва гузариш, имкониятҳои блокҳои оғозёбӣ васеъ карда шуда бошанд («барои (бо истифода аз T = int; T e : v)»).
  • Китобхонаи стандартии C++ дастгирии бахшҳои таҷрибавии стандартҳои C++20 ва C++23-ро беҳтар кардааст. Дастгирии иловашуда барои std::move_only_function, , std::basic_string::resize_and_overwrite, , ва std::invoke_r. Иҷозат дода мешавад, ки std::unique_ptr, std::vector, std::basic_string, std::optional ва std::variant дар функсияҳои constexpr.
  • Фронти Fortran барои мушаххасоти TS 29113, ки қобилиятҳои таъмини интиқол байни коди Fortran ва C-ро тавсиф мекунад, ҳамаҷониба дастгирӣ мекунад.
  • Дастгирии иловашуда барои васеъшавии __builtin_shufflevector(vec1, vec2, index1, index2, ...) қаблан ба Clang илова шуда буд, ки занги ягонаро барои иҷрои амалиёти муштараки векторӣ ва омехта пешниҳод мекунад.
  • Ҳангоми истифодаи сатҳи оптимизатсияи "-O2", векторизатсия ба таври нобаёнӣ фаъол карда мешавад (реҷаҳои -ftree-vectorize ва -fvect-cost-model = хеле арзон фаъол карда шудаанд). Модели хеле арзон ба векторизатсия имкон медиҳад, ки агар рамзи вектор рамзи скаляри векторизатсияшударо пурра иваз карда тавонад.
  • Ҳолати "-ftrivial-auto-var-init" илова карда шуд, то ба таври возеҳ оғоз кардани тағирёбандаҳо дар стек барои пайгирии мушкилот ва масдуд кардани осебпазириҳои марбут ба истифодаи тағирёбандаҳои ибтидоӣ.
  • Барои забонҳои C ва C++, функсияи дарунсохт __builtin_dynamic_object_size барои муайян кардани андозаи объект илова карда шудааст, ки бо функсияи шабеҳи Clang мувофиқ аст.
  • Барои забонҳои C ва C++, дастгирии атрибути "дастнорас" илова карда шудааст (масалан, шумо метавонед функсияҳоеро қайд кунед, ки ҳангоми кӯшиши истифода бурдани онҳо хатогӣ эҷод мекунанд).
  • Барои забонҳои C ва C++, дастгирии дастурҳои коркарди пешакӣ "#elifdef" ва "#elifndef" илова карда шудааст.
  • Парчами "-Wbidi-chars" барои намоиш додани огоҳӣ дар сурати нодуруст истифода шудани аломатҳои UTF-8 илова карда шуд, ки тартиби намоиши матни дуҷонибаро тағир медиҳад.
  • Барои нишон додани огоҳӣ ҳангоми кӯшиши муқоисаи ду операнд, ки ба массивҳо дахл доранд, парчами "-Warray-compare" илова карда шуд.
  • Татбиқи стандартҳои OpenMP 5.0 ва 5.1 (Open Multi-Processing), ки API ва усулҳои татбиқи усулҳои барномасозии параллелӣ дар системаҳои бисёраслӣ ва гибридӣ (CPU+GPU/DSP) бо хотираи муштарак ва воҳидҳои векторизатсия (SIMD) муайян мекунанд. , давом дод.
  • Татбиқи мукаммали мушаххасоти барномасозии параллелӣ OpenACC 2.6, ки асбобҳоро барои амалиёти борфарорӣ дар GPU ва протсессори махсус ба монанди NVIDIA PTX муайян мекунад.
  • Дастгирии дастурҳои васеъи Intel AVX86-FP512 ва навъи _Float16 ба пуштибонии тавлиди код барои меъмории x16 илова карда шудааст.
  • Барои меъмории x86, муҳофизат аз осебпазирии протсессорҳо, ки дар натиҷаи иҷрои тахминии дастурҳо пас аз амалиёти бечунучаро ҷаҳиши пеш ба вуҷуд омадаанд, илова карда шудааст. Мушкилот аз сабаби коркарди пешакии дастурҳо фавран пас аз дастури филиал дар хотира (SLS, Straight Line Speculation) ба амал меояд. Барои фаъол кардани муҳофизат, варианти "-mharden-sls" пешниҳод карда мешавад.
  • Муайян кардани истифодаи тағирёбандаҳои ибтидоӣ ба таҳлилгари статикии таҷрибавӣ илова карда шудааст. Дастгирии ибтидоӣ барои таҳлили коди васлкунӣ дар варақаҳои дохилӣ илова карда шуд. Пайгирии беҳтаршудаи хотира. Рамзи коркарди ифодаҳои гузариш аз нав навишта шудааст.
  • Илова 30 занги нав ба libgccjit, китобхонаи муштарак барои ворид кардани генератори код ба равандҳои дигар ва истифодаи он барои JIT тартиб додани байткод ба коди мошин.
  • Дастгирии механизми CO-RE (Compile Once - Run Everywhere) ба пуштибонӣ барои тавлиди байткоди BPF илова карда шудааст, ки ба шумо имкон медиҳад, ки рамзи барномаҳои eBPF-ро барои ядрои Linux танҳо як маротиба тартиб диҳед ва боркунаки махсуси универсалиро истифода баред, ки барнома ба ядрои ҷорӣ ва Формат намудҳои BPF бор карда шудааст). CO-RE мушкилоти интиқоли барномаҳои тартибдодашудаи eBPF-ро ҳал мекунад, ки қаблан онҳоро танҳо дар версияи ядрое, ки барои онҳо тартиб дода шуда буданд, истифода бурдан мумкин буд, зеро мавқеи элементҳо дар сохторҳои додаҳо аз версия ба версия тағйир меёбад.
  • Бозгашти RISC-V барои васеъшавии меъмории маҷмӯи дастурҳои нави zba, zbb, zbc ва zbs, инчунин васеъшавии ISA барои амалиёти криптографии векторӣ ва скалярӣ дастгирӣ мекунад. Бо нобаёнӣ, дастгирӣ барои мушаххасоти RISC-V ISA 20191213 таъмин карда мешавад.. Парчами -mtune=thead-c906 барои фаъолсозии оптимизатсия барои ядроҳои T-HEAD c906 илова карда шудааст.
  • Дастгирии навъи __int128_t/integer(kind=16) ба пуштибонии тавлиди код барои GPU-ҳои AMD дар асоси микроархитектураи GCN илова карда шудааст. Барои ҳар як воҳиди ҳисоббарор (CU) то 40 гурӯҳи корӣ ва дар як гурӯҳ то 16 фронти дастурӣ (фронти мавҷ, маҷмӯи риштаҳое, ки дар баробари муҳаррики SIMD иҷро мешаванд) истифода бурдан мумкин аст. Пештар, барои як CU танҳо як канори дастур иҷозат дода мешуд.
  • Бозгашти NVPTX, ки барои тавлиди код бо истифода аз меъмории маҷмӯи дастурҳои NVIDIA PTX (Parallel Thread Execution) тарҳрезӣ шудааст, қобилияти истифодаи парчамҳои "-march", "-mptx" ва "-march-map" -ро илова кардааст. Дастгирии амалӣ барои PTX ISA sm_53, sm_70, sm_75 ва sm_80. Меъмории пешфарз sm_30 аст.
  • Дар пуштибонии протсессори PowerPC / PowerPC64 / RS6000, татбиқи функсияҳои дарунсохт аз нав навишта шудаанд. Функсияҳои дарунсохт __builtin_get_texasru, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_texasru, __builtin_set_set_ar.
  • Дастгирии Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (kortex-a710) ва Arm Cortex-X710 (кортекс- x2). Дастгирии иловагӣ барои имконоти меъмории нави ARMv2 барои истифода бо опсияи "-march": armv8-a, armv8.7-a, armv8.8-a. Татбиқи иловагии функсияҳои C, ки дар компилятор (Intrinsics) барои боркунии атомӣ ва захира кардани маълумот дар хотира дар асоси истифодаи дастурҳои васеътари ARM (ls9) сохта шудааст. Дастгирии иловашуда барои суръат бахшидан ба функсияҳои memcpy, memmove ва memset бо истифода аз васеъшавии mopsoption ARM.
  • Ҳолати нави санҷиши "-fsanitize=shadow-call-stack" (ShadowCallStack) илова карда шуд, ки айни замон танҳо барои меъмории AArch64 дастрас аст ва ҳангоми сохтани код бо опсияи "-ffixed-r18" кор мекунад. Режим муҳофизатро аз баргардонидани суроғаи бозгашт аз функсия дар сурати пур шудани буфер дар стек таъмин мекунад. Моњияти њифз аз он иборат аст, ки суроѓаи баргардонида дар стеки алоњидаи "соя" пас аз интиќоли идоракунї ба функсия ва бозпас гирифтани ин суроѓа пеш аз баромадан аз функсия.

Манбаъ: opennet.ru

Илова Эзоҳ