Рэліз набору кампілятараў GCC 13

Пасля года распрацоўкі апублікаваны рэліз вольнага набору кампілятараў GCC 13.1, першы значны выпуск у новай галінцы GCC 13.x. У адпаведнасці з новай схемай нумарацыі выпускаў, версія 13.0/13.1 выкарыстоўвалася ў працэсе распрацоўкі, а незадоўга да выхаду GCC 14.0/14.1 ужо адгалінулася галінка GCC XNUMX, на базе якой будзе сфарміраваны наступны значны рэліз GCC XNUMX.

Асноўныя змены:

  • У склад GCC прыняты фронтэнд для зборкі праграм на мове праграмавання Modula-2. Падтрымліваецца зборка кода, які адпавядае дыялектам PIM2, PIM3 і PIM4, а таксама прынятаму ISO-стандарту для дадзенай мовы.
  • У дрэва зыходных тэкстаў GCC дададзены фронтэнд з рэалізацыяй кампілятара мовы Rust, падрыхтаванага праектам gccrs (GCC Rust). У бягучым выглядзе форнтэнд адзначаны як эксперыментальны і адключаны па змаўчанні. Пасля давядзення фронтэнда да гатоўнасці (чакаецца ў наступным выпуску), штатны інструментар GCC зможа выкарыстоўвацца для кампіляцыі праграм на мове Rust без неабходнасці ўстаноўкі кампілятара rustc, пабудаванага з выкарыстаннем напрацовак LLVM.
  • У механізм аптымізацыі на этапе звязвання (LTO) дададзена падтрымка сервера кіравання працамі (jobserver), які падтрымліваецца праектам GNU make для аптымізацыі выканання раўналежнай зборкі ў некалькі струменяў. У GCC jobserver ужываецца для распаралельвання прац пры LTO-аптымізацыі ў кантэксце ўсёй праграмы (WPA, Whole-program Analysis). Для ўзаемадзеяння з jobserver па змаўчанні ўжываюцца найменныя каналы (-jobserver-style=fifo).
  • У статычным аналізатары (-fanalyzer) прапанавана 20 новых дыягнастычных праверак, сярод якіх "-Wanalyzer-out-of-bounds", "-Wanalyzer-allocation-size", "-Wanalyzer-deref-before-check", "-Wanalyzer- infinite-recursion"-Wanalyzer-jump-through-null", "-Wanalyzer-va-list-leak".
  • Рэалізавана магчымасць вываду дыягностыкі ў фармаце SARIF, заснаваным на JSON. Новы фармат можна выкарыстоўваць для атрымання вынікаў статычнага аналізу (GCC -fanalyzer), а таксама для атрымання звестак аб папярэджаннях і памылках. Уключэнне вырабляецца опцыяй "-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file", дзе опцыі з "json" прыводзяць да высновы ў спецыфічным для GCC варыянце фармату JSON.
  • Рэалізаваны некаторыя магчымасці, вызначаныя ў Сі-стандарце C23, такія як канстанта nullptr для вызначэння нулявых паказальнікаў, спрашчэнне выкарыстання спісаў з пераменным лікам аргументаў (variadic), пашырэнне магчымасцяў пералічэнняў, атрыбут noreturn, дазвол выкарыстання constexpr і auto пры вызначэнні аб'ектаў, аператары typeof typeof_unqual, новыя ключавыя словы alignas, alignof, bool, false, static_assert, thread_local і true, дазвол указання пустых дужак пры ініцыялізацыі.
  • Рэалізаваны некаторыя магчымасці, вызначаныя ў стандарце C++23, такія як магчымасць размяшчэння пазнак у канцы састаўных выразаў, сумяшчальнасць з тыпам char8_t, дырэктыва прэпрацэсара #warning, падзеленыя (\u{}, \o{}, \x{}) і найменныя ('\N{LATIN CAPITAL LETTER A}') escape-паслядоўнасці, static operator(), static operator[], аператар роўнасці ўсярэдзіне выразаў, выключэнне некаторых абмежаванняў па выкарыстанні constexpr, падтрымка UTF-8 у зыходных тэкстах.
  • У libstdc++ палепшана эксперыментальная падтрымка стандартаў C++20 і C++23, напрыклад, дададзеная падтрымка загалоўкавых файлаў і std::format, пашыраны магчымасці загалоўкавых файлаў , дададзены дадатковыя тыпы з якая плавае коскі, рэалізаваны загалоўкавыя файлы і .
  • Дададзены новыя атрыбуты функцый для дакументавання таго, што ў цэлалікавай зменнай перадаецца файлавы дэскрыптар: __attribute__((fd_arg(N))), __attribute__((fd_arg_read(N))) і __attribute__((fd_arg_write(N) ». Паказаныя атрыбуты могуць выкарыстоўвацца ў статычным аналізатары (-fanalyzer) для выяўлення некарэктнай працы з файлавымі дэскрыптарамі.
  • Дададзены новы атрыбут "__attribute__((assume(EXPR)))", пры дапамозе якога можна паведаміць кампілятару, што выраз праўдзіва і кампілятар можа выкарыстоўваць дадзены факт гэта без вылічэння выраза.
  • Дададзены сцяг "-fstrict-flex-arrays=[level]" для выбару паводзін пры апрацоўцы гнуткага элемента-масіва ў структурах (Flexible Array Members, масіў нявызначанага памеру ў канцы структуры, напрыклад, "int b[]").
  • Дададзены сцяг "-Wenum-int-mismatch" для вываду папярэджанняў у выпадку неадпаведнасці паміж пералічаным тыпам і цэлым тыпам.
  • У франтэндзе для мовы Fortran цалкам рэалізавана падтрымка фіналізацыі.
  • У франтэндзе для мовы Go дададзена падтрымка абагульненых функцый і тыпаў (джэнерыкаў), забяспечана сумяшчальнасць з пакетамі для мовы Go 1.18.
  • У бэкендзе для архітэктуры AArch64 рэалізавана падтрымка CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) і Arm Neoverse V2 (neoverse) -v2). У опцыю "-march=" дададзена падтрымка аргументаў "armv9.1-a", "armv9.2-a" і "armv9.3-a". Дададзена падтрымка працэсарных пашырэнняў FEAT_LRCPC, FEAT_CSSC і FEAT_LSE2.
  • У бэкенд для архітэктуры ARM дададзена падтрымка CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) і Arm Cortex-M85 (cortex-m85).
  • У бэкенд для архітэктуры x86 дададзеная падтрымка працэсараў Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, а таксама працэсараў AMD Zen 4 (znver4). Рэалізаваны прапанаваныя ў працэсарах Intel пашырэння архітэктуры набору каманд AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT і AMX-COMPLEX. Для моў C і C++ на сістэмах з SSE2 прадстаўлены тып __bf16.
  • У бэкендзе генерацыі кода для GPU AMD Radeon (GCN) рэалізавана магчымасць выкарыстання паскаральнікаў AMD Instinct MI200 для павышэння прадукцыйнасці OpenMP/OpenACC. Палепшана вектарызацыя з выкарыстаннем інструкцый SIMD.
  • Значна пашыраны магчымасці бэкенда для платформы LoongArch.
  • У бэкендзе для архітэктуры RISC-V дададзеная падтрымка CPU T-Head's XuanTie C906 (thead-c906). Рэалізавана падтрымка вектарных апрацоўшчыкаў, вызначаных у спецыфікацыі RISC-V Vector Extension Intrinsic 0.11. Дададзена падтрымка 30 пашырэнняў спецыфікацый RISC-V.
  • Пры фармаванні падзяляных аб'ектаў з указаннем опцыі "-shared" спынена даданне кода запуску пасля дадання асяроддзя для вылічэнняў з якая плавае коскі, калі ўключаны аптымізацыі "-Ofast", "-ffast-math" або "-funsafe-math-optimizations".
  • Падтрымка адладкавага фармату DWARF рэалізавана амаль ва ўсіх канфігурацыях.
  • Дададзена опцыя "-gz=zstd" для сціску адладкавай інфармацыі з выкарыстаннем алгарытму Zstandard. Спынена падтрымка састарэлага рэжыму сціску адладкавай інфармацыі "-gz=zlib-gnu".
  • Дададзена пачатковая падтрымка OpenMP 5.2 (Open Multi-Processing) і працягнута рэалізацыя стандартаў OpenMP 5.0 і 5.1, якія вызначаюць API і спосабы прымянення метадаў паралельнага праграмавання на шмат'ядравых і гібрыдных (CPU+GPU/DSP) сістэмах з агульнай памяццю і блокамі вектарызацыі (SIMD).
  • Спынена падтрымка састарэлага фармату захоўвання адладкавай інфармацыі "STABS" (уключаўся опцыямі -gstabs і -gxcoff), створанага ў 1980-е гады і ўжывальнага ў адладчыку dbx.
  • Абвешчаная састарэлай падтрымка Solaris 11.3 (код для падтрымкі дадзенай платформы будзе выдалены ў наступным выпуску).

Крыніца: opennet.ru

Дадаць каментар