Стартирането на новата версия на компилатора GCC (Колекция от компилаторите на GNU) 12.1 вече беше пуснат и както при всички основни издания на GCC, тази версия ще донесе много допълнения, подобрения, корекции на грешки и нови функции, плюс този месец (23 май) проектът ще отпразнува 35 години от създаването на първата версия.
GCC 12 вече е системният компилатор за Fedora 36, а GCC 12 също ще бъде наличен на Red Hat Enterprise Linux в Red Hat Developer Toolset (версия 7) или Red Hat GCC Toolset (версии 8 и 9).
Разработчиците на GCC с гордост обявяват друга голяма версия на GCC, 12.1.
Тази година празнуваме 35-ата годишнина от първата бета версия на GCC
И този месец ще празнуваме 35 години от пускането на GCC 1.0!Тази версия отпада поддръжката за STABS формат за отстраняване на грешки и
въвежда поддръжка за CTF формат за отстраняване на грешки [1]. C и C++
интерфейсите продължават да се развиват с разширена поддръжка за функции
в предстоящите стандарти C2X и C++23 и C++ Standard Library
подобрява поддръжката на експерименталните части на C++20 и C++23.
Интерфейсът на Fortran вече е напълно съвместим с TS 29113 за оперативна съвместимост с C.
Какво е новото в GCC 12.1?
В тази нова версия Реализирани са няколко предложения, като например за езиците C и C++, добавени вградена функция __builtin_dynamic_object_size за определяне на размера на обект, съвместим с подобна функция на Clang.
Добавено поддръжка за атрибута "недостъпен" за езиците C и C++ (например, можете да маркирате функции, които ще доведат до грешка, когато се използват), както и добавена поддръжка за директивите за предварителна обработка "#elifdef" и "#elifndef" за езиците C и C++.
Отбелязва се също, че Флаг "-Wbidi-chars", за да предупреди, ако UTF-8 знаци са използвани неправилно, променяйки реда на двупосочно показване на текст, както и флага "-Warray-compare", за да издаде предупреждение при опит за сравняване на два операнда, които се отнасят до масиви.
В допълнение, iВнедряване на стандартите OpenMP 5.0 и 5.1 (Open Multi-Processing), които дефинират API и методи за прилагане на методи за паралелно програмиране върху многоядрени и хибридни (CPU + GPU / DSP) системи със споделена памет и модули за векторизация (SIMD).
Също така подобрено изпълнение на спецификацията за паралелно програмиране OpenACC 2.6, определяне на средствата за разтоварване на операции на графични процесори и специализирани процесори като NVIDIA PTX и добавяне на поддръжка за разширените инструкции Intel AVX512-FP16 и типа _Float16 към бекенда за генериране на код x86.
Предният край на Fortran осигурява пълна поддръжка за спецификацията TS 29113, която описва възможностите за осигуряване на преносимост между Fortran и C код.
Оттеглена поддръжка за формата за съхранение на информация за отстраняване на грешки „STABS“, създаден през 1980-те години.
Добавена е поддръжка за разширението __builtin_shufflevector(vec1, vec2, index1, index2, …), добавено преди това към Clang, което осигурява едно извикване за извършване на общи операции за разместване и разбъркване на вектори.
Когато се използва ниво на оптимизация "-O2", векторизацията е активирана по подразбиране (разрешени са режимите -ftree-vectorize и -fvect-cost-model=много евтини). Моделът "много евтин" позволява векторизация само ако векторният код може напълно да замени векторизираем скаларен код.
Добавен режим "-ftrivial-auto-var-init". за да активирате изрична инициализация на променливи в стека, за да проследите проблеми и да блокирате уязвимостите, свързани с използването на неинициализирани променливи.
Добавен изпълнение на C функции, вградени в компилатора (Intrinsics) за атомно зареждане и съхранение на данни в паметта, въз основа на използването на разширени инструкции ARM (ls64). Добавена е поддръжка за ускоряване на функциите memcpy, memmove и memset с помощта на разширението ARM mopoption.
Добавено нов режим на проверка "-fsanitize=shadow-call-stack" ( ShadowCallStack), който в момента е достъпен само за архитектурата AArch64 и работи при компилиране на код с опцията "-fixed-r18". Режимът осигурява защита срещу презаписване на адреса за връщане на функцията в случай на препълване на буфера на стека. Същността на защитата е да запише адреса за връщане в отделен стек "сянка" след прехвърлянето на контрола към функцията и да извлече този адрес преди излизане от функцията.
Fuente: https://gcc.gnu.org/pipermail