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

Пас аз як соли рушд нашр кардааст баровардани маҷмӯи ройгони компиляторҳо GCC 10.1, аввалин нашри асосӣ дар филиали нави GCC 10.x. Бино бар ин схемаи нав рақамҳои нашр, версияи 10.0 дар раванди таҳия истифода мешуд ва чанде пеш аз нашри GCC 10.1, филиали GCC 11.0 аллакай шоха шуда буд, ки дар асоси он версияи муҳими навбатии GCC 11.1 ташкил карда мешавад.

GCC 10.1 барои татбиқи бисёр навовариҳо дар забони C++, ки барои стандарти C++20 таҳия шудааст, такмили марбут ба стандарти ояндаи забони C (C2x), оптимизатсияҳои нав дар пуштибонии компилятор ва дастгирии таҷрибавӣ назаррас аст. режими таҳлили статикӣ. Илова бар ин, ҳангоми омода кардани филиали нав, лоиҳа репозиторийро аз SVN ба Git интиқол дод.

асосӣ тағйирдиҳӣ:

  • Илова карда шуд Усули таҷрибавии таҳлили статикӣ "-фаналист", ки таҳлили байнипроцессуалии захираҳои пуршиддати роҳҳои иҷрои код ва ҷараёни маълумотро дар барнома иҷро мекунад. Режим қодир аст, ки мушкилотро дар марҳилаи компиляция муайян кунад, ба монанди зангҳои дукарата ба функсияи free() барои як минтақаи хотира, ихроҷи тавсифи файл, аз истинод ва интиқоли нишондиҳандаҳои нул, дастрасӣ ба блокҳои хотираи озод, истифодаи арзишҳои ибтидонашуда ва ғайра. Истифодаи реҷаи нав барои рамзи OpenSSL аллакай имкон дод, ки муайян карда шавад осебпазирии хатарнок.
  • Оптимизатсияи такмилёфтаи байнипросессуалӣ. Таҷҳизоти IPA-SRA (Ивазкунии муштараки скалярӣ) барои кор дар вақти ҳатмӣ аз нав тарҳрезӣ шудааст ва дар байни чизҳои дигар, ҳоло арзишҳои ҳисобшуда ва баргардонидашудаи истифоданашударо нест мекунад. Дар реҷаи оптимизатсияи "-O2", опсияи "-finline-функсияҳо" фаъол карда мешавад, ки он барои бартарии рамзи паймонтар нисбат ба иҷрои иҷро дубора танзим карда мешавад. Кори эвристикӣ барои ҷобаҷогузории функсияҳои дохилӣ суръат гирифт. Эвристикаи васеъкунии сатрӣ ва клонкунии функсия акнун метавонад маълумотро дар бораи диапазони арзишҳо барои пешгӯии самаранокии тағироти инфиродӣ истифода барад. Барои C++, дақиқии таҳлили тахаллус дар асоси тип такмил дода шудааст.
  • Оптимизатсияи мукаммали пайвастшавӣ (LTO). Иловаи нави иҷрошаванда лто-партов барои аз нав барқарор кардани маълумот дар бораи файлҳои объект бо байткоди LTO. Гузаришҳои параллелӣ LTO ба таври худкор шумораи вазифаҳои ҳамзамон иҷрошавандаро муайян мекунанд ва агар онҳо муайян карда нашаванд, маълумотро дар бораи шумораи ядроҳои CPU ҳамчун омили параллелизатсия истифода мебаранд. Қобилияти фишурдани байткоди LTO бо истифода аз алгоритми zstd илова карда шуд.
  • Механизми оптимизатсия дар асоси натиҷаҳои профилсозии код (PGO - Profile-guided optimization) такмил дода шудааст, ки дар асоси таҳлили хусусиятҳои иҷрои код коди оптималӣ тавлид мекунад. Нигоҳдории профили беҳтар ҳангоми тартибдиҳӣ ва ҷудокунии коди гарм/сард. Тавассути опсияи "-fprofile-арзишҳо» акнун метавонад то 4 арзиши профилро назорат кунад, масалан барои зангҳои ғайримустақим ва пешниҳоди маълумоти дақиқтари профил.
  • Мушаххасоти барномасозии параллелӣ барои забонҳои C, C++ ва Fortran амалӣ карда мешавад OpenACC 2.6, ки асбобҳоро барои амалиёти борфарорӣ дар GPU ва протсессори махсус ба монанди NVIDIA PTX муайян мекунад. Татбики стандарт кариб ба охир расид MP 5.0 -ро кушоед (Open Multi-Processing), ки API ва усулҳои татбиқи усулҳои барномасозии мувозиро дар системаҳои бисёраслӣ ва гибридӣ (CPU+GPU/DSP) бо хотираи муштарак ва воҳидҳои векторизатсия (SIMD) муайян мекунад. Хусусиятҳои иловашуда ба монанди шартҳои охирини хусусӣ, дастурҳои скан ва давр, фармоиш ва ифодаҳои use_device_addr. Барои OpenMP ва OpenACC, дастгирӣ барои амалиёти борфарорӣ дар насли чорум (Фидҷӣ) ва насли панҷуми AMD Radeon (GCN) GPU (VEGA 10/VEGA 20) илова карда шудааст.
  • Барои забонҳои оилаи C, функсияи "дастрасӣ" барои тавсифи дастрасии функсия ба объектҳои тавассути истинод ё ишоракунанда ва пайвастани чунин объектҳо бо аргументҳои бутуни дорои маълумот дар бораи андозаи объектҳо илова карда шудааст. Барои дар якҷоягӣ бо "дастрасӣ" кор кардан, атрибути "намуд" барои ошкор кардани дастрасии нодуруст аз функсияҳои корбар амалӣ карда мешавад, масалан, ҳангоми навиштани арзишҳо ба минтақаи берун аз ҳудуди массив. Инчунин аттрибути "symver" барои пайваст кардани рамзҳо дар файли ELF бо рақамҳои мушаххаси версия илова карда шудааст.
  • Огоҳиҳои нав илова карда шуданд:
    • "-Wstring-compare" (бо "-Wextra" фаъол карда шудааст) - огоҳ мекунад, ки дар бораи мавҷудияти ибораҳое, ки дар онҳо сифр бо натиҷаи занги функсияҳои strcmp ва strncmp муқоиса карда мешавад, ки бо сабаби дарозии он ба доимӣ баробар аст. аз як аргумент аз андозаи массив дар аргументи дуюм калонтар аст.
    • "-Wzero-length-bounds" (фаъол бо "-Warray-bounds") - дар бораи дастрасӣ ба унсурҳои массиви дарозии сифр огоҳ мекунад, ки метавонад ба баргардонидани маълумоти дигар оварда расонад.
    • Огоҳиҳои "-Warray-bounds", "-Wformat-overflow", "-Wrestrict", "-Wreturn-local-addr" ва "-Wstringop-overflow" барои васеъ кардани шумораи ҳолатҳои берун аз ҳудуди худ васеъ карда шуданд. ки идора карда мешаванд.
  • Имконияти мустақиман муайян кардани аломатҳои васеъ дар идентификаторҳо бо истифода аз рамзгузории ҷорӣ (UTF-8 ба таври нобаёнӣ) ба ҷои нишонаи UCN (\uNNNN ё \UNNNNNNNN) амалӣ карда шуд. Барои намуна:

    static const int π = 3;
    int get_naïve_pi () {
    баргардонидани π;
    }

  • Барои забони Си, як қисми хусусиятҳои нави дар стандарти C2X таҳияшуда амалӣ карда шуданд (бо нишон додани -std=c2x ва -std=gnu2x фаъол карда шудааст): дастгирии синтаксиси "[[]]" барои муайян кардани атрибутҳо ба монанди дар C++ (масалан, [[gnu ::const]], [[deprecated]], [[fallthrough]] ва [[maybe_unused]]. Дастгирии иловашуда барои синтаксиси "u8" барои муайян кардани доимӣ бо аломатҳои UTF-8.
    Ба макросҳои нав илова карда шуд . Ба strftime иваз кардани "%OB" ва "%Ob" илова карда шуд.

  • Ҳолати пешфарз барои C "-fno-common" аст, ки имкон медиҳад дастрасии муассиртар ба тағирёбандаҳои глобалӣ дар баъзе платформаҳо.
  • Барои C++, тақрибан 16 тағирот ва навоварӣ амалӣ карда шуданд, ки дар стандарти C++ 20 таҳия шудаанд. Аз ҷумла калимаи иловагии "constinit"
    ва дастгирии васеъшавии шаблон амалӣ карда шуд "мафҳумҳо". Мафҳумҳо ба шумо имкон медиҳанд, ки маҷмӯи талаботи параметрҳои шаблонро муайян кунед, ки дар вақти тартибдиҳӣ маҷмӯи аргументҳоеро, ки ҳамчун параметрҳои қолабӣ қабул карда мешаванд, маҳдуд мекунанд. Мафҳумҳоро барои пешгирӣ кардани номутобиқатии мантиқӣ байни хосиятҳои намудҳои додаҳои дар қолаб истифодашаванда ва хосиятҳои навъи додаҳои параметрҳои вуруд истифода бурдан мумкин аст.

  • G++ муайян кардани рафтори номуайянеро, ки тавассути тағир додани объектҳои доимӣ тавассути constexpr ба вуҷуд омадааст, таъмин мекунад. Кам кардани истеъмоли хотира аз ҷониби компилятор ҳангоми ҳисобкунии constexpr. Огоҳиҳои нави "-Wmismatched-tags" ва "-Wredundant-tags" илова карда шуданд.
  • Вариантҳои нави сатри фармон пешниҳод карда шуданд:
    • "-fallocation-dce" барои нест кардани ҷуфтҳои нолозими операторҳои "нав" ва "нест".
    • "-fprofile-partial-training" барои ғайрифаъол кардани оптимизатсияи андоза барои коде, ки давраи омӯзишӣ надорад.
    • "-fprofile-reproducible барои назорати сатҳи такроршавандагии профил.
    • "-fprofile-prefix-path" барои муайян кардани феҳристи бунёди манбаи асосӣ, ки барои тавлиди профили алоҳида истифода мешавад (барои "-fprofile-generate=profile_dir" ва "-fprofile-use=profile_dir").
  • Дар матни огоҳӣ барои вариантҳои зикршуда, гиперҳаволаҳое мавҷуданд, ки ба шумо имкон медиҳанд, ки ба ҳуҷҷатҳои ин интихобҳо гузаред. Ивазкунии URL бо истифода аз имконоти "-fdiagnostics-urls" назорат карда мешавад.
  • Оператори пешазпротсессори иловашуда "__сохтааст", ки метавонад барои тафтиши функсияҳои дарунсохт истифода шавад.
  • Илова кардани функсияи нави дарунсохташудаи "__builtin_roundeven" бо татбиқи функсияи яклухткунӣ, ки дар мушаххасоти ISO/IEC TS 18661 муайян шудааст, монанд ба "давра", аммо қисми яклухткунӣ аз 0.5 то (ба арзиши калонтар), камтар аз 0.5 - поён (ба сифр) ва баробар ба 0.5 - аз паритети рақами пеш аз охир.
  • Барои меъмории AArch64, дастгирии тамдиди SVE2 илова карда шуд ва дастгирии SVE (Vektor Extension Scalable Extension), аз ҷумла дастгирии иловагӣ барои функсияҳо ва намудҳои дарунсохташудаи SVE ACLE ва истифодаи векторизатсия такмил дода шуд. Дастгирии LSE (Varge Systems Extensions) ва TME (Transactional Memory Extension) васеъ карда шудааст. Илова кардани дастурҳои наве, ки дар Armv8.5-A ва Armv8.6-A пешниҳод шудаанд, аз ҷумла дастурҳо барои тавлиди рақамҳои тасодуфӣ, яклухткунӣ, ҳатмии барчаспҳои хотира,
    bfloat16 ва зарби матритса. Дастгирии протсессори иловашуда
    Arm Cortex-A77,
    Arm Cortex-A76AE,
    Arm Cortex-A65,
    Arm Cortex-A65AE,
    Arm Cortex-A34 ва
    Marvell ThunderX3.

  • Дастгирии иловашуда барои ABI FDPIC (нишондиҳандаҳои функсияи 32-бит) барои ARM64. Коркарди аз нав тарҳрезӣ ва оптимизатсияшудаи амалиёти бутуни 64-бит. Дастгирии CPU иловашуда
    Arm Cortex-A77,
    Arm Cortex-A76AE ва
    Arm Cortex-M35P. Дастгирии васеъ барои дастурҳои коркарди додаҳои ACLE, аз ҷумла SIMD 32-бит, зарбкунии 16-бит, арифметикаи қулф ва дигар оптимизатсияи алгоритми DSP. Дастгирии таҷрибавӣ барои дастурҳои ACLE CDE (Custom Datapath Extension) илова карда шуд.

  • Ба таври назаррас такмил додани тавлиди код ва векторизатсия дар пуштибон барои GPU-ҳои AMD дар асоси микроархитектураи GCN.
  • Дастгирии иловагӣ барои дастгоҳҳои ба XMEGA монанд барои меъмории AVR
    ATtiny202, ATtiny204, ATtiny402, ATtiny404, ATtiny406, ATtiny804, ATtiny806, ATtiny807, ATtiny1604, ATtiny1606, ATtiny1607, ATmega808me, ATmega809me, ATtiny 1608, ATmega1609, ATmega3208 3209, ATmega4808 ва ATmega4809.

  • Барои меъмории IA-32/x86-64 тамдиди меъмории маҷмӯи дастурҳои нави Intel ENQCMD (-menqcmd) илова карда шудааст. Дастгирии иловашуда барои Intel Cooperlake (-march = cooperlake, тамдиди AVX512BF16 ISA-ро дар бар мегирад) ва Tigerlake (-march = tigerlake, васеъшавии MOVDIRI, MOVDIR64B ва AVX512VP2INTERSECT ISA) CPUs.
  • Татбиқи HSAIL (Забони гетерогении системаи меъмории миёнаравӣ) барои системаҳои ҳисоббарории гетерогенӣ дар асоси меъмории HSA бекор карда шудааст ва эҳтимол дар нашри оянда хориҷ карда мешавад.

Манбаъ: opennet.ru

Илова Эзоҳ