GCC 11.1 вже випущений, це його найважливіші новини та зміни

Після року розвитку, випущена нова версія набору компіляторів GCC 11.1, перший значний випуск у новій гілці GCC 11.x. За новою схемою нумерації версій під час розробки використовувалася версія 11.0, і незадовго до виходу GCC 11.1 гілка GCC 12.0 вже була розгалужена для формування наступної великої версії GCC 12.1.

GCC 11.1 виділяється переходом у формат файлу налагодження за замовчуванням DWARF 5, включення за замовчуванням стандарту C ++ 17 ("-std = gnu ++ 17"), значні покращення сумісності зі стандартом C ++ 20, експериментальна підтримка C ++ 23, вдосконалення, пов'язані з майбутнім стандартом мова C (C2x), нові оптимізації продуктивності.

GCC 11.1 Основні нові можливості

Режим за замовчуванням для мови C ++ змінено, щоб використовувати стандарт C ++ 17, замість запропонованого раніше C ++ 14. Можна вибірково вимкнути нову поведінку C ++ 17 під час обробки шаблонів, що використовують інші шаблони як параметр (-fno-new-ttp-matching).

Додана підтримка апаратного прискорення інструменту AddressSanitizer, який дозволяє визначити факти доступу до звільнених областей пам'яті, перевищення меж виділеного буфера та деяких інших типів помилок при роботі з пам'яттю. Наразі апаратне прискорення доступне лише для архітектури AArch64 і зосереджується на його використанні під час компіляції ядра Linux.

Ще однією новинкою, яка представлена, є оптимізація та вдосконалення між процедурами, оскільки був доданий новий прохід IPA-modref (-fipa-modref) для відстеження побічних ефектів у викликах функцій та підвищення точності аналізу. До того ж також a вдосконалене впровадження пропуску IPA-ICF (-fipa-icf), що зменшує споживання пам’яті компіляції та збільшує кількість уніфікованих функцій, для яких об’єднуються однакові блоки коду.

El механізм оптимізації, керований профілем (ГПО), покращений режим "-fprofile-values" відстежуючи більше параметрів для непрямих дзвінків.

також Виділено подальше впровадження стандарту OpenMP 5.0 (Open Multi-Processing), в якому додана початкова підтримка директиви призначення та можливість використання нерівномірних циклів у збірках OpenMP. Тепер змінна середовища OMP_TARGET_OFFLOAD підтримується.

Вдосконалено специфікацію паралельного програмування OpenACC 2.6, передбачену для мов C, C ++ та Fortran, яка визначає інструменти для розвантаження операцій на графічні процесори та спеціалізовані процесори, такі як NVIDIA PTX.

Для мов сімейства C реалізовано новий атрибут "no_stack_protector", призначений для позначення функцій, для яких захист стека не повинен бути включений ("-fstack-protector"). Атрибут "malloc" був розширений з підтримкою ідентифікації пар викликів для виділення та звільнення пам'яті, який використовується в статичному аналізаторі для виявлення типових помилок пам'яті (витоків пам'яті, використання після безкоштовної, подвійні виклики вільної функції тощо) та попереджень компілятора "-Wmismatched-dealloc", "-Wmismatched- new-delete" і " -Wfree-nonheap-object "повідомляє про суперечливі операції вивільнення та вивільнення.

При генерації інформації про налагодження за замовчуванням використовується формат DWARF 5, який у порівнянні з попередніми версіями дозволяє генерувати на 25% більш компактні дані налагодження. Повна підтримка DWARF 5 вимагає binutils принаймні версії 2.35.2.

Розширені можливості режиму ThreadSanitizer (-fsanitize = нитка), оскільки такдодає підтримку для альтернативних середовищ виконання та середовищ, а також підтримка інструмента налагодження Kercur Concurrency Sanitizer (KCSAN) для динамічного виявлення умов гонки в ядрі Linux. Додані нові параметри "–param tsan-distinct-volatile" та "–param tsan-instrument-func-entry-exit".

Векторизатор забезпечує облік усього вмісту функцій та додаткових можливостей обробки, пов’язаних із попередніми посиланнями на блоки та перетинами на схемі потоку управління (CFG).

Оптимізатор має можливість перетворити ряд умовних операцій у вираз зміни, в якому порівнюється одна і та ж змінна. Надалі вираз зміни можна кодувати за допомогою інструкцій бітового тестування (для управління цим перетворенням додано опцію "-fbit-tests").

Для C ++ впроваджено частину змін та нововведень, запропонованих у стандарті C ++ 20, включаючи віртуальні функції "consteval virtual", псевдоруйнівники для завершення життєвого циклу об'єктів, використання класу enum та обчислення розмір масиву у виразі "новий".

Якщо ви хочете дізнатися більше про це, Ви можете перевірити деталі в за наступним посиланням. 


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.