The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз набора компиляторов GCC 8"
Отправлено opennews, 02-Май-18 22:32 
После года разработки опубликован (https://gcc.gnu.org/ml/gcc-announce/2018/msg00001.html) релиз свободного набора компиляторов GCC 8.1 (https://gcc.gnu.org/gcc-8), первый значительный выпуск в новой ветке GCC 8.x. В соответствии с новой схемой (https://gcc.gnu.org/develop.html#num_scheme) нумерации выпусков, версия 8.0 использовалась в процессе разработки, а незадолго до выхода GCC 8.1 уже ответвилась ветка GCC 9.0, на базе которой будет сформирован следующий значительный релиз GCC 9.1.


GCC 8.1 примечателен реализацией некоторых возможностей будущего стандарта C++20 (кодовое название C++2a), существенным расширением средств диагностики, значительным улучшением PGO-оптимизаций (Profile-guided optimization), включением в режиме "-O3" новых оптимизаций выполнения циклов, обеспечением поддержки SVE (Scalable Vector Extension) для архитектуры AArch64.

Основные изменения (https://gcc.gnu.org/gcc-8/changes.html):

-  Добавлена экспериментальная поддержка части (https://gcc.gnu.org/projects/cxx-status.html#cxx2a) будущего стандарта C++2a.  Для включения поддержки C++2a следует использовать опции "-std=c++2a" и "-std=gnu++2a";

-  В libstdc++ добавлены следующие возможности стандартов C++17 и C++2a:        std::filesystem, std::char_traits,  std::to_chars и std::from_chars, std::to_address и std::endian. Добавлена поддержка расширений математических функций __gnu_cxx::airy_ai и __gnu_cxx::airy_bi;

-  Существенно улучшен механизм оптимизации на основе результатов профилирования кода (PGO (https://ru.wikipedia.org/wiki/Profile-guided_optimization) - Profile-guided optimization), который генерирует более оптимальный код на основе анализа особенностей выполнения кода. На системах x86/x86_64 тело функции теперь разделяется на горячие и холодные регионы выполнения, данный режим оптимизации (-freorder-blocks-and-partition) по умолчанию применяется начиная с уровня "-O2";

-  В системе оптимизации на этапе связывания (LTO) представлен новый способ подстановки отладочной информации в формате DWARF, что упрощает отладку оптимизированного кода;

-  Добавлены  новые оптимизации циклов: "-floop-unroll-and-jam" (раскрутка внешнего цикла и слияние копий внутреннего цикла) и  "-floop-interchange" (обмен циклами во вложенном цикле для улучшения локализации данных). Улучшена работа оптимизации "-ftree-loop-distribution" (расщепление тела вложенного цикла на несколько циклов). Включены по умолчанию при выборе режима "-O3" оптимизации "-ftree-loop-distribution", "-floop-unroll-and-jam" и  "-floop-interchange". Полностью переработан режим оптимизации "-floop-nest-optimize". Для тонкого управления оптимизациями раскрутки цикла (https://ru.wikipedia.org/wiki/%D0%A0%D0%... добавлена новая pragma "unroll";


-  Улучшены межпроцедурные оптимизации: переработаны собираемые в процессе выполнения оценочные метрики, которые теперь более реалистично отражают ситуации, для которых можно использовать inline-развёртывание или клонирование;

-  Добавлена опция "-fcf-protection=[full|branch|return|none]", позволяющая повысить защищённость собираемого приложения благодаря выполнению проверок целевых адресов в инструкциях передачи потока выполнения (например, при косвенных вызовах функций, возврате из функций и косвенных jump-переходов);

-  Добавлена опция "-fstack-clash-protection", при указании которой компилятор подставляет проверочные вызовы (probe) при каждом статическом или динамическом выделении места для стека, которые позволяют выявлять факты переполнения стека и блокировать методы атак, связанные с пробросом потока выполнения через guard-страницы защиты стека;

-  В детекторе неопределенного поведения (Undefined Behavior Sanitizer), выявляющего ситуации, когда поведение программы становится неопределенным (зависит от реализации компилятора) из-за ошибки программиста, предложены две новые опции: "-fsanitize=builtin" для диагностики  некорректных аргументов вызовов __builtin_clz или __builtin_ctz, и "-fsanitize=pointer-overflow" для проверки  
появления недопустимых значений указателей;
-  В Address Sanitizer добавлены режимы "-fsanitize=pointer-compare" и  "-fsanitize=pointer-subtract", выводящие предупреждение о выполнении операций вычитания или сравнения над указателями, которые ссылаются на разные объекты в памяти;

-  Значительно расширены средства диагностики, обеспечено более точное определение местоположения проблем в коде и представлены подсказки по устранению проблем. Например, в случает пропущенных скобок '}' и ')' компилятор теперь указывает на место возможного пропуска. В случае обращения к приватным полям класса или структуры, выдаётся подсказка по использовании функции-обёртки для получения поля. Показывается когда можно использовать static_cast, const_cast и reinterpret_cast. Не подходящие друг другу типы шаблонов выделяются цветом  или могут быть визуализированы (-fdiagnostics-show-template-tree) в иерархическом виде;


-   В компиляторы C и C++ добавлены новые предупреждения (https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options...: "-Wmultistatement-macros" (небезопасное раскрытие макроса), "-Wstringop-truncation" (при усечении строки, копируемой через strncat, strncpy и stpncpy), "-Wif-not-aligned" (некорректное определение объектов с атрибутом  warn_if_not_aligned), "-Wmissing-attributes" (пропущены атрибуты при определении функции), "-Wpacked-not-aligned" (struct или union определены с атрибутом  packed и выравниванием больше 1), "-Wcast-function-type" (некорректное приведение типа для указателя на функцию), "-Wsizeof-pointer-div", "-Wcast-align=strict", "-Wclass-memaccess"


-  Включена по умолчанию опция "-gcolumn-info", при которой в отладочную информацию DWARF добавляются не только имя файла и номер строки, но и данные о столбце;


-  Поддержка развиваемого компанией Google языка программирования Go обновлена до версии 1.10.1. Сборщик мусора переведён на работу в параллельном режиме. Как и раньше, значения в стеке сканируются консервативно, но значения в куче сканируется точно.

-   Для ахритектуры ARM64 (AArch64) добавлена поддержка механизма SVE  (https://community.arm.com/processors/b/blog/posts/technology... Vector Extension), предоставляющего расширенные инструкции для векторной обработки данных, дополняющие набор NEON средствами для ускорения операций векторизации для научных вычислений;

-  Добавлена поддержка архитектур ARM: Armv8-R (-march=armv8-r), Armv8.3-A (-march=armv8.3-a) и Armv8.4-A (-march=armv8.4-a) и процессоров Arm Cortex-A75 (cortex-a75), Arm Cortex-A55 (cortex-a55),  Arm Cortex-A55/Cortex-A75 DynamIQ big.LITTLE (cortex-a75.cortex-a55) и
   Arm Cortex-R52 для Armv8-R (cortex-r52);

-  Добавлена поддержка процессоров Intel Cannonlake (-march=cannonlake) c расширениями AVX512VBMI, AVX512IFMA и SHA ISA, Intel Icelake (-march=icelake)  c расширениями AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID и AVX512VPOPCNTDQ ISA;

-  Для систем x86 добавлена поддержка расширения CET
(Intel Control-flow Enforcement Technology) активируемого при помощи опций "-mibt", "-mshstk" и "-mcet";


-  Удалена поддержка устаревшего формата отладочной информации SDB/coff, опция "-gcoff" больше не поддерживается;
-  Удалена поддержка расширений Cilk+ (https://www.opennet.ru/opennews/art.shtml?num=31517) и MPX (https://ru.wikipedia.org/wiki/Intel_MPX)  для языков  C и C++, с реализацией предложенной компанией Intel методики параллельного программирования и механизма защиты памяти.

URL: https://gcc.gnu.org/ml/gcc-announce/2018/msg00001.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=48535

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру