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

После годину дана развоја, пуштен је бесплатни пакет компајлера ГЦЦ 12.1, прво значајно издање у новој грани ГЦЦ 12.к. У складу са новом шемом нумерисања издања, верзија 12.0 је коришћена у процесу развоја, а непосредно пре изласка ГЦЦ 12.1, грана ГЦЦ 13.0 се већ одвојила, на основу чега би следеће велико издање, ГЦЦ 13.1, било бити формиран. Пројекат ће 23. маја прославити 35 година од формирања првог издања ГЦЦ-а.

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

  • Додата подршка за ЦТФ (Цомпацт Типе Формат) формат за отклањање грешака, који обезбеђује компактно складиштење информација о Ц типовима, везама између функција и симболима за отклањање грешака. Када је уграђен у ЕЛФ објекте, формат дозвољава употребу табела ЕФЛ знакова да би се избегло дуплирање података.
  • Подршка за формат складиштења информација за отклањање грешака „СТАБС“, креиран 1980-их, је застарела.
  • Наставља се рад на проширењу подршке за будуће Ц2Кс и Ц++23 стандарде за Ц и Ц++ језике. На пример, додата је подршка за израз „иф цонстевал“; дозвољено коришћење ауто у аргументима функције („ф(ауто(г()))”); употреба нелитералних променљивих, гото и ознака је дозвољена у функцијама декларисаним као цонстекпр; додата подршка за вишедимензионалне операторе индекса оператор[]; у иф, фор и свитцх, могућности иницијализационих блокова су проширене („за (користећи Т = инт; Т е : в)”).
  • Стандардна библиотека Ц++ је побољшала подршку за експерименталне делове стандарда Ц++20 и Ц++23. Додата подршка за стд::мове_онли_фунцтион, , стд::басиц_стринг::ресизе_анд_оверврите, , и стд::инвоке_р. Дозвољено коришћење стд::уникуе_птр, стд::вецтор, стд::басиц_стринг, стд::оптионал и стд::вариант у функцијама цонстекпр.
  • Фортран фронтенд пружа пуну подршку за ТС 29113 спецификацију, која описује могућности за обезбеђивање преносивости између Фортрана и Ц кода.
  • Додата подршка за екстензију __буилтин_схуффлевецтор(вец1, вец2, индек1, индек2, ...) која је претходно додата у Цланг, која нуди један позив за обављање уобичајених операција насумице и насумице вектора.
  • Када се користи ниво оптимизације „-О2“, векторизација је подразумевано омогућена (омогућени су режими -фтрее-вецторизе и -фвецт-цост-модел=вери-цхеап). Веома јефтин модел дозвољава векторизацију само ако векторски код може у потпуности да замени скаларни код који се векторизује.
  • Додат је режим „-фтривиал-ауто-вар-инит“ да би се омогућила експлицитна иницијализација променљивих на стеку ради праћења проблема и блокирања рањивости повезаних са употребом неиницијализованих променљивих.
  • За језике Ц и Ц++ додата је уграђена функција __буилтин_динамиц_објецт_сизе за одређивање величине објекта, компатибилна са сличном функцијом из Цланг-а.
  • За језике Ц и Ц++ додата је подршка за атрибут „недоступан“ (на пример, можете означити функције које ће генерисати грешку ако покушате да их користите).
  • За Ц и Ц++ језике, додата је подршка за директиве препроцесирања „#елифдеф“ и „#елифндеф“.
  • Додата је заставица „-Вбиди-цхарс“ за приказ упозорења ако се УТФ-8 знакови користе погрешно, мењајући редослед у коме се приказује двосмерни текст.
  • Додата је заставица „-Варраи-цомпаре“ за приказ упозорења када покушавате да упоредите два операнда која се односе на низове.
  • Имплементација ОпенМП 5.0 и 5.1 (Опен Мулти-Процессинг) стандарда, који дефинишу АПИ и методе за примену метода паралелног програмирања на вишејезгарним и хибридним (ЦПУ+ГПУ/ДСП) системима са дељеном меморијом и јединицама за векторизацију (СИМД) , наставило се.
  • Побољшана имплементација ОпенАЦЦ 2.6 спецификације за паралелно програмирање, која дефинише алате за преузимање операција на ГПУ-овима и специјализованим процесорима као што је НВИДИА ПТКС.
  • Подршка за проширене инструкције Интел АВКС86-ФП512 и тип _Флоат16 је додата у позадину генерисања кода за к16 архитектуру.
  • За архитектуру к86, додата је заштита од рањивости у процесорима узрокованих спекулативним извршавањем инструкција након безусловних операција скока унапред. Проблем настаје због превентивне обраде инструкција непосредно након инструкције гранања у меморији (СЛС, Страигхт Лине Спецулатион). Да би се омогућила заштита, предлаже се опција „-мхарден-слс“.
  • Додата детекција употребе неиницијализованих варијабли експерименталном статичком анализатору. Додата почетна подршка за анализу асемблерског кода у инлине уметцима. Побољшано праћење меморије. Код за обраду свитцх израза је поново написан.
  • Додато 30 нових позива либгццјит, дељеној библиотеци за уграђивање генератора кода у друге процесе и његово коришћење за ЈИТ компајлирање бајт кода у машински код.
  • Подршка за ЦО-РЕ (Цомпиле Онце - Рун Еверивхере) механизам је додата у позадину за генерисање БПФ бајт кода, који вам омогућава да компајлирате код еБПФ програма за Линук кернел само једном и користите посебан универзални учитавач који прилагођава учитан програм у тренутно језгро и формат БПФ типова). ЦО-РЕ решава проблем преносивости компајлираних еБПФ програма, који су се раније могли користити само у верзији кернела за коју су компајлирани, пошто се позиција елемената у структурама података мења од верзије до верзије.
  • РИСЦ-В бацкенд додаје подршку за нове екстензије архитектуре скупа инструкција зба, збб, збц и збс, као и ИСА екстензије за векторске и скаларне криптографске операције. Подразумевано је обезбеђена подршка за спецификацију РИСЦ-В ИСА 20191213. Додата је ознака -мтуне=тхеад-ц906 да би се омогућиле оптимизације за Т-ХЕАД ц906 језгра.
  • Подршка за тип __инт128_т/интегер(кинд=16) је додата у позадину генерисања кода за АМД ГПУ засноване на ГЦН микроархитектури. Могуће је користити до 40 радних група по рачунарској јединици (ЦУ) и до 16 фронтова инструкција (таласни фронт, скуп нити које паралелно извршава СИМД Енгине) по групи. Раније је била дозвољена само једна ивица инструкције по ЦУ.
  • НВПТКС позадина, дизајнирана да генерише код коришћењем архитектуре скупа инструкција НВИДИА ПТКС (Параллел Тхреад Екецутион), додала је могућност коришћења заставица „-марцх“, „-мптк“ и „-марцх-мап“. Имплементирана подршка за ПТКС ИСА см_53, см_70, см_75 и см_80. Подразумевана архитектура је см_30.
  • У позадини за ПоверПЦ / ПоверПЦ64 / РС6000 процесоре, имплементације уграђених функција су преписане. Уграђене функције __буилтин_гет_текаср, __буилтин_гет_текасру, __буилтин_гет_тфхар, __буилтин_гет_тфиар, __буилтин_сет_текаср, __буилтин_сет_текасру, __буилтин_сет_т_т_ су __буилтин_сет_т_.
  • Подршка за Арм Ампере-64 (-мцпу/-мтуне ампере1), Арм Цортек-А1 (цортек-а510), Арм Цортек-А510 (цортек-а710) и Арм Цортек-Кс710 (цортек-к2). Додата подршка за нове опције архитектуре АРМв2 за коришћење са опцијом „-марцх“: армв8-а, армв8.7-а, армв8.8-а. Додата имплементација Ц функција уграђених у компајлер (Интринсицс) за атомско учитавање и чување података у меморији, на основу употребе проширених АРМ инструкција (лс9). Додата подршка за убрзање функција мемцпи, меммове и мемсет помоћу проширења мопсоптион АРМ.
  • Додан је нови режим провере „-фсанитизе=схадов-цалл-стацк“ (СхадовЦаллСтацк), који је тренутно доступан само за архитектуру ААрцх64 и ради када се прави код са опцијом „-ффикед-р18“. Режим пружа заштиту од преписивања повратне адресе из функције у случају прекорачења бафера на стеку. Суштина заштите је да се повратна адреса сачува у засебном стеку „сенке“ након преноса контроле на функцију и преузимања ове адресе пре изласка из функције.

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

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