3 мая состоялся первый публичный выпуск девятой версии GCC: GCC 9.1. Он содержит множество существенных улучшений и добавлений по сравнению с восьмой версией.
Общие изменения
Опции
- Команды, принимающие размер, теперь поддерживают 64-битные значения и суффиксы для указания размера.
- Добавлена опция -flive-patching, для управления оптимизациями, потенциально деструктивными для динамической замены кода.
- Добавлена опция
--completion
для поддержки автодополнения в командной оболочке. - Диагностики компилятора теперь включают номера строк (-fno-diagnostics-show-line-numbers) и информацию о типах (fno-diagnostics-show-labels).
- Добавлена опция -fdiagnostics-format=json для вывода диагностик в формате JSON.
- Опции для указания выравнивания (-falign-functions, например) теперь могут принимать пару вариантов выравнивания.
- Добавлены опции для фильтрации списка файлов (-fprofile-filter-files, -fprofile-exclude-files), которые подвергаются инструментированию профилировщиком.
- AddressSanitizer теперь использует более компактное выравнивание для отлова некорректных обращений к переменным на стеке.
- Многочисленные улучшения в выводе -fopt-info.
- Добавлена опция -fsave-optimization-record для сохранения отчёта об оптимизациях в файл.
- Добавлена опция -fipa-stack-alignment и -fipa-reference-addressable.
Новые встроенные функции
Новый атрибут
- copy.
Другое
Многочисленные улучшения кодогенерации связанные с:
- генерацией
switch
-конструкций; - межпроцедурными оптимизациями;
- оптимизацией, основанной на информации о профилированнии;
- оптимизацией на этапе сборки (LTO);
Также внутренним форматом gcov
теперь является JSON, а новая опция --use-hotness-colors включает раскрашивание строк кода в зависимости от частоты их использования.
Языки
Качество и полнота реализации OpenACC в языках C, C++ и Fortran продолжают улучшаться.
С-подобные языки
- Реализована частичная поддержка OpenMP 5.0.
- Добавлена функция __builtin_convertvector.
- Добавлено предупреждение -Waddress-of-packed-member.
- Улучшения в ряде существующих предупреждений.
- Текст ошибки при передаче в макрос неправильного количества аргументов теперь включает объявление самого макроса.
- Улучшения в предложениях об исправлении опечаток.
C
- Поддержка
_Static_assert
с одним аргументом для-std=c2x
(будущий стандарт C). - Новое предупреждение -Wabsolute-value, которое отлавливает неправильный тип аргумента для таких функций, как
abs()
.
C++
- Новые предупреждения: -Wdeprecated-copy, -Winit-list-lifetime, -Wredundant-move, -Wpessimizing-move, -Wclass-conversion.
- Ведётся работа по реализации новых возможностей из будущего стандарта C++ 2a.
- Фронтенд теперь сохраняет более точную информацию о ряде элементов исходного кода, что позволяет отображать более детальную информацию в диагностиках.
- Улучшены диагностики для перегруженных функций, бинарных операторов, вызовов функций и строк, задающих формат.
- Добавлены поддерживаемые некоторыми средами разработки автоматические исправления для ряда популярных ошибок (отсутствующие скобки, пространства имён, опечатки и т.д.).
libstdc++
- Реализация C++17 более не является экспериментальной.
- Добавлены параллельные алгоритмы,
<execution>
,<memory_resource>
, а<filesystem>
больше не требует-lstdc++fs
. - Улучшена экспериментальная поддержка C++ 2a (
<bit>
,<version>
,std::bind_front
и т.д.). - Поддержка открытия потоков файлов на Windows, пути к которым содержат символы, выходящие за рамки
char
. - Начальная поддержка
<filesystem>
на Windows. - Начальная поддержка Networking TS.
D
Язык D версии 2.076 включён в состав GCC.
Fortran
- Полная поддержка асинхронного ввода/вывода.
- Реализован аргумент
BACK
дляMINLOC
иMAXLOC
. - Реализованы функции
FINDLOC
иIS_CONTIGUOUS
. - Реализован синтаксис доступа к составным частям комплексных чисел:
c%re
иc%im
. - Реализован синтаксис
str%len
иa%kind
. - Реализованы дескрипторы C и заголовок
ISO_Fortran_binding.h
. - Ослаблены требования на результат функций
MAX
иMIN
, когда один из аргументов являетсяNaN
. - Добавлена опция -fdec-include.
- Добавлена директива BUILTIN.
libgccjit
- Добавлена функция gcc_jit_context_add_driver_option.
Другое
Множество архитектурно- и ОС-специфичных изменений.
>>> Серия релизов девятой ветки GCC
>>> Подробности