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

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

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

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

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

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