Издање ГЦЦ 11 компајлерског пакета

Након годину дана развоја, објављено је издање бесплатног ГЦЦ 11.1 компајлерског пакета, прво значајно издање у новој грани ГЦЦ 11.к. Према новој шеми нумерисања издања, верзија 11.0 је коришћена током развоја, а непосредно пре издавања ГЦЦ 11.1, грана ГЦЦ 12.0 је већ била рачваљена, из које ће се формирати следеће значајно издање ГЦЦ 12.1.

ГЦЦ 11.1 је познат по томе што је подразумевано користио ДВАРФ 5 формат датотеке за отклањање грешака, подразумевано укључивање Ц++17 стандарда (“-стд=гну++17”), значајна побољшања у подршци за Ц++20 стандард, експериментална подршка за Ц++23, побољшања везана за будући стандард језика Ц (Ц2к), нове оптимизације перформанси.

Главне промене:

  • Подразумевани режим за језик Ц++ је промењен да користи Ц++17 стандард (-стд=гну++17) уместо претходно понуђеног Ц++14. Могуће је селективно онемогућити ново понашање Ц++17 приликом обраде шаблона који користе друге шаблоне као параметар (-фно-нев-ттп-матцхинг).
  • Додата подршка за хардверско убрзање алата АддрессСанитизер, који вам омогућава да утврдите чињенице приступа ослобођеним меморијским подручјима, превазилажење граница додељеног бафера и неке друге врсте грешака при раду са меморијом. Хардверско убрзање је тренутно доступно само за архитектуру ААрцх64 и фокусирано је на коришћење при компајлирању Линук кернела. Да бисте омогућили АддрессСанитизер хардверско убрзање приликом прављења компоненти корисничког простора, додата је заставица "-фсанитизе=хваддресс" и заставица кернела "-фсанитизе=кернел-хваддресс".
  • Приликом генерисања информација за отклањање грешака, подразумевано се користи формат ДВАРФ 5, који у поређењу са претходним верзијама омогућава генерисање 25% компактнијих података за отклањање грешака. Потпуна подршка за ДВАРФ 5 захтева најмање бинутилс верзију 2.35.2. ДВАРФ 5 формат је подржан у алатима за отклањање грешака од ГДБ 8.0, валгринд 3.17.0, елфутилс 0.172 и двз 0.14. Да бисте генерисали датотеке за отклањање грешака помоћу других верзија ДВАРФ-а, можете користити опције "-гдварф-2", "-гдварф-3" и "-гдварф-4".
  • Захтеви за компајлере који се могу користити за изградњу ГЦЦ-а су повећани. Компајлер сада мора да подржава стандард Ц++11 (раније је био потребан Ц++98), тј. Ако је ГЦЦ 10 био довољан за прављење ГЦЦ 3.4, онда је за прављење ГЦЦ 11 сада потребан најмање ГЦЦ 4.8.
  • Промењени су назив и локација датотека за чување думпова, привремених датотека и додатних информација неопходних за ЛТО оптимизацију. Такве датотеке се сада увек чувају у тренутном директоријуму осим ако се путања експлицитно не промени преко опција "-думпбасе", "-думпдир" и "-саве-темпс=*".
  • Подршка за бинарни формат БРИГ за употребу са језиком ХСАИЛ (средњи језик хетерогене архитектуре система) је застарела и ускоро ће бити уклоњена.
  • Могућности режима ТхреадСанитизер (-фсанитизе=тхреад) су проширене, дизајниране да открију услове трке када се деле исте податке из различитих нити апликације са више нити. Ново издање додаје подршку за алтернативна времена извођења и окружења, као и подршку за КЦСАН (Кернел Цонцурренци Санитизер) алат за отклањање грешака, дизајниран да динамички детектује услове трке унутар Линук кернела. Додате су нове опције "-парам тсан-дистингуисх-волатиле" и "-парам тсан-инструмент-фунц-ентри-екит".
  • Бројеви колона у дијагностичким порукама сада не одражавају број бајтова са почетка реда, већ заправо бројеве колона који узимају у обзир вишебајтне знакове и знакове који заузимају неколико позиција у реду (на пример, знак 🙂 заузима две позиције и је кодиран у 4 бајта). Слично, знакови табулатора се сада третирају као одређени број размака (конфигурише се преко опције -фтабстоп, подразумевано 8). За враћање старог понашања предлаже се опција „-фдиагностицс-цолумн-унит=бите”, а за одређивање почетне вредности (нумерисање од 0 или 1) – опција „-фдиагностицс-цолумн-оригин=”.
  • Векторизатор узима у обзир цео садржај функције и додаје могућности обраде повезане са пресецима и референцама на претходне блокове у графу тока контроле (ЦФГ, граф тока контроле).
  • Оптимизатор имплементира могућност претварања низа условних операција које упоређују исту променљиву у израз прекидача. У будућности, свитцх израз може да се кодира коришћењем инструкција за тестирање битова (додата је опција „-фбит-тестс“ за контролу такве конверзије).
  • Побољшане међупроцедуралне оптимизације. Додат је нови ИПА-модреф пролаз (-фипа-модреф) за праћење нежељених ефеката при позивању функција и побољшање тачности анализе. Побољшана имплементација ИПА-ИЦФ пролаза (-фипа-ицф), што смањује потрошњу меморије током компилације и повећава број обједињених функција за које се комбинују идентични блокови кода. У пролазу ИПА-ЦП (Интерпроцедурал цонстант пропагатион), хеуристика предвиђања је побољшана, узимајући у обзир познате границе и карактеристике петљи.
  • У оптимизацији времена повезивања (ЛТО), формат бајткода је оптимизован да смањи величину и побољша брзину обраде. Смањена вршна потрошња меморије током фазе везивања.
  • У механизму оптимизације заснованом на резултатима профилисања кода (ПГО - Профиле-гуидед оптимизатион), који омогућава генерисање оптималнијег кода на основу анализе карактеристика извршења, величина фајлова са ГЦОВ подацима је смањена због компактнијег паковања нултих бројача. . Побољшан режим "-фпрофиле-валуес" праћењем више параметара индиректних позива.
  • Имплементација ОпенМП 5.0 (Опен Мулти-Процессинг) стандарда, који дефинише АПИ и методе за примену метода паралелног програмирања на вишејезгарним и хибридним (ЦПУ+ГПУ/ДСП) системима са дељеном меморијом и јединицама за векторизацију (СИМД), има наставио. Додата иницијална подршка за директиву алоцирања и могућност коришћења хетерогених петљи у ОпенМП конструкцијама. Имплементирана подршка за променљиву окружења ОМП_ТАРГЕТ_ОФФЛОАД.
  • Имплементација ОпенАЦЦ 2.6 спецификације паралелног програмирања обезбеђена за језике Ц, Ц++ и Фортран је побољшана, која дефинише алате за ослобађање операција на ГПУ-овима и специјализованим процесорима, као што је НВИДИА ПТКС.
  • За језике Ц имплементиран је нови атрибут „но_стацк_протецтор“, дизајниран да означи функције за које заштита стека не би требало да буде омогућена („-фстацк-протецтор“). Атрибут „маллоц“ је проширен да подржи идентификацију парова позива за додељивање и ослобађање меморије (алокатор/деалокатор), који се користи у статичком анализатору за идентификацију типичних грешака у раду са меморијом (цурење меморије, коришћење након ослобађања, двоструки позиви функције фрее, итд.) и у упозорењима компајлера „-Вмисматцхед-деаллоц“, „-Вмисматцхед-нев-делете“ и „-Вфрее-нонхеап-објецт“, обавештавајући о неконзистентности између операција делокације меморије и доделе меморије.
  • Додата су нова упозорења за језик Ц:
    • „-Вмисматцхед-деаллоц“ (подразумевано омогућено) – упозорава на операције расподеле меморије које користе показивач који није компатибилан са функцијама доделе меморије.
    • „-Всизеоф-арраи-див“ (омогућено када је наведен „-Валл“) – Упозорава на дељење два оператора сизеоф ако се делилац не поклапа са величином елемента низа.
    • "-Встрингоп-оверреад" (подразумевано омогућено) - упозорава на позивање стринг функције која чита податке из области изван границе низа.
    • „-Втсан“ (подразумевано омогућено) – Упозорава на коришћење функција (као што је стд::атомиц_тхреад_фенце) које нису подржане у ТхреадСанитизер-у.
    • “-Варраи-параметер” и “-Ввла-параметер” (омогућено када се специфицира “-Валл”) - упозорава на прејашњење функција са некомпатибилним декларацијама аргумената повезаних са низовима фиксне и променљиве дужине.
    • Упозорење „-Вунинитиализед” сада открива покушаје читања из неиницијализоване динамички додељене меморије.
    • Упозорење „-Вфрее-нонхеап-објецт“ проширује дефиницију случајева у којима се позивају функције ослобађања меморије са показивачем који није добијен кроз функције динамичке алокације меморије.
    • Упозорење „-Вмаибе-унинитиализед“ је проширило детекцију преласка показивача на функције које се односе на неиницијализоване меморијске локације.
  • За језик Ц је имплементиран део нових функција развијених у оквиру Ц2Кс стандарда (омогућено навођењем -стд=ц2к и -стд=гну2к): макрои БООЛ_МАКС и БООЛ_ВИДТХ, опционо навођење имена неискоришћених параметара у функцији дефиниције (као у Ц++), атрибут „[ [нодисцард]]“, оператор препроцесора „__хас_ц_аттрибуте“, макрои ФЛТ_ИС_ИЕЦ_60559, ДБЛ_ИС_ИЕЦ_60559, ЛДБЛ_ИС_ИЕЦ_60559, __СТДЦ_ВАНТ_ИЕЦ_ИНБЛИТИ, __СТДЦ_ВАНТ_ИЕЦ_60559. ЛДБЛ_СНАН, ДЕЦ_ИНФИНИТИ и ДЕЦ _НАН, НаН=макрои за ФлоатН, _ФлоатНк и _ДецималН, могућност специфицирања ознака за скок пре декларација и на крају сложених израза.
  • За Ц++ је имплементиран део промена и иновација предложених у стандарду Ц++20, укључујући виртуелне функције „цонстевал виртуал“, псеудо-деструкторе за крај животног циклуса објеката, употребу енум класе и израчунавање величине низа у изразу „нови“.
  • За Ц++ је додата експериментална подршка за нека побољшања која се развијају за будући Ц++23 стандард (-стд=ц++23, -стд=гну++23, -стд=ц++2б, -стд=гну ++2б). На пример, сада постоји подршка за литерални суфикс „зу“ за вредности величине_т са знаком.
  • либстдц++ је побољшао подршку за Ц++17 стандард, укључујући увођење имплементација стд::фром_цхарс и стд::то_цхарс за типове са покретним зарезом. Имплементирани су нови елементи Ц++20 стандарда, укључујући стд::бит_цаст, стд::соурце_лоцатион, атомске операције чекају и обавештавају, , , , , као и елементе будући Ц++ стандард 23 (стд::то_ундерлиинг, стд::ис_сцопед_енум). Додата експериментална подршка за типове за паралелну обраду података (СИМД, Дата-Параллел Типес). Имплементација стд::униформ_инт_дистрибутион је убрзана.
  • Уклоњена је ознака квалитета алфа из либгццјит, заједничке библиотеке за уграђивање генератора кода у друге процесе и његово коришћење за организовање ЈИТ компилације бајткода у машински код. Додата је могућност прављења либгццјит-а за МинГВ.
  • Додата подршка за ААрцх64 Армв8-Р архитектуру (-марцх=армв8-р). За ААрцх64 и АРМ архитектуре, додата је подршка за процесоре (параметри -мцпу и -мтуне): Арм Цортек-А78 (цортек-а78), Арм Цортек-А78АЕ (цортек-а78ае), Арм Цортек-А78Ц (цортек-а78ц) , Арм Цортек-Кс1 (цортек-к1), Арм Неоверсе В1 (неоверсе-в1) и Арм Неоверсе Н2 (неоверсе-н2). Фујитсу А64ФКС (а64фк) и Арм Цортек-Р82 (цортек-р82) процесори су такође додати, који подржавају само ААрцх64 архитектуру.
  • Додата подршка за коришћење Армв8.3-а (ААрцх64/ААрцх32), СВЕ (ААрцх64), СВЕ2 (ААрцх64) и МВЕ (ААрцх32 М-профил) СИМД инструкција за аутовекторизацију операција које обављају сабирање, одузимање, множење и варијанте сабирања/одузимања преко комплексни бројеви. Додата иницијална подршка за аутовекторизацију за АРМ помоћу МВЕ скупа инструкција.
  • За АРМ платформе, обезбеђен је пун скуп Ц функција (Интринсицс) интегрисаних у компајлер, замењених проширеним векторским инструкцијама (СИМД), које покривају све НЕОН инструкције документоване у спецификацији АЦЛЕ К3 2020.
  • Подршка за гфк908 ГПУ је додата у позадину за генерисање кода за АМД ГПУ засноване на ГЦН микроархитектури.
  • Додата подршка за нове процесоре и нова проширења скупа инструкција имплементирана у њима:
    • Интел Саппхире Рапидс (-марцх=саппхирерапидс, омогућава подршку за МОВДИРИ, МОВДИР64Б, АВКС512ВП2ИНТЕРСЕЦТ, ЕНКЦМД, ЦЛДЕМОТЕ, СЕРИАЛИЗЕ, ПТВРИТЕ, ВАИТПКГ, ТСКСЛДТРК, АМТ-ТИЛЕ, АМКС-КСБИНТ.8 инструкције
    • Интел Алдерлаке (-марцх=алдерлаке, омогућава подршку за ЦЛДЕМОТЕ, ПТВРИТЕ, ВАИТПКГ, СЕРИАЛИЗЕ, КЕИЛОЦКЕР, АВКС-ВННИ и ХРЕСЕТ упутства).
    • Интел Роцкетлаке (-марцх=роцкетлаке, слично Роцкет Лакеу без СГКС подршке).
    • АМД Зен 3 (-марцх=знвер3).
  • За ИА-32/к86-64 системе засноване на Интел процесорима, додата је подршка за нове процесорске инструкције ТСКСЛДТРК, СЕРИАЛИЗЕ, ХРЕСЕТ, УИНТРКЕИЛОЦКЕР, АМКС-ТИЛЕ, АМКС-ИНТ8, АМКС-БФ16, АВКС-ВННИ.
  • Додата подршка за "-марцх=к86-64-в[234]" заставице за одабир нивоа к86-64 архитектуре (в2 - покрива ССЕ4.2, СССЕ3, ПОПЦНТ и ЦМПКСЦХГ16Б екстензије; в3 - АВКС2 и МОВБЕ; в4 - АВКС-512 ) .
  • Додата подршка за РИСЦ-В системе са биг-ендиан редоследом бајтова. Додата опција "-миса-спец=*" за избор верзије спецификације архитектуре скупа инструкција РИСЦ-В. Додата подршка за АддрессСанитизер и заштиту стека помоћу канарских ознака.
  • Континуирано побољшање режима статичке анализе „-фанализер“, који врши међупроцедуралну анализу путева извршења кода и токова података у програму са захтевним ресурсима. Режим је способан да открије проблеме у фази компилације, као што су двоструки позиви функције фрее() за једну меморијску област, цурење дескриптора датотеке, дереференцирање и прослеђивање нул показивача, приступ ослобођеним меморијским блоковима, коришћење неиницијализованих вредности итд. У новој верзији:
    • Код за праћење стања програма је потпуно преписан. Проблеми са скенирањем веома великих Ц датотека су решени.
    • Додата почетна подршка за Ц++.
    • Анализа алокације и ослобађања меморије је апстрахована од специфичних маллоц и фрее функција и сада подржава нев/делете и нев[]/делете[].
    • Додата су нова упозорења: -Ванализер-схифт-цоунт-негативе, -Ванализер-схифт-цоунт-оверфлов, -Ванализер-врите-то-цонст и -Ванализер-врите-то-стринг-литерал.
    • Додате нове опције за отклањање грешака -фдумп-анализер-јсон и -фно-анализер-феасибилити.
    • Имплементирана је могућност проширења анализатора преко додатака за ГЦЦ (на пример, припремљен је додатак за проверу нетачне употребе глобалног закључавања (ГИЛ) у ЦПитхон-у).

Извор: опеннет.ру

Додај коментар