LINUX.ORG.RU

GCC 9.1

 , ,


0

2

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.
Новые встроенные функции
Новый атрибут
Другое

Многочисленные улучшения кодогенерации связанные с:

  • генерацией 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

>>> Руководства пользователя

>>> Подробности

★★★★★

Проверено: Shaman007 ()

Ответ на: libgccjit от yyk

libgccjit появилась в GCC 5.1 в экспериментальном статусе.

Можно начинать грабить корованы без llvm? ))

Не уверен насколько полное API у libgccjit, но судя по тому, что новые релизы мало что добавляют, должно быть довольно полным. Ну и в этом лагере люди обычно знают о том, что такое обратная совместимость, что является огромным плюсом.

xaizek ★★★★★ ()

В принципе сопоставимы.

gcc-9.1.0.tar.xz ~67 МБ.

llvm-8.0.0.src.tar.xz + cfe-8.0.0.src.tar.xz + lld-8.0.0.src.tar.xz + compiler-rt-8.0.0.src.tar.xz + clang-tools-extra-8.0.0.src.tar.xz + lldb-8.0.0.src.tar.xz+ openmp-8.0.0.src.tar.xz ~61 МБ.

iZEN ★★★★★ ()

Всё вроде кул, я негодовал по поводу вывода ошибок в стиле кланга, но вот смотрю и хз я так и не понял можно вернуть обатно вывод что бы можно было прогонять через grep путно?

Deleted ()
Ответ на: комментарий от Deleted
$ g++ -Wall -Wextra t.cpp -fno-diagnostics-show-caret
t.cpp: In member function ‘boxed_value& boxed_value::operator=(const boxed_value&)’:
t.cpp:21:1: warning: no return statement in function returning non-void [-Wreturn-type]
t.cpp: In function ‘int test(const shape&, const shape&)’:
t.cpp:25:23: error: no match for ‘operator*’ in ‘width(((* & s1), shape())) * height(((* & s1), shape()))’ (operand types are ‘boxed_value’ and ‘boxed_value’)
t.cpp:25:48: error: no match for ‘operator*’ in ‘width(((* & s2), shape())) * height(((* & s2), shape()))’ (operand types are ‘boxed_value’ and ‘boxed_value’)
t.cpp: In function ‘int main()’:
t.cpp:33:15: error: cannot convert ‘bool’ to ‘void*’
t.cpp:28:19: note:   initializing argument 2 of ‘void callee(int, void*, int)’
t.cpp:34:5: error: ‘printf’ was not declared in this scope
t.cpp:34:5: note: ‘printf’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?

И это не стиль шланга, а стиль какого-то старого компилятора Паскаля.

xaizek ★★★★★ ()
Последнее исправление: xaizek (всего исправлений: 2)
Ответ на: комментарий от xaizek

Я имею в виду как на скрине, когда зелёненьким и красненьким идёт сноска вниз, такое я в шланге только видел и это грепать невозможно. Я лично если ошибок много привык просто через ключевое слово их фильтровать по типу, а как теперь хз. Ну в смысле всё будет видно конечно, но всё же

UDP: хотя стоп! Оно же там просто уточняется куда и что, чёт я ступил. Тогда разве что сноски кудут иногда мешать, грепать можно. Панику отменяю

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)

Важно, чтобы они в D новые версии своевременно интегрировали. А то сейчас уже 2.086 доступна, а у них до сих пор 2.076. Конечно, сейчас изменения стали не столь значительными и объём кодовой базы уже достаточно велик, но 10 версий --- это через чур.

Vudod ★★★★★ ()
Ответ на: комментарий от EXL

Включение теперь --- чистая формальность, поскольку gdc уже в 9 Дебиане есть и я им программы ещё в 2015 компилировал, так как получившиеся бинарники оказываются существенно производительнее, чем при использовании референсного компилятора или lldc. Главное, чтобы они новые версии достаточно оперативно интегрировали, с этим у них как раз большие проблемы были всегда. Если включение в состав gcc официально решит эту проблему, то будет здорово!

Vudod ★★★★★ ()
Ответ на: комментарий от Vudod

А то сейчас уже 2.086 доступна

A-a-a!

struct A
{
    this(ref return scope A rhs) {}                        // copy constructor
    this(ref return scope const A rhs, int b = 7) {}       // copy constructor with default parameter
}

Ну блин, четыре ключевых слова подряд перед типом параметра: ref return scope const. Что они там курят?

Давно не заглядывал в D, даже нет предположения о том, что может означать return scope перед обозначением типа аргумента.

eao197 ★★★★★ ()
Ответ на: комментарий от Vudod

Я надеюсь, что это поспособствует увеличению популярности языка программирования D.

Главное, чтобы они новые версии достаточно оперативно интегрировали, с этим у них как раз большие проблемы были всегда.

Да, если вспомнить gcj, то его судьба была печальной.

EXL ★★★★★ ()
Ответ на: комментарий от eao197

Я регулярно на нём пишу, но я тоже не знаю :) Вообще, я считал, что D — это в моей практике второй по очевидности синтаксиса язык после Питона. Но приведённый код опровергает данное утверждение. А откуда вы взяли приведённый пример?

Vudod ★★★★★ ()
Ответ на: комментарий от eao197

что может означать return scope перед обозначением типа аргумента.

Предположение: имеет смысл в области видимости ворзвращаемого значения. ref return scope - ссылка в/из области видимости возвращаемого значения. Вариация на тему контроля lifetime'ов.

anonymous ()
Ответ на: комментарий от Vudod

Вообще, я считал, что D — это в моей практике второй по очевидности синтаксиса язык после Питона. Но приведённый код опровергает данное утверждение.

D был простым и понятным во времена D1. Но после пришествия Александреску D2 понесся в неведомые дали с невероятной скоростью :)

А откуда вы взяли приведённый пример?

Так это же из анонса версии 2.086: https://dlang.org/changelog/2.086.0.html#copy_constructor

eao197 ★★★★★ ()
Ответ на: комментарий от eao197

Я тоже заметил, что Александреску намутил там много чего. Часть по делу, а часть — нет. В частности, слишком много ключевых слов для идентификаторов.

Vudod ★★★★★ ()
Ответ на: комментарий от Vudod

Ну вот и хорошо, что он над D изгаляется. Хороший полигон для C++ных нововведений. За один только if constexpr можно большое спасибо сказать (хотя в плюсах можно было бы и помощнее if constexpr сделать).

eao197 ★★★★★ ()

Хороший повод для изучения D %)

Кстати, gcc9, gcd еще в Arch даже не завезли, поэтому кто хочет попробоватьm, но компилировать лень, может скачать архивы slackware-current, распаковать + смержить их, и запустить командой:

LD_LIBRARY_PATH=lib64/ ./bin/gdc

VarfolomeyKote4ka ()
Ответ на: комментарий от Vudod

Странно, почему не вместо len_trim(str), но может и так.

Страшно представить, что возвращает a%kind, учитывая, что одну точность представления можно описать несколькими способами, для которых этот вызов скорее всего не сработает.

И а чём плюс таких, похоже непереносимым, вызовов? О_о

grem ★★★★★ ()
Ответ на: комментарий от dimgel

Я попробовал мир FreeBSD 12-STABLE пересобрать только что ответвившимся GCC10-devel (это фактически GCC9.1, который ещё не портировали). Естественно, без сборки всего того, что не нужно на десктопе. Столкнулся с многочисленными ошибками компиляции системной libc, в частности, с интегрированным в неё кодом ICONV. Отключил и это в src.conf, повторил - всё равно простыня ошибок вылезла. Раньше, с GCC8 удавалось с минимальными правками собрать работающую базовую систему и почти все установленные пакеты.

iZEN ★★★★★ ()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от dimgel

Я при переезде с 7.4 на 8.2 (и почти сразу на 8.3) пересобирал только libtool и после удаления старых версий делал revdep-rebuild. 9.1 собрал только с целью проверить сборку и тесты поддерживаемых мной пакетов.

grem ★★★★★ ()
Ответ на: комментарий от grem

Строки в Фортране — это вообще большое место. Шаг влево, шаг вправо — расстрел. Именно из-за необходимости интенсивно работать со строками я частенько стал писать код на D. И ещё потому, то для линковки с фортрановскими либами, которые почти все реализованы на 77 диалекте, нужно писать очень много кода внутри, вводя и расставляя все служебные переменные.

Vudod ★★★★★ ()
Ответ на: комментарий от Vudod

Знаю, что больное, но не больнее чем в Си.

Есть библиотека StringiFor, которая реализует python-подобные операции со строками в Фортране. Её разработчик занимается задачами газовой динамики, судя по профилю. Я хотел опакетить библиотеку для gentoo, даже набросок ebuild был, собирающий её, но всё никак не потормошу как следует её разработчика на предмет запуска тестов после сборки на основе make (не все тесты, кажется прописаны). Он в основном использует свою собственную систему сборки для проектов на Фортране, опакечивать которую и тянуть как зависимость у меня пока желания нет.

grem ★★★★★ ()
Ответ на: комментарий от grem

Я 10 лет назад написал свою небольшую библиотеку для работы со строками и чтения двумерных массивов, до сих использую. Но всё это всё равно костыли.

Vudod ★★★★★ ()
Ответ на: комментарий от Vudod

Решил потыкать немного D, после новости. Руки только щас дошли. Почитал пару страниц на сайте, тыкнул первый попавшийся пример https://dlang.org/library/std/stdio/file.readf.html - пример не скомпилялся, закрыл сайт.

anonymous ()