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

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

GCC 9.1 барои устувор кардани дастгирии стандарти C++17, идома додани татбиқи имкониятҳои стандарти ояндаи C++20 (номдори C++2a), дохилшавӣ ба фронтент барои забони D, дастгирии қисман барои OpenMP 5.0 назаррас аст. , дастгирии қариб пурра барои OpenACC 2.5, баланд бардоштани миқёспазирии оптимизатсияҳо ва оптимизатсияҳои байнипросессуалӣ дар марҳилаи ҳатмӣ, тавсеаи воситаҳои ташхис ва илова кардани огоҳиҳои нав, пуштибонии OpenRISC, C-SKY V2 ва AMD GCN GPU.

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

  • Дастгирии иловагии забони барномасозии D. GCC дорои интерфейси фарогир бо компилятор мебошад GDC (Gnu D Compiler) ва китобхонаҳои вақти корӣ (libphobos), ки ба шумо имкон медиҳанд GCC-и стандартиро барои сохтани барномаҳо бо забони барномасозии D истифода баред Раванди фаъолсозии дастгирии забони D дар GCC оғоз шуд дар соли 2011, аммо кашола карда рафт аз сабаби зарурати мутобиқ кардани код ба талаботи GCC ва мушкилот бо интиқоли ҳуқуқи моликияти зеҳнӣ ба Digital Mars, ки забони барномасозии D-ро таҳия мекунад;
  • Дар генератори код такмил дода шуд. Масалан, истифодаи стратегияҳои гуногун барои васеъ кардани ифодаҳои Switch (ҷадвали ҷаҳиш, санҷиши бит, дарахти қарор) вобаста ба вазъият амалӣ карда шудааст. Имконияти табдил додани функсияҳои хатӣ, ки ифодаи Гузаришро бо истифода аз оптимизатсияи "-ftree-switch-conversion" дар бар мегирад, илова карда шуд (масалан, маҷмӯи шартҳо ба монанди "ҳолати 2: чӣ тавр = 205; танаффус; ҳолати 3: чӣ гуна = 305; танаффус" ;” ба "100 * чӣ тавр + 5" табдил дода мешавад;
  • Мукаммалгардонии оптимизатсияи байнипроцессуалӣ. Танзимоти ҷобаҷогузории дохилӣ барои пойгоҳҳои коди муосири C++ мутобиқ карда шуда, бо параметрҳои нави max-inline-insns-small, max-inline-insns-size, unlined-function-insns, unlined-function-time, unlined-thunk-insns ва unlined васеъ карда шудаанд. -вакт. Дақиқӣ ва хашмгинии беҳтаршудаи ҷудокунии коди сард/гарм. Миқёспазирии беҳтар барои хеле калон воҳидҳои тарҷума (масалан, ҳангоми татбиқи оптимизатсия дар марҳилаи пайвастшавӣ ба барномаҳои калон);
  • Механизми оптимизатсия дар асоси натиҷаҳои профилсозии код (PGO - Profile-guided optimization) такмил дода шудааст, ки дар асоси таҳлили хусусиятҳои иҷрои код коди оптималӣ тавлид мекунад. Варианти мухтасар "-fprofile-истифода" ҳоло шеваҳои оптимизатсияи "-fversion-loops-for-strides", "-floop-interchange", "-floop-unroll-and-jam" ва "-ftree-loop-distribution"-ро дар бар мегирад. Дохил кардани гистограммаҳо бо ҳисобкунакҳо ба файлҳо хориҷ карда шуд, ки андозаи файлҳои профилҳоро кам кард (Ҳоло гистограммаҳо ҳангоми иҷрои оптимизатсия ҳангоми пайвастшавӣ зуд тавлид мешаванд);
  • Оптимизатсияи мукаммали пайвастшавӣ (LTO). Пеш аз тавлиди натиҷа соддагардонии намудҳо таъмин карда шуд, ки ин имкон дод, ки андозаи файлҳои объекти LTO ба таври назаррас кам карда, истеъмоли хотира дар марҳилаи ҳатмӣ кам карда шавад ва параллелизатсияи амалиётҳо беҳтар карда шавад. Миқдори қисмҳо (-param lto-partitions) аз 32 то 128 зиёд карда шуд, ки ин корҳоро дар системаҳои дорои шумораи зиёди риштаҳои CPU беҳтар мекунад. Барои назорат кардани шумораи равандҳои оптимизатсия параметре илова карда шудааст
    "-param lto-max-streaming-parallelism";

    Дар натиҷа, дар муқоиса бо GCC 8.3, оптимизатсияҳо дар GCC 9 ҷорӣ карда шудаанд иҷозат дода шудааст вақти тартиб додани Firefox 5 ва LibreOffice 66 тақрибан 6.2.3% кам кунед. Андозаи файлҳои объектӣ 7% кам шуд. Вақти ҳатмӣ дар CPU 8-аслӣ 11% кам шуд. Марҳилаи оптимизатсияи пайдарпайи марҳилаи пайвастшавӣ ҳоло 28% тезтар аст ва хотираи 20% камтар истеъмол мекунад. Истеъмоли хотираи ҳар як протсессори марҳилаи параллелизатсияшудаи LTO 30% кам шуд;

  • Аксари мушаххасоти барномасозии параллелӣ барои забонҳои C, C++ ва Fortran амалӣ карда мешаванд OpenACC 2.5, ки асбобҳоро барои борфарорӣ дар GPU ва протсессори махсус, ба монанди NVIDIA PTX муайян мекунад;
  • Дастгирии қисман барои стандарт барои C ва C++ амалӣ карда шудааст MP 5.0 -ро кушоед (Open Multi-Processing), ки API ва усулҳои татбиқи усулҳои барномасозии мувозиро барои забонҳои C, C++ ва Fortran дар системаҳои бисёраслӣ ва гибридӣ (CPU+GPU/DSP) бо хотираи муштарак ва воҳидҳои векторизатсия (SIMD) муайян мекунад. ;
  • Барои забони C огоҳиҳои нав илова карда шуданд: "-Адреси-аъзоёни пурбор" (қимати нишондиҳандаи ҳамоҳангнашуда ба узви бастаи сохтор ё иттиҳодия) ва
    «-Арзиши мутлақ" (ҳангоми дастрасӣ ба функсияҳо барои ҳисоб кардани арзиши мутлақ, агар функсияи мувофиқтар барои аргументи зикршуда мавҷуд бошад, масалан, ба ҷои abs(3.14) fabs(3.14) бояд истифода шавад). Огоҳиҳои нав барои C++ илова карда шуданд: "-Wdeprecated-copy",
    "-Winit-list-lifetime", "-Wredundant-move", "-Wpessimizing-move" ва "-Wclass-conversion". Бисёре аз огоҳиҳои қаблан дастрас васеъ карда шуданд;

  • Дастгирии таҷрибавӣ барои як қисми стандарти ояндаи забони C, ки рамзи C2x ном дорад, илова карда шуд. Барои фаъол кардани дастгирии C2x, имконоти "-std=c2x" ва "-std=gnu2x" (барои фаъол кардани васеъшавии GNU) истифода баред. Стандарт ҳанӯз дар марҳилаи аввали рушд қарор дорад, аз ин рӯ, аз имконоти он танҳо ифодаи _Static_assert бо як аргумент дастгирӣ мешавад (_Static_assert бо ду аргумент дар C11 стандартизатсия шудааст);
  • Дастгирии стандарти C++ 17 устувор эълон шудааст. Дар frontend, имкониятҳои забонии C++17 пурра амалӣ карда мешаванд ва дар libstdc++, функсияҳои китобхонаҳои дар стандарт муайяншуда ба татбиқи пурра наздиканд;
  • Давом дорад татбиқ унсурҳои стандарти ояндаи C ++ 2a. Масалан, қобилияти дохил кардани диапазонҳо ҳангоми оғозёбӣ илова карда шуд, васеъшавӣ барои ифодаҳои лямбда амалӣ карда шуд, дастгирӣ барои аъзои холии сохторҳои додаҳо ва атрибутҳои эҳтимолӣ/эҳтимолӣ илова карда шуд, қобилияти даъват кардани функсияҳои виртуалӣ дар ифодаҳои шартӣ таъмин карда шуд. , ва гайра.
    Барои фаъол кардани дастгирии C++2a, имконоти "-std=c++2a" ва "-std=gnu++2a"-ро истифода баред. Иловаи файлҳои сарлавҳаи бит ва версияи libstdc++ барои C++2a, std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible ва std::type_identity, std::type_identity, function: std:sd , std :: bind_front,
    std::visit, std::is_constant_evaluated ва std::assume_aligned, дастгирии навъи char8_t илова карда шуд, қобилияти тафтиши префикс ва суффикси сатрҳоро амалӣ кард (starts_with, ends_with);

  • Дастгирии иловашуда барои коркардкунандагони нави ARM
    Cortex-A76, Cortex-A55, Cortex-A76 DynamIQ big.LITTLE ва Neoverse N1. Дастгирии иловашуда барои дастурҳои дар Armv8.3-A барои кор бо рақамҳои мураккаб, тавлиди рақамҳои псевдо-тасодуфӣ (rng) ва барчаспҳои хотира (memtag), инчунин дастурҳо оид ба бастани ҳамлаҳои марбут ба иҷрои тахминӣ ва кори шӯъбаи пешгӯии филиал. . Барои меъмории AArch64 режими муҳофизат илова карда шудааст чорроҳаҳои стек ва теппа (“-fstack-clash-protection”). Барои истифодаи хусусиятҳои меъмории Armv8.5-A, варианти "-march=armv8.5-a" илова карда шудааст.

  • Он як пуштибониро барои тавлиди код барои GPU-ҳои AMD дар асоси микроархитектураи GCN дар бар мегирад. Татбиқ дар айни замон бо тартиб додани замимаҳои як ришта маҳдуд аст (дастгирии анҷом додани ҳисобҳои чанд ришта тавассути OpenMP ва OpenACC баъдтар пешниҳод карда мешавад) ва дастгирии GPU Fiji ва Vega 10;
  • Барои коркардкунандагон пуштибонии нав илова карда шуд OpenRISC;
  • Барои коркардкунандагон пуштибонии иловашуда C-SKY V2, ки аз ҷониби ширкати чинӣ бо ҳамон ном барои дастгоҳҳои гуногуни истеъмолӣ истеҳсол шудааст;
  • Ҳама имконоти сатри фармон, ки арзишҳои байтро кор мекунанд, суффиксҳои kb, KiB, MB, MiB, GB ва GiB -ро дастгирӣ мекунанд;
  • Ба амал бароварда шуд опсияи "-flive-patching=[inline-only-static|inline-clone]" ба шумо имкон медиҳад, ки бо сабаби назорати чандсатҳи истифодаи байнипросессуалӣ (IPA) оптимизатсия;
  • Опсияи "--completion" барои назорати дақиқи анҷоми опсия ҳангоми истифодаи bash илова карда шуд;
  • Воситаҳои ташхис намоиши иқтибосҳои матнии сарчашмаро бо нишон додани рақами сатр ва аломати визуалии иттилооти марбут ба монанди намудҳои операнд таъмин мекунанд. Барои хомӯш кардани намоиши рақамҳои сатр ва тамғакоғазҳо, имконоти “-fno-diagnostics-show-line-рақамҳо” ва “-fno-diagnostics-show-labels” пешбинӣ шудаанд;

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

  • Васеъ карда шудааст воситаҳо барои ташхиси хатогиҳо дар коди C++, беҳтар шудани хониши маълумот дар бораи сабабҳои хатогиҳо ва нишон додани параметрҳои мушкилот;

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

  • Опсияи иловашудаи "-fdiagnostics-format=json", ки имкон медиҳад натиҷаи ташхисро дар формати мошинхонанда (JSON) тавлид кунад;
  • Барои интихоби файлҳои манбаъ, ки коркард мешаванд, имконоти нави профилсозӣ "-fprofile-filter-files" ва "-fprofile-exclude-files" илова карда шуданд;
  • AddressSanitizer тавлиди коди тафтиши паймонтари тағирёбандаҳои автоматиро таъмин мекунад, ки масрафи хотираи файли иҷрошавандаи тафтишшавандаро кам мекунад;
  • Натиҷаи беҳтаршуда дар "-fopt-info» (маълумоти муфассал дар бораи оптимизатсияи иловашуда). Илова бар префикси нави "оптимизатсияшуда" ва "пазмоншуда", ба ғайр аз префикси қаблан дастраси "кайд". Натиҷаи иловагии иттилоот дар бораи қабули қарорҳо оид ба кушодан ва векторизатсияи давраҳо;
  • Опсияи "-fsave-optimization-record" илова карда шуд, вақте ки муайян карда мешавад, GCC файли SRCFILE.opt-record.json.gz-ро бо тавсифи қарорҳо оид ба истифодаи баъзе оптимизатсияҳо захира мекунад. Варианти нав аз ҳолати "-fopt-info" бо дохил кардани метамаълумоти иловагӣ, ба монанди маълумот дар бораи профил ва занҷирҳои дохилӣ фарқ мекунад;
  • Имкониятҳои иловашудаи "-fipa-stack-alignment" ва "-fipa-reference-addressable" барои назорати ҳамворкунии стек ва истифодаи усулҳои адресатсия (танҳо барои навиштан ё хондан-дақиқ) барои тағирёбандаҳои статикӣ ҳангоми оптимизатсияи байнипросессуалӣ;
  • Функсияҳои нави дарунсохт барои назорати ҳатмии атрибутҳо ва инчунин рафтори марбут ба пешгӯии филиал ва иҷрои дастури тахминӣ ҷорӣ карда мешаванд: "__хусусиятҳои_сохташуда«,__сохташуда_бо эҳтимолият"Ва"__арзиши_сохташуда". Барои функсияҳо, тағирёбандаҳо ва намудҳо атрибути нав илова карда шуд нусха;
  • Дастгирии пурраи вуруд/баромади асинхронӣ барои забони Fortran амалӣ карда шуд;
  • Дастгирии платформаҳои Solaris 10 (*-*-solaris2.10) ва Cell/BE (Cell Broadband Engine SPU) бекор карда шудааст ва дар нашри асосии навбатии он хориҷ карда мешавад. Дастгирии меъмории Armv2, Armv3, Armv5 ва Armv5E қатъ карда шуд. Дастгирии Intel MPX (Extensions Protection Memory) қатъ карда шуд.

Манбаъ: opennet.ru

Илова Эзоҳ