Минимальный компилятор ядра Linux повышен до GCC 5.1, что позволяет использовать C11

    0
    79


    Создатель и разработчик Linux Линус Торвальдс внес позднее изменение в готовящийся к выпуску код ядра 5.15, повышающее минимальный размер компилятора с GCC 4.9 до 5.1, что может в будущем позволить использовать обновленную версию языка программирования C, C11.

    Раньше минимальная версия GCC (GNU Compiler Collection) была 4.9, для которой первый выпуск появился в 2014 году. Изменение до 5.1 было предложено Ником Десолнерсом из Google, который работает над компиляцией ядра с помощью Clang, чтобы упростить код, необходимый для работы. вокруг ошибок, вызванных отсутствием функций компилятора.

    «Повышение минимального количества поддерживаемых версий позволяет нам удалить все резервные помощники для! COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW, вместо отправки встроенных команд компилятора», – пояснил он.

    Ядро уже указывает как минимум GCC 5.1 для сборок arm64. GCC 5.1 был впервые выпущен в апреле 2015 года.

    Торвальдс объединил изменение не только из-за проблемы Десолье, но и по причинам, связанным с очисткой, необходимой для обработки предупреждений как ошибок (-Werror), спорного изменения, которое было изменено для применения только к тестовым сборкам, но остается важным. .

    “Поддержка Gcc-4.9 в течение некоторого времени была раздражающей, и с -Werror у меня был выбор: применить довольно большой патч от Киса Кука, чтобы удалить изрядное количество предупреждений инициализатора (некоторые все еще остаются), или эту серию патчей от Ника это просто устраняет источник проблемы », – сказал Торвальдс.

    «Похоже, что на самом деле никто не строит на 4.9 – в настоящее время в x86_64 allmodconfig имеется около 200 ошибок (в том числе предупреждений)», – сказал Кук, инженер по безопасности ядра в Google.

    Некоторые отметили, что они все еще используют GCC 4.9, но в этом случае решением будет придерживаться более старой версии ядра.

    «Согласно distrowatch, это потеряет поддержку версии дистрибутива gcc Debian 8 (Jessie), Ubuntu 15.04 и более старых версий Android AOSP (новые версии используют clang для сборки ядер, старые версии также нуждаются в более старых ядрах). Я думаю, что это приемлемо “, – сказал разработчик ядра Арнд Бергманн.

    Бергманн также заметил, что «после этого, я думаю, мы также можем изменить –std = gnu89 на –std = gnu11 в качестве дополнительного преимущества». Торвальдс также отметил это, сказав: «Мы, вероятно, можем изменить наше использование ‘–std = gnu89’ на ‘–std = gnu11’ и, наконец, начать использовать объявления локальных циклов и т. Д. Но в этой серии статей этого еще не сделано».

    Эти директивы определяют используемый стандарт C. std = gnu89 означает ISO C90 с расширениями GNU, которые включают некоторые функции C99. Это изменение позволит использовать C11 с расширениями GNU. C11 была ратифицирована десять лет назад, как следует из ее названия.

    В C89 все объявления переменных должны быть в начале блока кода, тогда как в C99 on переменные могут быть объявлены в любом месте блока. Торвальдс сказал в 2005 году: «Это проблема стиля кодирования. Мы размещаем объявления переменных там, где люди могут их _ находить, а не в случайных местах кода. Помещение переменных в середину кода улучшает читаемость только тогда, когда у вас беспорядочный код. функция, которая _может_ того стоить, – это счетчик циклов: синтаксис for (int i = 10; i; i–) действительно имеет смысл и является реальной функцией (он делает ‘i’ локальным для цикла и может фактически помогите людям избежать ошибок – вы не можете использовать «i» по ошибке после цикла) ».

    При всем волнении по поводу возможного будущего использования Rust в кодировании ядра последнее изменение является напоминанием о том, что ядро ​​не только написано на C, но и использует старую версию языка. Последней версией C и по умолчанию в GCC, если не используется директива, является ISO / IEC 9899: 2018, также известный как C17 или C18, но он только исправляет дефекты в C11 и не вводит новые языковые функции. ®

    Предыдущая статьяИстории с края Галактики – Последний звонок составляет единое целое –
    Следующая статьяЧеловечество: как увеличить городскую границу
    Виктор Попанов
    Эксперт тестовой лаборатории. Первый джойстик держал в руках в возрасте 3 лет. Первый компьютер, на котором „работал” был с процессором Intel i386DX-266. Тестирует оборудование для издания ITBusiness. Будь то анализ новейших гаджетов или устранение сложных неполадок, этот автор всегда готов к выполнению поставленной задачи. Его страсть к технологиям и приверженность качеству делают его бесценным помощником в любой команде.