GCC 13 компиляторлар жинағының шығарылымы

Бір жылдық дамудан кейін тегін GCC 13.1 компиляторлар жинағының шығарылымы шығарылды, бұл жаңа GCC 13.x тармағындағы бірінші маңызды шығарылым. Жаңа шығарылымды нөмірлеу схемасы бойынша 13.0 нұсқасы әзірлеу кезінде пайдаланылды және GCC 13.1 шығарылымына аз уақыт қалғанда GCC 14.0 тармағы қазірдің өзінде ажыратылған болатын, одан GCC 14.1 келесі маңызды шығарылымы қалыптасады.

Негізгі өзгерістер:

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

Ақпарат көзі: opennet.ru

пікір қалдыру