LINUX.ORG.RU

Вышел GCC 4.8.0

 


1

4

Вышла новая версия набора компиляторов GNU — 4.8.0. Среди нововведений:

  • Теперь для сборки GCC требуется компилятор С++.
  • Формат отладочной информации по умолчанию изменён на DWARF4, который поддерживается в GDB 7.5, Valgrind 3.8.0 и elfutils 0.154.
  • Добавлен новый уровень оптимизации -Og, предназначенный для быстрой компиляции и отладки, обеспечивая при этом приемлемую производительность.
  • Убран ряд узких мест в оптимизаторе, что существенно ускорило компиляцию чрезвычайно больших функций.
  • Добавлены AddressSanitizer (быстрый детектор ошибок работы с памятью) и ThreadSanitizer (детектор гонок данных).
  • Улучшены сообщения об ошибках, исходная строка выводится полностью, а колонка с ошибкой отмечается знаком ^. Опция ftrack-macro-expansion=2 теперь включена по умолчанию, что показывает стек раскрытия макросов:
    t.c:1:94: error: invalid operands to binary < (have ‘struct mystruct’ and ‘float’)
     #define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
                                                                                                  ^
    t.c:7:7: note: in expansion of macro 'MYMAX'
       X = MYMAX(P, F);
    
  • Улучшена поддержка стандарта C++11: поддерживается ключевое слово thread_local, синтаксис атрибутов, спецификаторов выравнивания и наследование конструкторов. Также добавлена опция -std=C++1y для поддержки будущего стандарта, пока она добавляет только возможность автоматического определения типа результата в определении функций.
  • Реализована предварительная версия языка Go 1.1.
  • Добавлена поддержка архитектуры AArch64.

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

★★★★★

Проверено: post-factum ()

Ну всё! Сейчас mass-rebuild'ы в готовящейся к выпуску F19 пойдут! Глядишь, к её выходу многое количество софта обзаведётся поддержкой сборки с помощью GCC 4.8. Не без помощи мейнтейнеров Fedora'ы, естественно ;D

carasin ★★★★★ ()

Теперь C++ официально нужен?

fero ★★★★ ()

Ого, судя по списку - это вам не какая-то минорщина!

cdshines ★★★★ ()

действительно хороший релиз, конкуренция с clang явно пошла на пользу

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

Объясните пожалуйста идиоту смысл:

[[noreturn]] void f()
{
  while (true) 
    ;
}

int whatever()
{
  if (bullshit)
    return 1;
  if (reallyBullshit)
    return 2;

  f();
  // return не нужен и это не должно считаться за ошибку
}
Pavval ★★★★★ ()
Ответ на: комментарий от anonymous

Улучшена работа оптимизаций во время динамического связывания (LTO, Link Time Optimization) и межпроцедурных оптимизаций

Интересно, какой % системы соберется с этим чудом на этот раз.

Dude ()

Отличные новости, ждем в репах.

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

А это смотря когда раньше, в 4.7 обеспечили собираемость компилятором С++, а в 4.8 перешли на использование С++. Сейчас GCC написан на C++, а не только собирается компилятором С++.

Begemoth ★★★★★ ()

Хорошая новость.

Dron ★★★★★ ()
  • Реализована предварительная версия языка Go 1.1.

А вот это действительно радует. Хотя я больше за D.

eugeno ★★★★★ ()

Уже в экспериментале, шикарно.

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

К сожалению D мертв, хотя он действительно интересней Go.

Почему же, вполне себе рабочий язык. Вот Go действительно вспыхнул и все о нём уже забыли, в том числе и гугловцы. А про D я в последнее время слышу всё чаще.

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

Особенно радует, что есть биндинги для свежих Qt и GTK+.

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

совсем тут с ньюсрайтерами плохо стало

это там у вас в америках ньюсрайтеры и джисиси, а здесь ЛОР

amorpher ★★★★★ ()

А оно при использовании шаблонов/STL все также выводит многострочные сообщения об ошибках, которые нереально распарсить?

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

во многих простых случаях уже нет, но в целом - все также

wota ★★ ()

Можете объяснить? ThreadSanitizer & AddressSanitizer, судя по описанию, «замедляют работу программы». Это значит, что компиляция замедлится? Или каким-то образом это будут рантайм-проверки, которые замедлят именно компилируемый код?

cdshines ★★★★ ()

исходная строка выводится полностью, а колонка с ошибкой отмечается знаком ^

Наконец-то.

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

это будут рантайм-проверки, которые замедлят именно компилируемый код?

Да.

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

Практика mass-rebuild'ов в Fedora показывает, что с переходом на обновлённую версию GCC не собираются примерно 10% пакетов.

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

по этой логике - lisp, python etc вообще прямо с рождения зомби.

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

кстати, объясните глупому, а в чем разница? Есть какая-то выгода от того, на каком языке реализован компилятор? Имеется в виду, если он, например, хорошо и правильно реализован на двух разных языках?

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

Это для отладки...

... И да. Это для рантайма. При исполнении кода с этими проверками он будет подтормаживать. Время компиляции должно остаться без изменений. Релиз можно подготовить уже без них. Тогда в релизе все будет нормально (без тормозов).

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

рантаймовые проверки, вроде красных зон вокруг выделяемой памяти

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

Порт www/chromium (chromium-25.0.1364.172) не собирается с помощью GCC 4.8.0 (снапшот4.8.0.20130310) если указать опцию сборки «CLANG=off: Build Chromium with Clang instead of GCC 4.6+».

Вывод об ошибке:

...
...
...


./base/bind.h:497:18: warning: typedef 'p6_is_refcounted_type_and_needs_scoped_refptr' locally defined but not used [-Wunused-local-typedefs]
                  p6_is_refcounted_type_and_needs_scoped_refptr);
                  ^
./base/basictypes.h:206:39: note: in definition of macro 'COMPILE_ASSERT'
   typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
                                       ^
./base/bind.h:499:18: warning: typedef 'p7_is_refcounted_type_and_needs_scoped_refptr' locally defined but not used [-Wunused-local-typedefs]
                  p7_is_refcounted_type_and_needs_scoped_refptr);
                  ^
./base/basictypes.h:206:39: note: in definition of macro 'COMPILE_ASSERT'
   typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
                                       ^
gmake: *** [out/Release/obj.target/notifier/jingle/notifier/base/weak_xmpp_client.o] Ошибка 1
gmake: *** [out/Release/obj.target/notifier/jingle/notifier/communicator/connection_settings.o] Ошибка 1
./base/observer_list_threadsafe.h: In constructor 'UnboundMethod<T, Method, Params>::UnboundMethod(Method, const Params&)':
./base/observer_list_threadsafe.h:66:9: warning: typedef 'badunboundmethodparams' locally defined but not used [-Wunused-local-typedefs]
         badunboundmethodparams);
         ^
./base/basictypes.h:206:39: note: in definition of macro 'COMPILE_ASSERT'
   typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
                                       ^
*** [do-build] Error code 1

Stop in /usr/ports/www/chromium.
*** [build] Error code 1

Stop in /usr/ports/www/chromium.

===>>> make failed for www/chromium
===>>> Aborting update

Terminated
Используемый компилятор:
% pkg_info -Ex gcc
gcc-4.8.0.20130310
С помощью системного LLVM/Clang 3.2 прекрасно собирается и работает. Не подскажете, куда копать?

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

C++ обладает фишками, полезными при разработке компиляторов. Но сейчас gcc не использует ни ООП (по крайней мере с плюсовым синтаксисом), ни большинства других особенностей C++.

quiet_readonly ★★★★ ()

Вот еще вопрос, для фортрана эти Address и Thread Sanitizer как-то актуальны? А то из gcc в силу специфики деятельности использую в основном его.

anonymous ()

Теперь для сборки GCC требуется компилятор С++.

и как теперь кросскомплятор собирать? раньше достаточно было собрать сишный компилятор с опцией newlib и уже им собрать gcc, а что теперь?

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