LINUX.ORG.RU

GCC 7.1

 , ,


1

7

Состоялся релиз набора компиляторов GCC 7.1.

Основные изменения:

  • Поддерживаются все возможности текущего черновика будущего стандарта C++17.
  • Улучшены сообщения компилятора, в том числе добавлены новые предупреждения -Wduplicated-branches, -Wpointer-compare (включено по умолчанию), -Wswitch-unreachable (включено по умолчанию), Wmemset-elt-size (включено при -Wall), -Wint-in-bool-context (включено при -Wall), -Wregister (включено по умолчанию), -Wduplicate-decl (включено при -Wall).
  • Улучшена оптимизация.
  • Добавлена поддержка архитектуры RISC-V, улучшена поддержка ARM64.
  • Теперь поддерживается ОС Fuchsia OS.
  • Удалена поддержка Java (GCJ).
  • Некоторый код, успешно компилирующийся в прошлых версиях, теперь может потребовать изменений. Читайте руководство для получения подробностей.

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Klymedy (всего исправлений: 8)
Ответ на: комментарий от ckotinko

Я не о ядре Linux, им занимаются его разработчики. Я о твоём коде. Иначе почему тебя волнуют вопросы компилятора, если ты не разработчик?

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

Сначала ты ругаешь новый компилятор, потому что он не собирает ядро. На вопрос «так ты выясни — это баг или фича» — ты говоришь, что не разработчик ядра.

Стало быть, твои ругательства преждевременны без разбора ситуации, ведь, как я уже говорил, это могут быть как баги компилятора, так и более строгие проверки кода. В первом случае нужно фиксить баги компилятора, во втором — код ядра.

Если ты не разбираешься в коде, но хочешь помочь — делай баг-репорты и кидай в баг-трекер ядра или мэйллист разработчиков ядра. Также можешь привлечь внимание разработчиков GCC, они могут дать свою оценку ситуации и, возможно, указать на проблемный код в ядре.

В общем, не будь истеричкой и сначала разберись в ситуации. Ты ведь не школьник, а вроде как разрабатывал Catalyst, но ведешь себя как школьник.

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

В нормальном компиляторе это физически не возможно:

anon@nimous:~# cat test.c
int foo(a)
   int a;
{
        return 0;
}

int main()
{
        foo();
        return 0;
}
anon@nimous:~# gcc test.c
anon@nimous:~# ./a.out
anon@nimous:~# gcc --version
gcc (Debian 6.3.0-14) 6.3.0 20170415
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Да, язык C уровня K&R именно так и работал.

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

Когда-то писали -

The old versions of the assigned operators («=+», etc.) must not
be used. Always surround assigned operators by spaces. «x=*foo»
is interpreted as «x#=#x#*#foo» (even if foo is a pointer) by
some compilers.

(«A C Style Sheet», Martin Minow, Digital Equipment Corp.)

Уже 30 лет, как рекомендуется писать не

int foo(a)
int a;

а

int foo(int a)

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

да и то 5 стабильной сделали недавно...

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

В книге Кернигана и Ритчи по С об этом рассказывают.

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

Регрессии вычистите — обновим, а пока unstable.

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

Не шлангуй. Этот код устарел 30 лет назад, но всё еще рабочий. Ведру меньше 26 лет. В ведре не может быть «устаревшего» кода.

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

Что грандиозного они поменяли бы в разработке?

Время компиляции программ с монструозными библиотеками типа Qt.

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

Что грандиозного они поменяли бы в разработке?

Не то ли, случаем, что можно было б при подключении #include, как сейчас, «разворачивать» его не полностью, а только то, что действительно необходимо из него в данный момент? Не должно ли это хотя бы ускорить линковку и сборку?

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

Поддерживаются все возможности текущего черновика будущего стандарта C++17

черновика

Надеюсь, что только в качестве расширения "-std=gnu", а не в виде "-std=c++17". Мало ли что в черновике ещё изменят, даже если незначительно.

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

The C++ front end has experimental support for all of the current C++17 draft with the -std=c++1z or -std=gnu++1z flags, including if constexpr, class template argument deduction, auto template parameters, and structured bindings.

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

принят формально, но всё ещё черновик

/0. Не принят, а «заморожен», как в debian stable.

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

С увеличением мажора меняется ABI. На опеннете была новость об этом.

oh shit ... specially about c++ abi ...

alwayslate ★★
()

Теперь поддерживается ОС Fuchsia OS.

прочёл фунчоза ОС

midnight
()

https://gcc.gnu.org/gcc-7/changes.html#go

Ї:

Go

  • GCC 7 provides a complete implementation of the Go 1.8.1 user packages.
  • Compared to the Go 1.8.1 toolchain, the garbage collector is more conservative and less concurrent.
  • Escape analysis is available for experimental use via the -fgo-optimize-allocs option. The -fgo-debug-escape prints information useful for debugging escape analysis choices.

Кто-то пользуется? О чем они вообще?

KennyMinigun ★★★★★
()

Добавлена поддержка архитектуры RISC-V

В каком смысле добавлена?

Риск-В вроде как сразу шёл в комплекте с GCC, или не?

Теперь поддерживается ОС Fuchsia OS.

Штоэта?

В целом новость одобряю, ГЦЦ наше все!

shkolnick-kun ★★★★★
()

нунифигасе, я еще к пятому не привык... они теперь как гуглохром версии штампуют?

MyTrooName ★★★★★
()

Оно уже может использовать кирилические переменные и прочее как шланг, или всё ещё патчить нужно?

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

Только не это, шеф!

Всякий желающий получить возможность писать идентификаторы кириллицей должен приготовиться читать на деванагари, иврите и китайском :)

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

новость о том, что gcc7 не собирает ведро была на ЛОРе.

там было описание, что конкретно сломалось.

сломалось очень плохо: по сути у тебя есть inline функция, которая не имеет side-effectов и её вызывают с константой на входе.

что раньше происходило? вызов функции унижался до её результата.

что происходит сейчас? функция написалась кодом и вызывается.

а такая функциональность - это основа компилятора. уметь заменять 2*2 на 4. и она сломана.

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

что раньше происходило? вызов функции унижался до её результата

Весь ваш ГНУ - одно унижение и доминирование! Как хорошо что это убрали.

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

В смысле нормально? Встроенныс это как? Длину строки в коде? Она ограничена стандартом в 132 символа для свободной формы, 72 для фиксированной. Можно снять ограничение ключом компилятора. Или длина строки типа character(:)? А с ней что не так?

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

что значит «проблема в оптимизации»?

2+2=5 это что, «проблема в вычислениях»? это не проблема, это значит что всё сломано.

ckotinko ☆☆☆
()
Ответ на: комментарий от ckotinko

И вообще, для таких случаев придумали static_assert, но ребята хотят оставаться в веке динозавров. Вот пусть и пишут свои костыли.

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

у нас есть функция без циклов и side-effectов. её вызывают с константой на входе. есть такая штука: constant folding. если написано 2+2, то можно сразу сократить это до 4, например. раньше gcc это делал. теперь что-то сломалось.

как ты думаешь, оно только на ведре сломалось, или где-то ещё сломано?

и я не думаю, что в gcc7 просто тупо открутили упрощение констант. оно работает а тут отключилось. как ты думаешь, почему? ну правильно же задавать вопрос - почему программа повела себя так. у неё была какая-то причина повести себя неправильно. это ошибка где-то в коде. или какое-то условие сработало.

и оно ведь не только на ведре сработает. ядро просто попало в эту проблему.

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

GCC включился в гонку версий? Вроде еще несколько лет назад пользовался 4.8.*, а тут как то три мажорные версии проскочили.

Судя по Mingw из состава Qt, они тоже не особо успевают за GCC.

Deleted
()
Ответ на: комментарий от anonymous00

ну есть. ну да, есть.

только оптимизатор в данном конкретном случае должен был константное выражение свернуть. это настолько базовая функциональность, что дальше уж некуда. он же умел раньше.

вот в чем проблема. ведро первым наступило на эту мину.

ckotinko ☆☆☆
()
Ответ на: комментарий от Deleted

5.3 в целом хватает для большинства задач. В msys2 GCC6 и тот же Qt есть.

kachsheev ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.