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

После 13 месяцев разработки увидел свет релиз свободного набора компиляторов GCC 4.9. Новый выпуск примечателен реализацией поддержки OpenMP 4.0 и Cilk Plus, улучшением поддержки стандартов C++11 и C++14, режимом подсветки предупреждений и ошибок при выводе на экран, включением в состав детектора неопределенного поведения программы. Основные изменения:

Реализована поддержка спецификации OpenMP 4.0 (Open Multi-Processing), определяющей API и способы применения методов параллельного программирования для языков Си, Си++ и Фортран (в GCC OpenMP 4.0 пока доступен только для Си и Си++). В OpenMP 4.0 обеспечена поддержка ускорения за счет привлечения мощностей GPU, представлены значительные улучшения в модели выполнения задач, добавлены механизмы обработки ошибок, добавлена поддержка определенных пользователем редукций, обеспечена векторизация циклов с использованием инструкции SIMD, добавлен ряд расширений для поддержки параллельного выполнения на уровне задач; Частично реализована поддержка набора расширений Cilk Plus, предлагающего новую эффективную методику параллельного программирования для языков Си и Си++, позволяющую существенно упростить разработку программ, части которых выполняются параллельно с задействованием разных процессорных ядер и векторных сопроцессоров (Vector Units). Для управления генерацией кода с улучшенной векторизацией предусмотрена pragma simd. Поддерживается два метода увеличения производительности — параллелизм данных и параллельное выполнение подпрограмм. В первом случае, обеспечиваются механизмы прозрачного распараллеливания типовых операций над массивами данных и автоматическое задействование SIMD-инструкций. Для организации параллелизма на уровне подпрограмм в обиход вводится три ключевых слова: _Cilk_spawn — запуск функции в параллельном режиме, _Cilk_sync — ожидание завершения параллельно выполняемой функции, и _Cilk_for — организация работы цикла в параллельном режиме.»_Cilk_for» в GCC пока не поддерживается. Для языков C и C++ добавлен компонент UBSAN (Undefined Behavior Sanitizer) с реализацией детектора неопределенного поведения, выявляющего во время выполнения программы ситуации, когда поведение программы становится неопределенным из-за ошибки программиста. Для включения UBSAN следует использовать опцию »-fsanitize=undefined»; Улучшена работа оптимизаций во время динамического связывания (LTO, Link Time Optimization) и межпроцедурных оптимизаций, в которых устранена серия негативно сказывающихся на масштабируемости узких мест. Улучшена техника оптимизации на основе обратной связи (Feedback directed); Распределитель локальных регистров (Local Register Allocator), ранее доступный только для ia32 и x86–64, теперь адаптирован и включен по умолчанию для целевых архитектур Aarch64, ARM, S/390 и ARC, а также реализован в качестве опции для платформ PowerPC и RX; Существенно расширена поддержка архитектуры ARM, внесены оптимизации для процессоров Cortex-A53 и Cortex-A57; Поддержка новой little-endian платформы powerpc64le-linux для которой предлагается новый PowerPC ELFV2 ABI; В компоненте Address Sanitizer обеспечена поддержка архитектуры ARM в дополнение к ранее поддерживаемым архитектурам x86 и x86_64. Address Sanitizer позволяет выявлять ошибки работы с памятью и факты некорректного обращения к памяти, такие как обращение к областям памяти, после их освобождения («use-after-free»), разрушение кучи, повреждение стека и переполнение буферов; Прекращена поддержка устаревшего runtime-детектора утечек памяти mudflap; Добавлена поддержка некоторых новшеств, развиваемых в рамках будущего стандарта C++14. Внесена серия улучшений, связанная с поддержкой стандартов C11 и C++11, например, в стандартную библиотеку С++ добавлена поддержка компонента «regex»; Улучшена поддержка языка ADA. GNAT переведён на использование по умолчанию стандарта ADA 2012, вместо ADA 2005; В компиляторе для языка Fortran улучшена поддержка спецификации Fortran 2008 и добавлена поддержка Fortran 2003 finalization; Обеспечена поддержка развиваемого компанией Google языка программирования Go 1.2.1; Реализована поддержка чипов Intel Silvermont, процессоров IBM Power8 и процессоров RX100, RX200 и RX600; Для процессоров Intel добавлена поддержка инструкций AVX-512, которая может использоваться для целевых архитектур x86–64 и ia32; Возможность подсветки текста выводимых ошибок и предупреждений (»-fdiagnostics-color=auto»); Объявлена устаревшей поддержка платформы Solaris 9 (*-*-solaris2.9), код для которой будет удалён в выпуске GCC 4.10. Компания Oracle прекратила стандартную поддержку Solaris 9 в 2011 году, расширенная платная поддержка завершится в октябре 2014 года.

© OpenNet