Релиз набора компиляторов GCC 4.6.0

После почти года разработки вышел набор компиляторов 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».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.