Релиз набора компиляторов GCC 4.7. Проекту GCC исполнилось 25 лет
Опубликовано 22 Март 2012 16:47:00
Сегодня Фонд свободного ПО, проект GNU и всё сообщество разработчиков свободного ПО празднует двадцатипятилетие с момента основания свободного набора компиляторов GCC. Подарком к столь знаменательной дате стал релиз GCC 4.7, на разработку которого был потрачен примерно год. В новой версии реализованы новые методы оптимизации, прекращена поддержка устаревших систем, расширена поддержка стандартов C++11 и C11, реализована поддержка транзакционных блоков для C/C++, улучшена поддержка языка Google Go, обеспечена поддержка процессоров ARM Cortex-A7, Intel Ivy Bridge, Intel Haswell и AMD Fusion Piledriver.
Источник: http://www.opennet.ru/opennews/art.shtml?num=33424
Основные изменения:
-
Улучшения в оптимизации кода:
- Улучшение фреймворка для оптимизации во время динамического связывания (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;
Источник: http://www.opennet.ru/opennews/art.shtml?num=33424
|
0 | Tweet | Нравится |
|