После года разработки состоялся (https://gcc.gnu.org/ml/gcc-announce/2016/msg00000.html) релиз свободного набора компиляторов GCC 6.1 (https://gcc.gnu.org/gcc-6/), первый значительный выпуск в новой ветке GCC 6.x. В соответствии с новой схемой (https://gcc.gnu.org/develop.html#num_scheme) нумерации выпусков, версия 6.0 использовалась в процессе разработки, а незадолго до выхода GCC 6.1 уже ответвилась ветка GCC 7.0, на базе которой будет сформирован следующий значительный релиз GCC 7.1.GCC 6.1 примечателен применением в компиляторе C++ по умолчанию стандарта C++14 вместо ранее предлагаемого C++98, улучшением экспериментальной поддержки C++17, расширением средств диагностики, полной поддержкой OpenMP 4.5, новыми оптимизациями, поддержка системной библиотеки musl, улучшением поддержки платформ ARM, поддержкой процессоров AMD Zen (17 поколение CPU AMD), Intel Skylake, IBM z13 и IBM POWER 9.
Основные изменения (https://gcc.gnu.org/gcc-6/changes.html):
- Для языка C++ по умолчанию активировано использование стандарта C++17 (применяется режим "-std=gnu++14" вместо "-std=gnu++98"). Добавлена поддержка расширения системы шаблонов C++ Concepts (https://en.wikipedia.org/wiki/Concepts_%28C%2B... активируемая опцией "-fconcepts". Реализованы некоторые новые элементы будущего стандарта C++17, такие как выражения fold, символьные литералы u8, расширенный static_assert и вложенное определение пространств имён. Реализована возможность вычисления констант для всех бестиповых аргументов шаблонов. Добавлена поддержка транзакционной памяти (C++ Transactional Memory) при сборке с опцией "-fgnu-tm";
- В runtime-библиотеке libstdc++ расширен набор специальных математических функций (ISO/IEC 29124:2010), добавлена экспериментальная поддержка стандарта C++17 (в том числе новые функции std::size, std::empty, std::data для контейнеров и массивов,
std::uncaught_exceptions, std::invoke, std::shared_mutex, std::void_t и std::bool_constant), экспериментальная поддержка File System TS, экспериментальная поддержка второй версии Library Fundamentals TS, поддержка std::locale для DragonFly и FreeBSD;
- Добавлена поддержка Си-библиотеки musl (https://www.opennet.ru/opennews/art.shtml?num=39365), которую можно использовать на Linux-системах с архитектурой AArch64, ARM, MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 и x86_64. Поддержка включается опцией "-mmusl";
- Многочисленные улучшения оптимизатора: Добавлены новые внутрипроцедурные оптимизации и оптимизаций во время динамического связывания, улучшена работа детектора неопределенного поведения (Undefined Behavior Sanitizer);
- Значительно расширена поддержка спецификации OpenACC 2.0a (http://www.openacc.org/), определяющей средства для выноса (https://gcc.gnu.org/wiki/Offloading) операций на плечи GPU.
Добавлена начальная поддержка параллельного выполнения ядер OpenACC. Для выноса вычислений могут быть задействованы GNU NVIDIA PTX на Linux-системах с процессорами x86_64 и PowerPC. Поддерживается распараллеливание с запуском до 32 обработчиков и 32 векторов.
- В компиляторах C и C++ полностью реализована спецификация OpenMP 4.0 (Open Multi-Processing), позволяющая ускорить вычисления за счёт выноса операций (offloading (https://gcc.gnu.org/wiki/Offloading)) на специализированные процессоры Intel XeonPhi Knights Landing и AMD HSAIL.
- Начальная поддержка гетерогенных вычислительных систем на базе архитектуры HSA (https://www.opennet.ru/opennews/art.shtml?num=42087). Реализована возможность генерации промежуточного языка HSAIL (Heterogeneous System Architecture Intermediate Language) для простых устройств OpenMP при сборке с опцией "--enable-offload-targets=hsa". Добавлен плагин libgomp, позволяющий запустить ядра HSA GPU на GPU, совместимых с HSA.
- Расширены средства сборки генератора кода в форме разделяемой библиотеки libgccjit для встраивания в другие процессы и использования для организации JIT-компиляции байткода в машинный код;
- Объявлена устаревшей поддержка старых архитектур ARM, предшествующих ARMv4t: arm2, arm250, arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7d, arm7di, arm70, arm700, arm700i, arm710, arm720, arm710c, arm7100, arm7500, arm7500fe, arm7m, arm7dm, arm7dmi, arm8, arm810, strongarm, strongarm110, strongarm1100, strongarm1110, fa526, fa626. В будущем поддержка данных систем будет прекращена.
- Добавлена поддержка новых процессоров ARM: ARM Cortex-A32 (cortex-a32), ARM Cortex-A35 (cortex-a35);
- Улучшения для процессоров IA-32/x86-64: Добавлена поддержка процессоров AMD Zen (-march=znver1 и -mtune=znver1) и Intel Skylake с расширениями AVX-512 (-march=skylake-avx512) AVX-512F, AVX512VL, AVX-512CD, AVX-512BW и AVX-512DQ. Добавлена поддержка инструкций monitorx и mwaitx, используемых в CPU AMD. Добавлена поддержка адресных пространств __seg_fs, __seg_gs и __seg_tls;
- Начальная поддержка процессоров POWER9, использующих набор инструкций OpenPOWER ISA 3.0. Для систем PowerPC64 обеспечена поддержка 128-разрядных чисел с плавающей запятой (IEEE 128-bit floating-point) с использованием типа __float128 ("-mfloat128");
- Добавлена поддержка процессоров IBM z13 (-march=z13), используемых в новых платформах IBM z Systems;
- Расширены возможности порта AArch64 и добавлены специфичные для данной архитектуры опции. На системах GNU/Linux AArch64 реализована поддержка опций "-march=native" и "-mcpu=native", при которых GCC сам определяет тип CPU и выбирает набор оптимальных настроек. Реализована поддержка опций "-mtls-size=" и "-fno-plt". Добавлена поддержка архитектуры ARMv8.1-A ("-march=armv8.1-a"), процессора ARM Cortex-A35 ("-mcpu=cortex-a35", "-mtune=cortex-a35") и расширений для крупных систем (Large System Extensions). Улучшена генерация кода для процессоров ARM Cortex-A53 и Samsung Exynos M1.
- В разряд устаревших переведены (https://gcc.gnu.org/ml/gcc/2015-08/msg00101.html) платформы SH5 / SH64 (sh64-*-*) и MeP (mep-elf).
URL: https://gcc.gnu.org/ml/gcc-announce/2016/msg00000.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=44326