מעלדונג פון די GCC 13 קאַמפּיילער סוויט

נאָך אַ יאָר פון אַנטוויקלונג, די פריי GCC 13.1 קאַמפּיילער סוויט איז באפרייט, דער ערשטער באַטייַטיק מעלדונג אין די נייַע GCC 13.x צווייַג. אין לויט מיט די נייַע מעלדונג נאַמבערינג סכעמע, ווערסיע 13.0 איז געניצט אין דער אַנטוויקלונג פּראָצעס, און באַלד איידער די מעלדונג פון GCC 13.1, די GCC 14.0 צווייַג האט שוין בראַנטשט אַוועק, אויף דער באזע פון ​​וואָס די ווייַטער הויפּט מעלדונג, GCC 14.1, וואָלט ווערן געשאפן.

הויפּט ענדערונגען:

  • В состав GCC принят фронтэнд для сборки программ на языке программирования Modula-2. Поддерживается сборка кода, соответствующего диалектам PIM2, PIM3 и PIM4, а также принятому ISO-стандарту для данного языка.
  • В дерево исходных текстов GCC добавлен фронтэнд c реализацией компилятора языка Rust, подготовленного проектом gccrs (GCC Rust). В текущем виде форнтэнд отмечен как экспериментальный и отключён по умолчанию. После доведения фронтэнда до готовности (ожидается в следующем выпуске), штатный инструментарий GCC сможет использоваться для компиляции программ на языке Rust без необходимости установки компилятора rustc, построенного с использованием наработок LLVM.
  • В механизм оптимизации на этапе связывания (LTO) добавлена поддержка cервера управления работами (jobserver), поддерживаемого проектом GNU make для оптимизации выполнения параллельной сборки в несколько потоков. В GCC jobserver применяется для распараллеливания работ при LTO-оптимизации в контексте всей программы (WPA, Whole-program Analysis). Для взаимодействия с jobserver по умолчанию применяются именованные каналы (—jobserver-style=fifo).
  • В статическом анализаторе (-fanalyzer) предложено 20 новых диагностических проверок, среди которых «-Wanalyzer-out-of-bounds», «-Wanalyzer-allocation-size», «-Wanalyzer-deref-before-check», «-Wanalyzer-infinite-recursion» -Wanalyzer-jump-through-null», «-Wanalyzer-va-list-leak».
  • Реализована возможность вывода диагностики в формате SARIF, основанном на JSON. Новый формат можно использовать для получения результатов статического анализа (GCC -fanalyzer), а также для получения сведений о предупреждениях и ошибках. Включение производится опцией «-fdiagnostics-format=sarif-stderr|sarif-file|json-stderr|json|json-file», где опции с «json» приводят к выводу в специфичном для GCC варианте формата JSON.
  • Реализованы некоторые возможности, определённые в Си-стандарте C23, такие как константа nullptr для определения нулевых указателей, упрощение использования списков с переменным числом аргументов (variadic), расширение возможностей перечислений, атрибут noreturn, разрешение использования constexpr и auto при определении объектов, операторы typeof и typeof_unqual, новые ключевые слова alignas, alignof, bool, false, static_assert, thread_local и true, разрешение указания пустых скобок при инициализации.
  • Реализованы некоторые возможности, определённые в стандарте C++23, такие как возможность размещения меток в конце составных выражений, совместимость с типом char8_t, директива препроцессора #warning, разделённые (\u{}, \o{}, \x{}) и именованные (‘\N{LATIN CAPITAL LETTER A}’) escape-последовательности, static operator(), static operator[], оператор равенства внутри выражений, исключение некоторых ограничений по использованию constexpr, поддержка UTF-8 в исходных текстах.
  • В libstdc++ улучшена экспериментальная поддержка стандартов C++20 и C++23, например, добавлена поддержка заголовочного файла <format> и std::format, расширены возможности заголовочного файла <ranges>, добавлены дополнительные типы с плавающей запятой, реализованы заголовочные файлы <experimental/scope> и <experimental/synchronized_value>.
  • Добавлены новые атрибуты функций для документирования того, что в целочисленной переменной передаётся файловый дескриптор: «__attribute__((fd_arg(N)))», «__attribute__((fd_arg_read(N)))» и «__attribute__((fd_arg_write(N)))». Указанные атрибуты могут использоваться в статическом анализаторе (-fanalyzer) для выявления некорректной работы с файловыми дескрипторами.
  • Добавлен новый атрибут «__attribute__((assume(EXPR)))», при помощи которого можно сообщить компилятору, что выражение истинно и компилятор может использовать данный факт это без вычисления выражения.
  • Добавлен флаг «-fstrict-flex-arrays=[level]» для выбора поведения при обработке гибкого элемента-массива в структурах (Flexible Array Members, массив неопределённого размера в конце структуры, например, «int b[]»).
  • Добавлен флаг «-Wenum-int-mismatch» для вывода предупреждений в случае несоответствия между перечисляемым типом и целым типом.
  • Во фронтэнде для языка Fortran полностью реализована поддержка финализации.
  • Во фронтэнде для языка Go добавлена поддержка обобщённых функций и типов (дженериков), обеспечена совместимость с пакетами для языка Go 1.18.
  • В бэкенде для архитектуры AArch64 реализована поддержка CPU Ampere-1A (ampere1a), Arm Cortex-A715 (cortex-a715), Arm Cortex-X1C (cortex-x1c), Arm Cortex-X3 (cortex-x3) и Arm Neoverse V2 (neoverse-v2). В опцию «-march=» добавлена поддержка аргументов «armv9.1-a», «armv9.2-a» и «armv9.3-a». Добавлена поддержка процессорных расширений FEAT_LRCPC, FEAT_CSSC и FEAT_LSE2.
  • В бэкенд для архитектуры ARM добавлена поддержка CPU STAR-MC1 (star-mc1), Arm Cortex-X1C (cortex-x1c) и Arm Cortex-M85 (cortex-m85).
  • В бэкенд для архитектуры x86 добавлена поддержка процессоров Intel Raptor Lake, Meteor Lake, Sierra Forest, Grand Ridge, Emerald Rapids, Granite Rapids, а также процессоров AMD Zen 4 (znver4). Реализованы предложенные в процессорах Intel расширения архитектуры набора команд AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT, CMPccXADD, AMX-FP16, PREFETCHI, RAO-INT и AMX-COMPLEX. Для языков C и C++ на системах с SSE2 предоставлен тип __bf16.
  • В бэкенде генерации кода для GPU AMD Radeon (GCN) реализована возможность использования ускорителей AMD Instinct MI200 для повышения производительности OpenMP/OpenACC. Улучшена векторизация с использованием инструкций SIMD.
  • Значительно расширены возможности бэкенда для платформы LoongArch.
  • В бэкенде для архитектуры RISC-V добавлена поддержка CPU T-Head’s XuanTie C906 (thead-c906). Реализована поддержка векторных обработчиков, определённых в спецификации RISC-V Vector Extension Intrinsic 0.11. Добавлена поддержка 30 расширений спецификаций RISC-V.
  • При формировании разделяемых объектов с указанием опции «-shared» прекращено добавление кода запуска после добавления окружения для вычислений с плавающей запятой, если включены оптимизации «-Ofast», «-ffast-math» или «-funsafe-math-optimizations».
  • Поддержка отладочного формата DWARF реализована почти во всех конфигурациях.
  • Добавлена опция «-gz=zstd» для сжатия отладочной информации с использованием алгоритма Zstandard. Прекращена поддержка устаревшего режима сжатия отладочной информации «-gz=zlib-gnu».
  • Добавлена начальная поддержка OpenMP 5.2 (Open Multi-Processing) и продолжена реализация стандартов OpenMP 5.0 и 5.1, определяющих API и способы применения методов параллельного программирования на многоядерных и гибридных (CPU+GPU/DSP) системах с общей памятью и блоками векторизации (SIMD).
  • Прекращена поддержка устаревшего формата хранения отладочной информации «STABS» (включался опциями -gstabs и -gxcoff), созданного в 1980-е годы и применяемого в отладчике dbx.
  • Объявлена устаревшей поддержка Solaris 11.3 (код для поддержки данной платформы будет удалён в следующем выпуске).

מקור: opennet.ru

לייגן אַ באַמערקונג