Издање комплета компајлера ЛЛВМ 13.0

Након шест месеци развоја, представљено је издање ЛЛВМ 13.0 пројекта - ГЦЦ-компатибилног комплета алата (компајлери, оптимизатори и генератори кода) који компајлира програме у средњи бит код виртуелних инструкција сличних РИСЦ-у (виртуелна машина ниског нивоа са систем оптимизације на више нивоа). Генерисани псеудокод се може конвертовати помоћу ЈИТ компајлера у машинске инструкције директно у време извршавања програма.

Побољшања у Цланг 13.0:

  • Имплементирана подршка за гарантоване репне позиве (позивање потпрограма на самом крају функције, формирање репне рекурзије ако потпрограм сам себе позове). Подршку за гарантоване репне позиве обезбеђују атрибути "[[цланг::мусттаил]]" у Ц++ и "__аттрибуте__((мусттаил))" у Ц, који се користе у наредби "ретурн". Ова функција вам омогућава да имплементирате оптимизације постављањем кода у равну итерацију да бисте уштедели потрошњу стека.
  • "усинг" декларације и цланг екстензије пружају подршку за дефинисање атрибута у стилу Ц++11 коришћењем "[[]]" формата.
  • Додата је ознака „-Вресервед-идентифиер“ за приказ упозорења када наведете резервисане идентификаторе у корисничком коду.
  • Додате су заставице „-Вунусед-бут-сет-параметер“ и „-Вунусед-бут-сет-вариабле“ за приказ упозорења ако је параметар или променљива постављена, али се не користи.
  • Додата је заставица „-Внулл-поинтер-субтрацтион“ за издавање упозорења ако код може да уведе недефинисано понашање због употребе нулл показивача у операцијама одузимања.
  • Додата је ознака "-фстацк-усаге" да се за сваку датотеку кода генерише додатна датотека ".су" која садржи информације о величини оквира стека за сваку функцију дефинисану у датотеци која се обрађује.
  • У статички анализатор је додат нови тип излаза - „сариф-хтмл“, који доводи до генерисања извештаја истовремено у ХТМЛ и Сариф форматима. Додата нова провера аллоцЦлассВитхНаме. Када наведете опцију “-анализер-дисплаи-прогресс”, приказује се време анализе сваке функције. Анализатор паметног показивача (алпха.цплусплус.СмартПтр) је скоро спреман.
  • Могућности повезане са ОпенЦЛ подршком су проширене. Додата подршка за нова проширења цл_кхр_интегер_дот_продуцт, цл_кхр_ектендед_бит_опс, __цл_цланг_битфиелдс и __цл_цланг_нон_портабле_кернел_парам_типес. Имплементација ОпенЦЛ 3.0 спецификације је настављена. За Ц, ОпенЦЛ 1.2 спецификација се користи подразумевано осим ако друга верзија није експлицитно изабрана. За Ц++ је додата подршка за датотеке са екстензијом „.цлцпп“.
  • Имплементирана је подршка за директиве трансформације петље (“#прагма омп унрол” и “#прагма омп тиле”) дефинисане у ОпенМП 5.1 спецификацији.
  • Додате опције услужном програму цланг-формат: СпацесИнЛинеЦомментПрефик за дефинисање броја размака пре коментара, ИндентАццессМодифиерс, ЛамбдаБодиИндентатион и ППИндентВидтх за контролу поравнања уноса, ламбда израза и директива препроцесора. Проширене су могућности за сортирање набрајања датотека заглавља (СортИнцлудес). Додата подршка за форматирање ЈСОН датотека.
  • Велики део нових провера је додат у чишћење линтера.

Кључне иновације у ЛЛВМ 13.0:

  • Додата је опција „-ехцонтгуард“ за коришћење технологије ЦЕТ (Виндовс Цонтрол-флов Енфорцемент Тецхнологи) за заштиту од извршавања експлоатација направљених коришћењем техника програмирања оријентисаног на повратак (РОП) у фази обраде изузетака.
  • Пројекат дебугинфо-тест је преименован у цросс-пројецт-тестс и дизајниран је да тестира компоненте из различитих пројеката, не ограничавајући се на информације о отклањању грешака.
  • Систем асемблера пружа подршку за изградњу неколико дистрибуција, на пример, једне са услужним програмима, а друге са библиотекама за програмере.
  • У позадини за ААрцх64 архитектуру, подршка за Армв9-А РМЕ (Реалм Манагемент Ектенсион) и СМЕ (Сцалабле Матрик Ектенсион) проширења је имплементирана у асемблеру.
  • Подршка за ИСА В68/ХВКС је додата у позадину за архитектуру Хекагон.
  • Позадина к86 је побољшала подршку за АМД Зен 3 процесоре.
  • Додата подршка за ГФКС1013 РДНА2 АПУ на АМДГПУ позадину.
  • Либц++ наставља да имплементира нове функције стандарда Ц++20 и Ц++2б, укључујући комплетирање библиотеке „концепта“. Додата подршка за стд::филесистем за Виндовс платформу засновану на МинГВ. Датотеке заглавља , и су одвојене. Додата опција израде ЛИБЦКСКС_ЕНАБЛЕ_ИНЦОМПЛЕТЕ_ФЕАТУРЕС за онемогућавање датотека заглавља са функционалношћу која није у потпуности имплементирана.
  • Проширене су могућности ЛЛД линкера у којем је имплементирана подршка за Биг-ендиан Аарцх64 процесоре, а Мацх-О бацкенд је доведен у стање које омогућава повезивање редовних програма. Укључена побољшања потребна за повезивање Глибц-а користећи ЛЛД.
  • Услужни програм ллвм-мца (Мацхине Цоде Анализер) је додао подршку за процесоре који извршавају инструкције по реду (суперскаларни цевовод у редоследу), као што је АРМ Цортек-А55.
  • ЛЛДБ дебагер за ААрцх64 платформу пружа пуну подршку за аутентификацију показивача, МТЕ (МемТаг, Мемори Таггинг Ектенсион) и СВЕ регистре. Додате команде које вам омогућавају да повежете ознаке за сваку операцију доделе меморије и организујете проверу показивача приликом приступа меморији, која мора бити повезана са исправном ознаком.
  • ЛЛДБ програм за отклањање грешака и фронтенд за језик Фортран – Фланг су додати бинарним склоповима које генерише пројекат.

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

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