LINUX.ORG.RU

GCC 8.1

 , c++2a, , ,


1

7

Спустя намеченный год после выхода предыдущего мажорного выпуска «Коллекции компиляторов ГНУ» [0], увидел свет GCC 8.1. Разработчики обещают свежие возможности и более жесткую оптимизацию.

В частности они отмечают:

  • Экспериментальную поддержку отдельный частей черновика стандарта C++2a в компиляторе, а равно и частей С++2a и окончательно всего C++17 [1] — в стандартной библиотеке.
  • Улучшения в выводе диагностической информации в особенности в части позиций (в том числе в формате «от»-«до») и советов по исправлению ошибок; главнейшим образом это коснулось Си++. Новые предупреждения также не забыты.
  • Повышено качество профилированной оптимизации (PGO); так на x86 функции теперь по-умолчанию делятся на «горячие» и «холодные» участки. При оптимизации во время компоновки теперь задействуется новый способ вывода отладочный сведений в DWARF, что делает оптимизированную программу более удобоотлаживаемой. Добавлены новые и улучшены существующие оптимизации для циклов.
  • Компиляция для архитектуры aarch64 теперь умеет в Scalable Vector Extensions, куда входят в частности вектора с определяемой в процессе исполнения длиной.

Интересующимся более глубоко могут быть полезны полный перечень изменений [2], а также актуальный перечень значительных регрессий [3] в новом выпуске.

[0] https://gnu.org/s/gcc
[1] https://gcc.gnu.org/projects/cxx-status.html#cxx17
[2] https://www.gnu.org/software/gcc/gcc-8/changes.html
[3] https://gcc.gnu.org/bugzilla/buglist.cgi?bug_file_loc_type=allwordssubstr&amp...

>>> info-gnu@gnu.org

★★★★★

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

c11 поддерживается целиком уже?

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

Нормальным русским.

Я слушаю.

Я наблюдаю неуместное выпендрёжничество

Точнее, пожалуйста. Якуб тоже пишет не сухо, если вы не заметили.

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

anonymous union

Есть в c++. Остальное сахар, к тому же поддерживаемый релевантными компиляторами или имеющий альтернативы. Какие у тебя реальные проблемы в использовании с++ вместо с, исключая хипсторские извороты?

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

В стандартах не было, поддерживается расширениями в лучшем случае. Всё сахар, даже сам C++ с его STL, но это не повод им (сахаром) не пользоваться.

У меня никаких проблем, а у кого-то за пределами платформ, где нет сабжа, например, могут быть. И не надо про хипстеров.

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

Всё сахар, даже сам C++ с его STL, но это не повод им (сахаром) не пользоваться.

Ты чистый Си не осилил?

Читаю тред пишут одни Си плюс-плюсники. Ни одного чисто сишного пацана.

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

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

А тебе что, хипстерские подвороты мешают использовать C++98 без сахара в виде STL и внешних библиотек?

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

А тебе что, хипстерские подвороты мешают использовать C++98 без сахара в виде STL и внешних библиотек?

Бери выше. Хипстреские ветра кажется меня затягивают в строну Раста.

Плохо, что двоичный код у них создает LLVM, а не божественный GCC.

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

Какие у тебя реальные проблемы в использовании с++ вместо с, исключая хипсторские извороты?

dlsym()

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

extern «C» - это фигня для хидеров. и никоим образом не исправляет наркоманские имена экспортируемых символов в so-шках, собранных плюсами

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

Оо, теперь С++ будет выглядеть как фортран

Почему не как объектный паскаль? Или не как Модула 2? Или не как Java? Или... да почти в любом языке есть модули, и только в C и C++ их до сих пор нет, и приходится использовать засохшие костыли над препроцессором...

hobbit ★★★★★
()

Народ, плиз хелп! Пример hello.cc + main.cc со страницы https://gcc.gnu.org/wiki/cxx-modules не идёт.

$ g++-8.1.0 -fmodules-ts main.cc hello.cc
g++-8.1.0: error: unrecognized command line option ‘-fmodules-ts’

А без этой опции тоже не компиляет. Как лечить? И где есть побольше рабочих примеров?

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

Я это серьезно. Иногда развлекаюсь написанием небольших полезных утилит для себя и небольшого сообщества.

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

У меня был сонерик пэ990и. Лет так 8 назад. Он и сейчас валяется, но те самые 8 лет не было ни желания, ни повода даже проверить его работоспособность. Что вами движет?

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

Что, в 8.1 запилили-таки? УРА! «Ждём ебилдов»

Да, но пока нет (ц).

Там просто заметки о протопипировании. Что-то работает, что-то нет.

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

«Коллекции у коллекционеров. Это называется набор.» - А наборы у наборщиков в типографии )))

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

Причем здесь препроцессор? Если в проекте несколько файлов .c, вообще без всяких #include, то в процессе сборки они компануются по известным правилам.

Мне именно эта система понятнее, чем модули в паскале или, еще хуже, в фортране. Често говоря, я не знаю, какие фатальные недостатки должно устранить введение модулей.

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

Отличный у тебя проект. Даже hello world #include требует.

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

extern «C» делает как раз это и только это. Заголовки вообще ни при чем.

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

Блин, я прям как чувствовал подвох. Везде обман. Спасибо за инфу. А насколько там вообще всё зрело (черновик стандарта, реализация)? Имеет смысл начинать всерьёз играться, или ещё сто раз всё поменяется?

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

Хипстреские ветра кажется меня затягивают в строну Раста

Отринь хипсторство, уходи на Ada.

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

У меня был сонерик
пэ990и. Лет так 8 назад.
Он и сейчас валяется, но те
самые 8 лет не было ни
желания, ни повода даже
проверить его работоспособность. Что
вами движет?

Nokia 808. Нормально так движет. Использую каждый день уже на протяжении 5 лет.

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

начинать всерьёз играться,

Субьективно — пока не включат в trunk (о б-ги они до сих пор используют svn), что-то серьезное основывать на таком прототипе — не имеет смысла.

Играться — всегда пожалуйста.

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

Чем этот монстр концептуально лучше маленького и быстрого FPC?
FPC

Ничем, если нужен «маленький и быстрый» FPC.

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

ifort имеет ряд существенных недостатков.

как минимум стоит упомянуть его настойчивые попытки повекторизовать все вне зависимости от эффективности векторизации..

про то что на амд он превращается в тыкву я вообще молчу.

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

Что-то работает, что-то нет.

Не работают make и cmake. Пример с его вики-страницы компиляеццо ручками:

#!/bin/bash                                                                                                                                                                                                                                  
../g++ -fmodules-ts main.cc hello.cc -o hello

но падает с загадочными ошибками изнутри его враппера на идентичном Makefile:

hello: main.cc hello.cc                                                                                                                                                                                                                      
    ../g++ -fmodules-ts $? -o $@

А если совсем чуть-чуть подшаманить, то и с ICE. Разбираться в егойном враппере и рисовать свой не хочу - там ещё сто раз всё поменяется.

Не говоря уже про такие изыски как «import std.iostream» - на данном этапе работу над stdlib вообще не имеет смысла ожидать.

В общем, неюзабельно.

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

А кричали, что «нинужна, есть конструкторы».

А я вот всегда был за.

Думаю с ними можно будет мутить что-то вроде:

struct Params {
  std::string name;
  int age = 0;
  bool b = false;
};

void foo(Params p) {
  ...
}

...
int main() {
  foo({.b = true, .name = "alex"});
}

Это и сейчас частично можно: https://wandbox.org/permlink/PIJjBku2iujDZPFj, но...

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

но...

prog.cc:16:10: warning: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Wpedantic]
     foo({.b = 3});
          ^

https://wandbox.org/permlink/DA3f30QXAtLXZpxG

Ну и clang

prog.cc:16:10: warning: designated initializers are a C99 feature [-Wc99-extensions]
    foo({.b = 3});
         ^~~~~~

https://wandbox.org/permlink/AszLzXDtt5QC0T7j

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

Так я про то и написал: легально - нет. Пощупать же - можно.

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

мне недавно попался пример с разносторонний схемой, где icc почему-то не соптимизировал то, что сделал gcc 6.4: внутри цикла было умножение на некоторое константное выражение представляющее деление (2 разных даже). До тех пор пока не вынес их наружу и не сделал отдельными переменными, сборка на icc работала в 2.5 раза медленнее. Сразу после этого время выполнения стало одинаковым. Понятно, что это и так было нужно вынести (до тех пор пока они не станут переменными), но всё же.

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

у меня по опыту глюк был на перемножении массивов векторов.

операция была в 2 цикла do, это гадство не правильно параллелить пыталось( короткий цикл ), в итоге вырубил почти всю оптимизацию после чего производительность стала адекватной.

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

Собирает ваш фпц может и быстро, а вот генерируемый им код это тормозное говно. Да и это ещё не факт, что нормальный компилер с -O0 значительно медленнее.

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