Компилаторите от серия GCC 10 пристигат в основен ъпгрейд

GCC (GNU Compiler Collection) 10.1, основна версия на платформата, беше публикувана на 7 май 2020 г., с акценти, включително C ++ 20 възможности и поддръжка на език C2X. C2X е следващата голяма ревизия на езика C, която се очаква през 2022 г. 

Бележките по изданието за GCC 10 показват, че са внедрени множество функции на C ++ 20, включително разрешаване на вградено сглобяване във функциите на constexpr и разширяване на структурирани обвързвания. Също така за C ++ 20, GCC 10 разрешава преобразувания в масиви с неизвестна обвързаност, позволява тривиална инициализация по подразбиране в контексти на constexpr, добавя constinitключовата дума и отменя ключовата  volatile дума.

За C2X, предстоящата ревизия на стандарта ISO C, се поддържат няколко функции със синтаксиса  -std=c2xи -std+gnu2x. Сред тях са и strftimeформат проверка който носи %OBи %Obформати и UTF-8 константи характер с помощта на U8 '' синтаксис.

GCC, който съществува повече от 33 години, включва предни краища и библиотеки за C, C ++, Fortran, Ada, Go и D. Публикуван е бюлетин за пренасяне към GCC 10. Други нови възможности в GCC 10.1 включват

  • Добавени са вградени функции, включително has_builtinоператор на препроцесор, който може да се използва за заявка за поддръжка за вградени функции, предоставени от GCC и други компилатори, които го поддържат. 
  • Добавени са командни опции. Те включват  -fallocation-dce, за да се премахнат ненужните двойки newи deleteоператори и -fanalyzerда се даде възможност за нов пропуск за статичен анализ и свързани предупреждения. Последният вариант трябва да се разглежда като фаза на експеримента.
  • Направени са подобрения на междупроцедурната оптимизация. Те включват повторно внедряване на междупроцедурните скаларни замествания на агрегати (IPA-SRA), който е преработен, за да работи по време на свързване. IPA-SRA вече може също така да премахва изчисленията и да връща неизползвани стойности за връщане.
  • Подобренията за оптимизиране на времето за връзка включват нов двоичен файл ito-dump. Програмата може да изхвърля различна информация за byteобектния файл на LTO .
  • Направени са подобрения на оптимизацията, управлявани от профили, включително подобряване на поддръжката на профила по време на компилация и разделяне на горещо / студено.
  • За семейството C accessфункцията и typeатрибутът са добавени, за да опишат как функция осъществява достъп до обекти, предадени към нея чрез указател или препратка, и да свързват такива аргументи с цели числа, обозначаващи размера на обекта. Атрибутът се използва, за да позволи откриването на невалидни достъпи от дефинирани от потребителя функции. Има и нови предупреждения и подобрения на съществуващите предупреждения. Едно предупреждение, -Wzero-length-boundsпредупреждава за достъп до елементи от масиви с нулева дължина, които могат да се припокриват с други членове на същия обект.
  • Поправена е ABI несъвместимост между C ++ 14 и C ++ 17. На някои цели клас с нулев размер на субект ще бъде предаден неправилно, когато се компилира като C ++ 17 или C ++ 20.