LINUX.ORG.RU

GCC 16

 , , ,

GCC 16

0

4

После года разработки опубликован выпуск свободного набора компиляторов GCC 16.1, первый значительный выпуск в новой ветке GCC 16.x. В соответствии со схемой нумерации выпусков, версия 16.0 использовалась в процессе разработки, а незадолго до выхода GCC 16.1 уже ответвилась ветка GCC 17.0, на базе которой будет сформирован следующий значительный релиз GCC 17.1.

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

  • Режим по умолчанию для языка C++ переключён на использование стандарта C++20 (диалект GNU C++20, -std=gnu++20) вместо ранее предлагавшегося C++17. Реализация C++20 в стандартной библиотеке объявлена стабильной.
  • В состав включён экспериментальный фронтэнд ga68 для компиляции программ на языке программирования Алгол 68 (Algol 68).
  • Добавлена возможность вывода диагностической информации в формате HTML. Расширена информация о ходе выполнения программы, включаемая при выводе диагностики в формате SARIF, основанном на JSON (поддержка -fdiagnostics-format=json прекращена).
  • Расширены оптимизации на этапе связывания (LTO, Link-Time Optimization). Добавлена опция -flto-toplevel-asm-heuristics, включающая эвристику для улучшения оптимизации кода с ассемблерными вставками. Техника спекулятивной девиртуализации (-fdevirtualize-speculatively) теперь не ограничена преобразованием виртуальных методов и может применяться при преобразовании в прямые вызовы любых косвенных вызовов функций, например, вызовов через указатели.
  • Реализована поддержка векторизации циклов, для которых на этапе компиляции неизвестно число итераций. Повышена эффективность обработки досрочных выходов из цикла (например, через break).
  • Добавлена экспериментальная поддержка многих возможностей недавно утверждённого стандарта C++26. Например, реализованы:
    • Рефлексия (Reflection, -freflection), позволяющая отслеживать и модифицировать элементы программы на стадии компиляции. Добавлены новые операторы «^^ (open-std.org)» для получения метаинформации о грамматической конструкции и «[:…:]» для выполнения обратного преобразования. Для преобразования и обработки полученной в ходе инспектирования информации предложена библиотека std::meta и доступны такие возможности, как вычисления с константами.
    • Контрактное программирование (Contracts), позволяющее определять формальные спецификации интерфейсов при помощи трёх новых операторов: pre (предусловие), post (постусловие) и contract_assert (проверка утверждения). Оператор pre определяет предварительные условия, которые должны быть выполнены перед вызовом (проверка входных данных); post – условия, которые должны соблюдаться после выполнения (требования к выходным данным); contract_assert – условия возникновения исключений. Возможность появится в GCC 16.
    • Оператор «template for» для перебора элементов, таких как пакеты параметров, похожие на кортежи объекты и результаты рефлексии (метаобъекты), на этапе компиляции в стиле обычного цикла. При выполнении template for тело цикла раскрывается для каждого элемента и каждая итерация обрабатывается в отдельной области видимости, в которой элемент последовательности, по которой итерируется цикл, является константой для каждой итерации и может участвовать в константных выражениях (constexpr). В контексте рефлексии template for может применяться для обхода свойств классов или перечислений.
    • Улучшена поддержка модуля std::simd для распараллеливания выполнения операций над данными при помощи наборов инструкций SIMD, таких как AVX-512 и NEON, с использованием стандартной системы типов C++.
    • Улучшена поддержка std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic и std::owner_equal.
  • Реализованы возможности, связанные со стандартом C++23, такие как явное управление временем жизни объектов и поддержка указания кодировки символов диагностических сообщений.
  • Расширена поддержка стандарта C23 (opennet.ru), например, реализована возможность использования атрибута counted_by для проверки корректности использования указателей.
  • Продолжена реализация стандартов OpenMP 5.0, 5.1, 5.2 и 6.0 (Open Multi-Processing), определяющих API и способы применения методов параллельного программирования на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD). Улучшена реализация спецификаций параллельного программирования OpenACC 3.0, 3.3 и 3.4, определяющих средства для выноса операций (offloading) на GPU и специализированные процессоры, такие как NVIDIA PTX.
  • В бэкенд для архитектуры x86 добавлена поддержка процессоров AMD на основе микроархитектуры Zen6 (-march=znver6), а также процессоров Intel Wildcat Lake (-march=wildcatlake) и Nova Lake (-march=novalake).
  • В бэкенде генерации кода для GPU AMD Radeon (GCN) реализована поддержка ускорителей AMD Instinct MI300 (gfx942).
  • Для архитектур RISC-V, ARM, S/390 и LoongArch реализована поддержка типа _BitInt (N) для определения целых чисел с указанным числом битов.

>>> Источник: OpenNET

★★★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 4)

Добавлена экспериментальная поддержка многих возможностей недавно утверждённого стандарта C++26. Например, реализованы: Рефлексия (Reflection, «-freflection»)

GCC 16 с C++26-рефлексией. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от splinter

Я старый, но быстрый! :)

dataman ★★★★★
() автор топика

В состав включён экспериментальный фронтэнд ga68 для компиляции программ на языке программирования Алгол 68 (Algol 68)

Когда ждать PL/I?

LongLiveUbuntu ★★★★★
()

Реализация C++20 в стандартной библиотеке объявлена стабильной.

Долго же его на COVID проверяли.

apt_install_lrzsz ★★★★
()

почему в новости нет картинки – крысинного маскота С++ // а новость не про С++, казалось бы вышел новый ГЦЦ, но в основном там С++

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от Bad_ptr

почему в новости нет картинки

Теперь есть. :)

dataman ★★★★★
() автор топика

Вот Алгол68 — это своевременно, нппример.

gns ★★★★★
()

Рефлексия (Reflection, «-freflection»)

Кстати, этого пока нет даже в текущем официальном clang 23.

dataman ★★★★★
() автор топика

Библиотеки std::inplace_vector, std::optional<T&>, std::copyable_function, std::function_ref, std::indirect, std::polymorphic и std::owner_equal.

Кривой перевод, в оригинале говорится об улучшенной поддержке стандартной библиотекой перечисленных шаблонов из стандарта C++26.

m0rph ★★★★★
()
Ответ на: комментарий от ant1

fpc ехидно хихикает в сторонке! :о)

sunjob ★★★★★
()
Ответ на: комментарий от ant1

Что там с модулями? Долго еще ждать?

С разморозкой!
Вот сейчас собрал FTXUI с опцией -DFTXUI_BUILD_MODULES=ON, всё работает даже с GCC 15.

dataman ★★★★★
() автор топика

Это важно, или они уже перешли к гонке версий ради новых версий?

kirill_rrr ★★★★★
()

Гигантский логотип GCC на «col-xl-12» это прикол такой?

dynamic_cast
()
Последнее исправление: dynamic_cast (всего исправлений: 1)
Ответ на: комментарий от m0rph

Кривой перевод, в оригинале говорится об улучшенной поддержке

Спасибо, исправил.

dataman ★★★★★
() автор топика
Ответ на: комментарий от scanner

Нет разницы, но для разработки bloatware типа буста и тем более qt лучше не использовать

Reset ★★★★★
()

Удивительное сочетание новостей.

Тут у нас релиз компилятора C++26, где есть std::hive.

Тут у нас новость про boost::container::hub, который в полтора раза быстрее std::hive. Вот те люди в комитете. У них всего одна задача. И каждый раз эпично не справляются.

sarumeister
()
Ответ на: комментарий от sarumeister

Вот те люди в комитете. У них всего одна задача.

Совсем не та, что ты (и множество других) думаешь.

r--r--r--
()
Ответ на: комментарий от scanner

Кобола не хватает.

Хватает. В gentoo есть use-flag соответсвующий. Можно себе собрать gcc с поддержкой кобола.

Более того, можно собрать gcc одновременно с поддержкой кобола и (начальной) поддержкой rust.

Artsi0m
()
Ответ на: комментарий от LongLiveUbuntu

Когда ждать PL/I?

Ждите! Наберитесь терпения! Ну, или «вискаря». ;P ;))

В общем, наберитесь там уже того, чего вы обычно набираетесь, и ждите!.. Ща, вот только на Rust всё перепишут - и сразу же вам завезут!.. :))

Somebody ★★★★
()
Ответ на: комментарий от sarumeister

Тут у нас новость про boost::container::hub, который в полтора раза быстрее std::hive. Вот те люди в комитете.

Вроде как стандарт определяет только интерфейс контейнера, но не описывает детали реализации. А boost::container::hub, вроде как, поддерживает интерфейс std::hive (+ добавляет несколько своих специфических методов). Так что, потенциально, ничего не мешает в очередной версии stdlib от GCC, LLVM или MS запилить std::hive на базе того же подхода, что и boost::container::hub.

Автор boost::container::hub пишет, что реализаций std::hive пока нет, есть только вариант plf::hive, с которой и сравнивается производительность boost::container::hub.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

А boost::container::hub, вроде как, поддерживает интерфейс std::hive (+ добавляет несколько своих специфических методов).

Нет, это не так.

boost::container::hub does not conform to the specification of std::hive in a few aspects:

Minimum and maximum block size limits can't be specified and are fixed to 64. reshape is not provided as it doesn't make sense when block capacity is fixed.

и далее еще по мелочи.

sarumeister
()
Ответ на: комментарий от sarumeister

Тут у нас релиз компилятора C++26, где есть std::hive.

Тут у нас новость про boost::container::hub, который в полтора раза быстрее std::hive. Вот те люди в комитете. У них всего одна задача. И каждый раз эпично не справляются.

Эмм. Так вроде комитет это про стандарт, а не про реализацию.

soomrack ★★★★★
()
Ответ на: комментарий от soomrack

Эмм. Так вроде комитет это про стандарт, а не про реализацию.

Вычеркните мои слова про комитет. Там сидят не худшие люди. Они конечно на два хода перед не смотрят, но на разных форумах многие люди вообще читать не умеют. У std::hive реализация протекла через reshape, и еще по мелочи.

sarumeister
()
Ответ на: комментарий от scanner

У фортрана последний стандарт 23 года, он-то тут причем? Активно используется при расчетах. COBOL входит в состав gcc-15.

pandrey ★★
()
Ответ на: комментарий от sarumeister

std::hive реализация протекла через reshape,

А через hive_limits она у тебя не протекла?

r--r--r--
()
Ответ на: комментарий от sarumeister

Кстати, похожая история вышла с fmt. В стороне от стандарта получилось значительно лучше, чем внутри стандарта.

Вот что никто нетворкинг в стандарт не протащил — это хорошо. То есть плохо. Смотря как смотреть.

sarumeister
()
Ответ на: комментарий от scanner

Фортран есть, Алгол есть… Кобола не хватает.

а бэйсик там был?? =))

Atlant ★★★★★
()
Ответ на: комментарий от scanner

Что эффективнее для разработки на C++ (с Boost и Qt): Clang или сабж?

Для development stage - Clang , для product stage - GCC

Atlant ★★★★★
()
Ответ на: комментарий от scanner

у clang хорошая поддержка именно для разработки, в частности есть сервер LSP. А в gcc оптимально уже собирать релиз, поскольку лучше оптимизация.

Atlant ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.