The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз набора компиляторов GCC 4.7. Проекту GCC исполнилось 25 лет

22.03.2012 18:47

Сегодня Фонд свободного ПО, проект GNU и всё сообщество разработчиков свободного ПО празднует двадцатипятилетие с момента основания свободного набора компиляторов GCC. Подарком к столь знаменательной дате стал релиз GCC 4.7, на разработку которого был потрачен примерно год. В новой версии реализованы новые методы оптимизации, прекращена поддержка устаревших систем, расширена поддержка стандартов C++11 и C11, реализована поддержка транзакционных блоков для C/C++, улучшена поддержка языка Google Go, обеспечена поддержка процессоров ARM Cortex-A7, Intel Ivy Bridge, Intel Haswell и AMD Fusion Piledriver.

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

  • Улучшения в оптимизации кода:

    • Улучшение фреймворка для оптимизации во время динамического связывания (LTO - Link Time Optimization) - проведена работа по увеличению масштабируемости, повышению стабильности и сокращению потребления ресурсов. Например, при использовании LTO для Firefox на 64-разрядной системе достаточно 3 Гб ОЗУ, в то время как ранее требовалось 8 Гб.
    • Ускорены операции связывания (linking). Например, связывание компонентов Firefox ускорилось в 10 раз. Сокращён размер объектных файлов и уменьшено дисковое пространство, необходимое для хранения временных данных в процессе связывания;
    • Улучшены эвристические методы inlinе-раскрытия функций, дополнительно учитывающие известные значения параметров функции. Например, для кода
      
         void foo(int a)
         {
           if (a>10)
             ... много кода ...
         }
         void bar (void)
         {
           foo (0);
         }
      
      код функции foo будет развёрнут внутри bar, даже в ситуации включения режима оптимизации по размеру (изначально известно что блок "много кода" при нулевом аргументе никогда не будет вызван).
    • Улучшены внутрипроцедурные оптимизации размещения констант. Например, при компиляции кода
      
         void foo(bool flag)
         {
           if (flag)
             ... do something ...
           else
             ... do something else ...
         }
         void bar (void)
         {
           foo (false);
           foo (true);
           foo (false);
           foo (true);
           foo (false);
           foo (true);
         }
      
      GCC сгенерирует две копии функции foo: одна для флага true, другая для флага false;
    • Добавлены новые оптимизации строковых операций, основанные на отслеживании размера строк и пытающиеся оптимизировать использование функций strlen, strchr, strcpy, strcat и stpcpy. Например, оптимизатор заменит "strcpy (a, b); strcat (a, c); strcat (a, d);" на "strcpy (stpcpy (stpcpy (a, b), c), d);";
  • Изменения в поддержке языков C и C++:

    • В компиляторе C++ обеспечена поддержка большей части стандарта ISO C++11, включая поддержку атомарных операций, модели памяти C++11, нестатических инициализаторов членов классов, определяемых пользователем литералов, псевдонимов-деклараций, вызова конструкторов класса из других конструкторов этого же класса, расширенного синтаксиса декларатора классов friend и т.п. В runtime-библиотеке libstdc++ обеспечена экспериментальная поддержка C++11. Управление поддержкой C++11 осуществляется через опции -std=c++11, -std=gnu++11 и -Wc++11-compat;
    • В компиляторе Си добавлена поддержка дополнительных элементов, определённых в стандарте ISO C11, например, Unicode-строки, выравнивание (_Alignas), не возвращающие значения функции, макросы CMPLX. Управление поддержкой C11 осуществляется через опции -std=c11 и -std=gnu11;
    • Экспериментальная поддержка в компиляторе транзакционной памяти и создание сопутствующей библиотеки libitm. Транзакционная память определяется конструкцией __transaction_atomic { ... } и позволяет обеспечить атомарное выполнение блока кода, все результаты работы которого будут или полностью видны для других нитей или невидны совсем. Поддержка транзакционной памяти пока обеспечена для платформ x86-32, x86-64 и Alpha, для включения поддержки при сборке следует использовать опцию "-fgnu-tm";
  • Улучшения в поддержке процессорных архитектур:

    • Поддержка процессоров ARM Cortex-A7 (опция для включения -mcpu=cortex-a7), Texas Instruments C6X, Tilera TILE-Gx и TILEPro, Adapteva Epiphany, National Semiconductor CR16,
    • Поддержка семейств процессоров Intel Ivy Bridge (-march=core-avx-i), Intel Haswell (-march=core-avx2) и AMD 15h/Piledriver (-march=bdver2). Процессоры Intel Haswell поступят в продажу только в следующем году и будут отличаться поддержкой расширенных инструкций AVX2, FMA, BMI, BMI2 и LZCNT;
    • Поддержка расширенных наборов инструкций процессоров IA-32/x86-64: Intel AVX2 (-mavx2), Intel BMI2 (-mbmi2), Intel FMA3 (-mfma), Intel rdrnd (-mrdrnd), дополнительных векторных преобразований AVX (-mf16c);
    • Поддержка архитектуры семейства микроконтроллеров XMEGA AVR (ATxmegaxxx);
  • Разное:

    • Предварительная поддержка первой версии стандарта языка программирования Go. Довести до конца поддержку всех элементов спецификации планируется в выпуске GCC 4.7.1;
    • Поддержка различных расширений GNU для отладочного формата DWARF, таких как контроль входящих значений и получение информации о вызовах. Поддержка данных расширений ожидается в GDB 7.4;
    • Большая порция улучшений для языка Фортран;
    • Поддержка в компиляторах C, C++ и Fortran спецификации OpenMP 3.1.
  • Нюансы:

    • Объявлены устаревшими и будут удалены в следующих выпусках порты IRIX 6.5 (mips-sgi-irix6.5), MIPS OpenBSD (mips*-*-openbsd*), Solaris 8 (*-*-solaris2.8) и Tru64 UNIX V5.1 (alpha*-dec-osf5.1*).
    • Переведены в разряд устаревших порты ARM, поддерживающие только устаревший акселератор вычислений с плавающей запятой (FPA) и смешанный формат кодирования чисел с плавающей запятой. Большинство портов для устаревших систем ARM будет сохранено, так как они поддерживают альтернативный формат кодирования чисел с плавающей запятой (VFP). Среди подлежащих скорому удалению портов, для которых есть остающиеся в составе альтернативы: arm*-*-rtems (замена arm*-*-rtemseabi), arm*-*-linux-gnu (замена arm*-*-linux-gnueabi), arm*-*-elf (замена arm*-*-eabi), arm*-*-uclinux* (замена arm*-*-uclinux*eabi). Устаревшие порты для которых нет замены на базе VFP: arm*-*-ecos-elf, arm*-*-freebsd, arm*-wince-pe*;
    • Объявлена устаревшей поддержка сопроцессора Maverick для ARM;
    • Удалена поддержка конфигурации для NetWare x86;
    • Убрана поддержка архитектур, объявленных устаревшими в GCC 4.6.0;


  1. Главная ссылка к новости (http://permalink.gmane.org/gma...)
  2. OpenNews: Обсуждение возможных планов развития GCC 5.0
  3. OpenNews: Язык программирования D на пути к включению в состав GCC
  4. OpenNews: Компания Intel представила ветку GCC с реализацией технологии Cilk Plus
  5. OpenNews: Компания PathScale открыла под лицензией GPL высокопроизводительные GCC-совместимые компиляторы EKOPath
  6. OpenNews: Релиз набора компиляторов GCC 4.6.0
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/33424-gcc
Ключевые слова: gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (41) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 19:33, 22/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Где есть тесты разных версий компиляторов за последних 10 лет, насколько скорость выросла?
     
     
  • 2.16, Аноним (-), 01:03, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Где есть тесты разных версий компиляторов за последних 10 лет, насколько скорость выросла?

    Капитан сообщает: www.phoronix.com - не сакажу про 10 лет но бенчи они любят, в том числе недавно были и бои между разными версиями gcc :)

     
     
  • 3.29, arisu (ok), 16:20, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > www.phoronix.com - не сакажу про 10 лет но бенчи они любят

    к сожалению, это невзаимно.

     
     
  • 4.34, Аноним (-), 03:32, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > к сожалению, это невзаимно.

    Это как? Бенчи не любят phoronix? :)

     
     
  • 5.36, arisu (ok), 04:27, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> к сожалению, это невзаимно.
    > Это как? Бенчи не любят phoronix? :)

    типа того. потому получаются какие-то дурацкие.

     

  • 1.2, iZEN (ok), 19:48, 22/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    http://www.freshports.org/lang/gcc48/

    Чего-то я не понял:
    17 Mar 2012 00:16:16
    4.7.0.20120225
    Complete repocopy of lang/gcc47 to lang/gcc48.

    и далее:
    17 Mar 2012 11:22:17
    4.8.0.20120311
    Welcome GCC 4.8!  For the next couple of months this is going to be
    a rougher ride, as this release series -- just branched off GCC 4.7
    -- is going to see a lot of active and often invasive development.
    This port is for early exposure and not production use at all.

    Выходит, что отделилась ветка GCC 4.8, правда, не для продакшена. Ветка GCC 4.7 объявлена неперспективной.

     
     
  • 2.3, Crazy Alex (ok), 19:51, 22/03/2012 [^] [^^] [^^^] [ответить]  
  • +7 +/
    отрелизилась 4.7, пошла разработка 4.8
     
     
  • 3.15, Аноним (-), 01:02, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > отрелизилась 4.7, пошла разработка 4.8

    Очень странно что такие вещи надо объяснять фанату сборки софта из сырцов, правда? ;)

     
     
  • 4.23, Hety (??), 10:34, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Во фряхе порты - это не сборка из сырцов как таковая. Пользователь сам ничего не собирает - мозговых усилий примерно столько же, сколько требуется для установки пакета в убунте. Плюс в том, что можно компоненты легко включить/отключить.
     
     
  • 5.24, Andrey Mitrofanov (?), 10:46, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Для протокола: ты вот прям только щас назвал яЗена безмозглым фанатом? Нееееееет!!
     
  • 5.25, an. (?), 11:59, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> Пользователь сам ничего не собирает - мозговых усилий примерно столько же, сколько требуется для установки пакета в убунте.

    Не совсем так. Если в убунте пакет чаще всего устанавливается (ибо хоть как-то протестирован в единственно доступной собранной конфигурации), то при сборки из сорцов вариантов куда больше (всякие директивы компиляции, различные версии зависимых библиотек, опции компилятора и т.д.), поэтому без проблем оно устанавливается куда реже. Ну а в этих случаях "мозговые усилия" еще как нужны... Хотя, да, гибкость выше.

     
     
  • 6.33, Hety (??), 01:40, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Я ж все же про порты. Сломанных не так много (redmine, к примеру). Но все остальное у меня собирается постоянно и успешно. Правда году в 2009-м наткнулся на циклическую зависимость - было забавно.
     
  • 2.4, arcade (ok), 19:55, 22/03/2012 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это текущий снеп транка, меняющийся раз в неделю. Для заинтересованных девелоперов.

    Во фре порты по возможности создаются копиями с имеющихся в наличии, вот и gcc4.8 с gcc4.7 слизали, по доступности версию и хеши файлов обновят.

     
     
  • 3.5, iZEN (ok), 20:04, 22/03/2012 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Это текущий снеп транка, меняющийся раз в неделю. Для заинтересованных девелоперов.
    > Во фре порты по возможности создаются копиями с имеющихся в наличии, вот
    > и gcc4.8 с gcc4.7 слизали, по доступности версию и хеши файлов
    > обновят.

    % cd /usr/ports/lang/gcc48/ && make checksum
    Making GCC 4.8.0.20120311 for FreeBSD 9.0  target=x86_64-portbld-freebsd9.0
    ===>  License check disabled, port has not defined LICENSE
    => gcc-4.8-20120311.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
    => Attempting to fetch ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/sources.redhat.com/gcc/snapshots
    gcc-4.8-20120311.tar.bz2                        2% of   75 MB  103 kBps 12m00s^C
    fetch: transfer interrupted

     
  • 2.14, Аноним (-), 01:00, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Выходит, что отделилась ветка GCC 4.8, правда, не для продакшена. Ветка GCC 4.7
    > объявлена неперспективной.

    Ты что, совсем криведко и не понимаешь чем застабилизированная ветка отличается от ветки которая крушится т.к. в ней идет основная разработка? Я почему-то думал что ты не настолько ракообразный.

     
  • 2.21, Andrey Mitrofanov (?), 09:34, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Выходит, что отделилась ветка GCC 4.8, правда, не для продакшена. Ветка GCC
    > 4.7 объявлена неперспективной.

    Да-да, а во вчерашнес снэпе шланга объявили неперспективным тебя. Скоро попатчат!!

     
  • 2.30, arisu (ok), 16:22, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    изя, ты риальне дерево.
     
     
  • 3.40, Аноним (-), 14:51, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > изя, ты риальне дерево.

    Более того, это дерево, хотя и вопит о том как все круто собирать из сорцов и как ему надо что-то там зажать, судя по всему вообще ни в зуб ногой о том как происходят процессы разработки софта. Epic fail :)

     
     
  • 4.42, arisu (ok), 14:52, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    ну так он и жабу-то уже лет 10 учит, а воз всё там, где был…
     

  • 1.6, emg81 (ok), 20:54, 22/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    за последние несколько дней: linux 3.3.0, glibc 2.15, gcc 4.7.0 ... просто праздник какой-то :-D
     
     
  • 2.19, бедный буратино (ok), 05:08, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Праздник компиляции! :)
     
     
  • 3.22, Аноним (-), 09:58, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • –2 +/
    праздник багов! теперь еще 2-3 версии в gcc будут файлы с сборкой разных проектов.
     
     
  • 4.41, Аноним (-), 14:52, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > праздник багов!

    А что, вы уже нарвались на какой-то баг?

     
     
  • 5.44, arisu (ok), 14:54, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> праздник багов!
    > А что, вы уже нарвались на какой-то баг?

    ага. баг с volatile, когда при некоторых условиях gcc падает в кородамп. древний такой. знать не знаю, отчего, и редуцировать до багрепорта не могу: просто чертыхаюсь и вожу volatile туда-сюда по тексту, пока падать не перестанет.

     

  • 1.11, inferrna (?), 22:02, 22/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Самое важное в новости забыли
    Support for the x32 psABI is now available through the -mx32 option.
     
     
  • 2.12, ананим (?), 22:49, 22/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    не плохо.
    теперь подумать как это применить у себя.
     
     
     
     
    Часть нити удалена модератором

  • 5.18, inferrna (?), 04:22, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    https://sites.google.com/site/x32abi/
    там есть гентушный образ. Только ядра нет, кажется, но патч просто наложить. gcc в образе кривой, у меня ничего не собирал, так что лучше сразу поставить свой и немного помудрить с симлинками.
     
     
  • 6.20, ананим (?), 05:39, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    спасибо за ссылку.
    стэйдж в тему, буду посмотреть.
     

  • 1.26, Аноним (-), 14:26, 23/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Улучшены эвристические методы inlinе-раскрытия функций, дополнительно учитывающие известные значения параметров функции. Например, для кода

       void foo(int a)
       {
         if (a>10)
           ... много кода ...
       }
       void bar (void)
       {
         foo (0);
       }

    код функции foo будет развёрнут внутри bar, даже в ситуации включения режима оптимизации по размеру (изначально известно что блок "много кода" при нулевом аргументе никогда не будет вызван).
    объясните имбицилу - для чего это делать и в чем тут плюс...

     
     
  • 2.27, Andrey Mitrofanov (?), 14:40, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > объясните имбицилу - для чего это делать и в чем тут плюс...

    Если foo() больше никто не вызывает, "многа кода" будет оптимизирован до размера 0.

     
  • 2.31, Аноним (-), 17:00, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    Будут созданы две функции к примеру:
    foo_if_a_gt10()
    foo_if_a_eq10()
    foo_if_a_lt10()


    и все вызовы foo() будут заменены вызовами одной из этих функций.

     
     
  • 3.32, Аноним (-), 17:01, 23/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Будут созданы две функции к примеру:

    Три т.е., пардон.
    соответственно это для трех условий.
    в случае одного условия гцц и так раньше все оптимизировал.


     
     
  • 4.39, Andrey Mitrofanov (?), 13:32, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> Будут созданы две функции к примеру:
    > Три т.е., пардон.

    Зачем/откуда из _одного "if (a>10)" -- три варианта??

     

  • 1.28, Аноним (-), 14:50, 23/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    код функции foo БУДЕТ РАЗВЕРНУТ внутри bar, даже в ситуации включения режима оптимизации по размеру
    0 ни как не получается, или я чет ни так понимаю...
     
     
  • 2.46, pavlinux (ok), 20:07, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    void foo(int a)
       {
         if (a>10)
           ... много кода ...
       }
       void bar (void)
       {
         foo (0);
       }

    превратится в

    1.
      void bar(int a)
       {
         if (a>10)
           ;
       }

    2.

      void bar(int a)
       {
         if (a>10)
            asm("nop");
       }

    3.
       void bar(void)
       {
         asm("nop");
         ...
         ...
       }

    4.

       void bar(void)
       {
         ...
         ...
       }
    ---

     

  • 1.37, steinar (?), 13:30, 24/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зря поддержку Solaris 8 удаляют. Он еще много где используется.
     
     
  • 2.38, arisu (ok), 13:31, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Зря поддержку Solaris 8 удаляют. Он еще много где используется.

    так старые версии компиляторов никто не запрещает же.

     
  • 2.43, Аноним (-), 14:53, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    > Зря поддержку Solaris 8 удаляют. Он еще много где используется.

    ... но видимо не разработчиками gcc. Древним системам - древний софт :)

     
     
  • 3.45, arisu (ok), 14:58, 24/03/2012 [^] [^^] [^^^] [ответить]  
  • +/
    >> Зря поддержку Solaris 8 удаляют. Он еще много где используется.
    > ... но видимо не разработчиками gcc. Древним системам - древний софт :)

    дык я так понимаю, что человеку вот нужна восьмая соляра. наверное, нашёлся новый маинтайнер?

     

  • 1.47, pavlinux (ok), 20:35, 24/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Например, оптимизатор заменит "strcpy (a, b); strcat (a, c); strcat (a, d);"
    > на "strcpy (stpcpy (stpcpy (a, b), c), d);";

    Тыц...

     
  • 1.48, pavlinux (ok), 18:55, 25/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Блин, муики... оно не собирается под 64-бита!!!

    ---

    checking for x86_64-pc-linux-gcc... -m32 option to accept ISO C89... unsupported
    checking how to run the C preprocessor... /lib/cpp
    configure: error: in '/usr/src/GCC/gcc-build/x86_64-pc-linux/32/libgcc':
    configure: error: C preprocessor "/lib/cpp" fails sanity check

    ---
    Чёй-то капаю не найду как вырубить 32-х битность.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру