1

После почти года разработки вышел набор компиляторов GCC 4.6.0, в котором добавлена поддержка языка программирования Go, созданного инженерами Google, а также добавлен новый уровень оптимизации "-Ofast", улучшена поддержка генерации кода для процессоров Intel Core 2 и выше.

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

  • Общие нюансы:

    • Добавлена поддержка стандартной библиотеки функций Bionic и возможность прямой сборки библиотек и приложений для платформы Android;

    • Интегрирована поддержка языка программирования Go (фронтэнд "gccgo"), которая не активирована по умолчанию и требует сборки с опцией "--enable-languages";

    • Опции сборки "-b архитектура_для_сборки" и "-v версия_компилятора" были убраны, потому что они не всегда работали корректно. Для этих целей предлагается использовать "machine-gcc" для кросс-компиляции или "архитектура-gcc-версия" для использования отличной от умолчания версии;

    • GCC стал более строг при использовании флагов компиляции, так если ранее можно было использовать флаги "--as-needed" и "--export-dynamic", предназначавшиеся для линковщика, теперь нужно указывать их правильно: "-Wl,--as-needed" и "-Wl,--export-dynamic";

    • Инфраструктура оптимизации C программ (-combine) была убрана в пользу более общей инфраструктуры оптимизации на стадии линковки (LTO);

    • GCC теперь включает математическую библиотеку libquadmath, распространяемую под лицензией LGPL, которая позволяет производить вычисления учетверённой точности с типом данным __float128, который пока доступ только на архитектурах x86, x86-64 и Itanium;

    • Часть портов GCC была объявлена устаревшей и будет исключена из GCC 4.7.0:

      • Argonaut ARC (arc-*)

      • National Semiconductor CRX (crx-*)

      • Motorola 68HC11 и 68HC12 (m68hc11-*-*, m6811-*-*, m68hc12-*-*, m6812-*-*)

      • Sunplus S+core (score-*)

    • Объявлены устаревшими индивидуальные порты некоторых архитектур:

      • Interix (i[34567]86-*-interix3*)

      • Generic ARM PE (arm-*-pe*, за исключением arm*-wince-pe*)

      • MCore PE (mcore-*-pe*)

      • SH SymbianOS (sh*-*-symbianelf*)

      • GNU Hurd на платформах Alpha и PowerPC (alpha*-*-gnu*, powerpc*-*-gnu*)

      • M68K uClinux (старый ABI) (m68k-*-uclinuxoldabi*)

      • a.out NetBSD (arm*-*-netbsd*, i[34567]86-*-netbsd*, vax-*-netbsd*, но не *-*-netbsdelf*)

    • Убрана поддержка архитектур, объявленных устаревшими в GCC 4.5.0;

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

    • Добавлен новый уровень оптимизации "-Ofast", который основан на опциях -O3, но при этом может влиять на соответствие стандартам результирующего кода, например, он включает в себя опцию "-ffast-math";

    • Подсистема оптимизации Scalable Whole Program Optimizer (WHOPR) объявлена стабильной и используется по умолчанию при включении оптимизации уровня финальной компиляции (LTO, link time optimization). Для использования классической версии LTO, нужно использовать опцию "-flto-partition=none";

    • В LTO появилась возможность параллелизации выполнения, используя опцию компиляции "-flto=количество";

    • В LTO исправлено множество ошибок, теперь с её помощью можно собрать сам GCC и Mozilla Firefox;

    • Были улучшены возможности межпроцедурной оптимизации: была добавлена поддержка LTO и улучшены механизмы эвристики;

    • Добавлена опция компиляции "-fstack-usage", которая выводит в отдельный файл информацию об использовании стека каждой функцией;

    • Улучшено потребление памяти компилятором и время компиляции, например, для x86-64 архитектуры при использовании LTO время компиляции уменьшилось на 10%;

    • В библиотеке libstdc++ улучшена производительность при работе в режиме отладки;

  • Изменения в поддержке языков C и C++:

    • Добавлена поддержка нового типа "__int128" для архитектур, которые это позволяют;

    • С помощью флагов препроцессора "#pragma GCC diagnostic" прямо в коде можно указать типы warning'ов, которые будет выводить компилятор на этапе компиляции;

    • Добавлена опция "-fmax-errors=количество", которая заставляет компилятор прекращать работу при достижение заданного количества ошибок;

    • Для языка Си добавлена экспериментальная поддержка некоторых возможностей стандарта C1X:

      • Static assertions (ключевое слово _Static_assert);

      • Переопределение Typedef;

      • Новые макросы из float.h;

      • Анонимные структуры и объединения (union);

    • В компиляторе C++ улучшена поддержка стандарта C++0x;

  • Улучшения в поддержке процессорных архитектур:

    • Добавлена поддержка процессоров Cortex-M4 версии v7-em;

    • Добавлена поддержка LEON-серий процессоров SPARC V8;

    • Добавлена поддержка оптимизации для Intel Core 2 процессоров, используя опции "-march=core2" и "-mtune=core2";

    • Добавлена поддержка оптимизации для Intel Core i3/i5/i7 процессоров, используя опции "-march=corei7" и "-mtune=corei7";

    • Добавлена поддержка оптимизации для Intel Core i3/i5/i7 процессоров, поддерживающих векторные инструкции AVX, используя опции "-march=corei7-avx" и "-mtune=corei7-avx";

    • Добавлена поддержка оптимизации для AMD Bobcat (family 14) процессоров, поддерживающих векторные инструкции AVX, используя опции "-march=btver1" и "-mtune=btver1";

    • Для архитектуры PPC добавлена поддержка Darwin64 ABI;

    • Для x86 и x86-64 Linux приложений добавлена возможность использования не непрерывного стэка, используя опцию "-fsplit-stack". Эта опция полезна при компиляции многопоточных программ и в этом случае не придётся указывать максимальный размер стэка при создании потока;

    • Опция "-fomit-frame-pointer" теперь включена по умолчанию на уровнях оптимизации, кроме "-Os" (оптимизация для размера) для архитектур Linux-x86 и Darwin-x86;

    • x86 Darwin, FreeBSD, Solaris 2, MinGW и Cygwin теперь поддерживают тип данных "__float128";

    • Поддержка AVX-арифметики с плавающей точкой можно указать опцией "--with-fpmath=avx";

Источник — http://opennet.ru/opennews/art.shtml?num=30035
Главная ссылка к новости — http://gcc.gnu.org/gcc-4.6/

2

Ну теперь держись world!
Я тебя make!

Истина ускользает от тех кто отказывается её видеть обоими глазами.
Талантам нужно помогать, бездарности пробьются сами.
В Туле настолько суровые парни, что вместо пены для бритья, используют пену монтажную.
cat /broken/hands > /dev/null

3

мне вот что интересно.
Когда пишут компиляторы.. в них никогда ошибок не бывает.

Их типа легко тестировать?

4

Ну почему же -- бывают. Только ведь ошибка ошибке рознь!

Иная ошибка очень редко выскакивает, при каких-нибудь очень экзотических условиях. И такую фиг выловишь. Просто чтобы выловить ошибку, нужно как минимум о ней знать. А что бы знать о ней, нужно чтобы она себя хотя бы раз проявила. А если она себя не проявляет, значит ее и нет. Беспокоиться не о чем.

Мне сложно привести примеры таких ошибок. Лучше посмотреть рипорты и оценить риски.

Live Free or Die