После годину дана развоја објављено издање бесплатног скупа компајлера ГЦЦ КСНУМКС, прво велико издање у новој грани ГЦЦ 10.к. Сходно нова шема издања, верзија 10.0 је коришћена у процесу развоја, а непосредно пре изласка ГЦЦ 10.1, грана ГЦЦ 11.0 се већ разгранала, на основу које би се формирало следеће значајно издање, ГЦЦ 11.1.
ГЦЦ 10.1 је познат по имплементацији многих иновација у језику Ц++ развијених за стандард Ц++20, побољшањима у вези са будућим стандардом језика Ц (Ц2к), новим оптимизацијама у позадини компајлера и експерименталној подршци режим статичке анализе. Поред тога, током припреме нове гране, пројекат је пренео спремиште са СВН-а на Гит.
Додато експериментални начин статичке анализе "-фанализер“, који врши међупроцедуралну анализу путева извршавања кода и токова података у програму који захтевају ресурсе. Режим је способан да открије проблеме у фази компилације, као што су двоструки позиви функције фрее() за једну меморијску област, цурење дескриптора датотеке, дереференцирање и прослеђивање нул показивача, приступ ослобођеним меморијским блоковима, коришћење неиницијализованих вредности итд. Коришћење новог режима за ОпенССЛ код је већ омогућило идентификацију опасна рањивост.
Побољшане међупроцедуралне оптимизације. ИПА-СРА (Интерпроцедурал Сцалар Схаред Реплацемент) пролаз је редизајниран да ради у време повезивања и, између осталог, сада уклања израчунате и враћене неискоришћене вредности. У режиму оптимизације „-О2“, омогућена је опција „-финлине-фунцтионс“, која је поново подешена да даје предност компактнијем коду у односу на перформансе извршавања. Рад хеуристике за примену инлине функције је убрзан. Инлине експанзија и хеуристика клонирања функција сада могу да користе информације о распонима вредности за предвиђање ефикасности појединачних трансформација. За Ц++, побољшана је прецизност рашчлањивања алијаса заснованог на типу.
Побољшане оптимизације времена повезивања (ЛТО). Додата нова извршна датотека лто-думп да ресетујете информације о објектним датотекама са ЛТО бајт кодом. Паралелни ЛТО пролази аутоматски одређују број истовремено покренутих задатака израде и, ако се не могу одредити, користе информације о броју ЦПУ језгара као фактор паралелизације. Додата је могућност компресије ЛТО бајткода помоћу зстд алгоритма.
Побољшан је механизам оптимизације на основу резултата профилисања кода (ПГО – Профиле-гуидед оптимизатион), који генерише оптималнији код на основу анализе карактеристика извршавања кода. Побољшано одржавање профила током компилације и одвајање топлог/хладног кода. Преко опције "-фпрофилне вредности» сада може да прати до 4 вредности профила, на пример за индиректне позиве и пружање прецизнијих информација о профилу.
Спецификација паралелног програмирања имплементирана за језике Ц, Ц++ и Фортран ОпенАЦЦ 2.6, који дефинише алате за преузимање операција на ГПУ-овима и специјализованим процесорима као што је НВИДИА ПТКС. Имплементација стандарда је скоро завршена ОпенМП 5.0 (Опен Мулти-Процессинг), који дефинише АПИ и методе примене метода паралелног програмирања на вишејезгарним и хибридним (ЦПУ+ГПУ/ДСП) системима са дељеном меморијом и јединицама за векторизацију (СИМД). Додате функције као што су ластпривате кондиционали, директиве скенирања и петље, изрази реда и употребе_девице_аддр. За ОпенМП и ОпенАЦЦ, додата је подршка за операције преузимања на ГПУ-овима четврте генерације (Фиџи) и пете генерације АМД Радеон (ГЦН) (ВЕГА 10/ВЕГА 20).
За језике породице Ц, функција „приступ“ је додата да опише приступ функције објектима прослеђеним референцом или показивачем и да повеже такве објекте са целобројним аргументима који садрже информације о величини објеката. Да би радио заједно са „приступом“, атрибут „типе“ је имплементиран да открије нетачан приступ од корисничких функција, на пример, када се уписују вредности у област изван граница низа. Такође је додат атрибут „симвер“ за повезивање симбола у ЕЛФ датотеци са одређеним бројевима верзија.
Додата су нова упозорења:
“-Встринг-цомпаре” (омогућено са “-Вектра”) – упозорава на присуство израза у којима се нула упоређује са резултатом позива стрцмп и стрнцмп функција, што је еквивалентно константи због чињенице да је дужина једног аргумента је већи од величине низа у другом аргументу.
„-Взеро-ленгтх-боундс“ (омогућено са „-Варраи-боундс“) – упозорава на приступ елементима низа нулте дужине, што може довести до преписивања других података.
Упозорења „-Варраи-боундс”, „-Вформат-оверфлов”, „-Врестрицт”, „-Вретурн-лоцал-аддр” и „-Встрингоп-оверфлов” су проширена како би се повећао број ситуација ван граница којима се рукује.
Имплементирана је могућност директног навођења широких знакова у идентификаторима користећи тренутно кодирање (УТФ-8 подразумевано) уместо УЦН нотације (\уНННН или \УННННННННН). На пример:
За језик Ц, имплементиран је део нових функција развијених у оквиру Ц2Кс стандарда (омогућено навођењем -стд=ц2к и -стд=гну2к): појавила се подршка за „[[]]“ синтаксу за дефинисање атрибута као у Ц++ (на пример, [[гну ::цонст]], [[депрецатед]], [[фаллтхроугх]] и [[маибе_унусед]]. Додата подршка за "у8" синтаксу за дефинисање константи са УТФ-8 знаковима.
Додати су нови макрои у . Додане су замене „%ОБ“ и „%Об“ у стрфтиме.
Подразумевани режим за Ц је "-фно-цоммон", што омогућава ефикаснији приступ глобалним променљивим на неким платформама.
За Ц++ је имплементирано око 16 измена и иновација, развијених у Ц++20 стандарду. Укључујући додату кључну реч „констинит“
и имплементирана је подршка за проширења шаблона "концепти„. Концепти вам омогућавају да дефинишете скуп захтева параметара шаблона који, у време компајлирања, ограничавају скуп аргумената који се могу прихватити као параметри шаблона. Концепти се могу користити да би се избегле логичке недоследности између својстава типова података који се користе у оквиру шаблона и својстава типа података улазних параметара.
Г++ обезбеђује детекцију недефинисаног понашања изазваног променом константних објеката преко цонстекпр. Смањена потрошња меморије од стране компајлера приликом израчунавања цонстекпр. Додата су нова упозорења "-Вмисматцхед-тагс" и "-Вредундант-тагс".
Предложене су нове опције командне линије:
"-фаллоцатион-дце" за уклањање непотребних парова "нев" и "делете" оператора.
"-фпрофиле-партиал-траининг" да бисте онемогућили оптимизацију величине за код који нема покретање обуке.
"-фпрофиле-репродуцибле за контролу нивоа поновљивости профила.
"-фпрофиле-префик-патх" за дефинисање основног изворног директоријума за изградњу који се користи за одвојено генерисање профила (за "-фпрофиле-генерате=профиле_дир" и "-фпрофиле-усе=профиле_дир").
У тексту упозорења за поменуте опције дате су хипервезе које вам омогућавају да пређете на документацију за ове опције. Замена УРЛ-а се контролише помоћу опције "-фдиагностицс-урлс".
Додан оператер препроцесора "__хас_буилтин", који се може користити за проверу уграђених функција.
Додата је нова уграђена функција „__буилтин_роундевен“ са имплементацијом функције заокруживања дефинисане у ИСО/ИЕЦ ТС 18661 спецификацији, слична „заокруженој“, али део заокруживања већи од 0.5 навише (на већу вредност), мањи од 0.5 - доле (на нулу), и једнако 0.5 - почевши од паритета претпоследње цифре.
За архитектуру ААрцх64, додата је подршка за СВЕ2 екстензију и побољшана је подршка за СВЕ (Сцалабле Вецтор Ектенсион), укључујући додату подршку за уграђене СВЕ АЦЛЕ функције и типове и коришћење векторизације. Проширена је подршка за ЛСЕ (Ларге Систем Ектенсионс) и ТМЕ (Трансацтионал Мемори Ектенсион). Додате нове инструкције предложене у Армв8.5-А и Армв8.6-А, укључујући упутства за генерисање случајних бројева, заокруживање, повезивање меморијских ознака,
бфлоат16 и множење матрице. Додата подршка за процесор
Арм Цортек-А77,
Арм Цортек-А76АЕ,
Арм Цортек-А65,
Арм Цортек-А65АЕ,
Арм Цортек-А34 и
Марвелл ТхундерКс3.
Додата подршка за АБИ ФДПИЦ (32-битни показивачи функција) за АРМ64. Редизајнирана и оптимизована обрада 64-битних целобројних операција. Додата подршка за ЦПУ
Арм Цортек-А77,
Арм Цортек-А76АЕ и
Арм Цортек-М35П. Проширена подршка за АЦЛЕ инструкције за обраду података, укључујући 32-битни СИМД, 16-битно множење, аритметику са затварањем и друге оптимизације ДСП алгоритама. Додата експериментална подршка за АЦЛЕ ЦДЕ (Цустом Датапатх Ектенсион) упутства.
Значајно побољшано генерисање кода и векторизација у позадини за АМД ГПУ засноване на ГЦН микроархитектури.
Додата подршка за уређаје сличне КСМЕГА за АВР архитектуру
АТтини202, АТтини204, АТтини402, АТтини404, АТтини406, АТтини804, АТтини806, АТтини807, АТтини1604, АТтини1606, АТтини1607, АТтини808, АТмега809, АТмега1608м1609 3208, АТмега3209, АТмега4808 4809, АТмегаXNUMX и АТмегаXNUMX.
Додато је ново проширење архитектуре Интел ЕНКЦМД скупа инструкција (-менкцмд) за ИА-32/к86-64 архитектуре. Додата подршка за Интел Цооперлаке (-марцх=цооперлаке, укључује АВКС512БФ16 ИСА екстензију) и Тигерлаке (-марцх=тигерлаке, укључује МОВДИРИ, МОВДИР64Б и АВКС512ВП2ИНТЕРСЕЦТ ИСА екстензије) ЦПУ.
Имплементација ХСАИЛ (средњи језик хетерогене архитектуре система) за хетерогене рачунарске системе засноване на ХСА архитектури је застарела и вероватно ће бити уклоњена у будућем издању.