LINUX.ORG.RU

Линус Торвальдс сказал «нет» коду с предупреждениями компиляции

 , , , ,


0

1

Линус Торвальдс изменил параметры компиляции кода ядра Linux по умолчанию. Теперь при сборке используется параметр -Werror, приводящий к интерпретации любого предупреждения как ошибки и, соответственно, к остановке сборки ядра с этой ошибкой. Данное изменение конфигурируется новым параметром WERROR, который включен по умолчанию.

По мнению Линуса, изменение должно повлиять на качество кода и в частности, на качество пулл-реквестов, которые он получает. Для большего эффекта он постучал по дереву (Knock wood) прямо в сообщении к коммиту.

>>> Подробности



Проверено: Shaman007 ()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от anonymous

В смысле почему. Выходит новый GCC там добавились какие то проверки (это постоянно происходит) появляются новые ворнинги. Модуль ядра перестает собираться.

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

Ви так говогите, буд-то жизнь черных не имеет значения.

Для Linux движение BLM не имеет положительного значения. Религия и политика должны быть отделены от IT.

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

Предпочел бы попил ядра, чтобы никто не ушёл обиженным

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

Вы спросили коллегу:

А ты предпочёл бы демократию

Встречный вопрос. А что послужило развитию событий сабжа топика? Демократия или автократия?

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

Из области фантастики. Никто код, отвечающий стандарту ломать warning’ами не будет. А в стандарте С стабильность та ещё.

Другое дело, что мало программистов на С, которые знают стандарт и понимают работу компилятора. Всё-таки порог вхождения в язык сильно ниже, чем у С++, поэтому и стимулов что-то учить нет. Или просто все время уходит на писание макросов и портянок циклов и ветвлений. Не знаю.

Смысл в том, что компилятор «просто так вдруг» не начинает ругаться. Скорее всего попахивало и до этого.

Да и у советов типа «не обновляйте компилятор» / «не используйте оптимизацию выше -O2» ноги оттуда же растут.

Или история «успеха» сборки с flto на Gentoo.

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

А в стандарте С стабильность та ещё.

Как минимум выходят новые стандарты. И еще важно как эти стандарты реализуются в компиляторе.

Но я немного о другом.

Никто код, отвечающий стандарту ломать warning’ами не будет.

Я сомневаюсь что весь код такого гиганского проекта, написан строго по стандарту. Причины я не обсуждаю и не говорю что это хорошо. Более того я сказал, что включить -Werror это хорошее начинание, и это действительно приведет в итоге к улучшению кодовой базы.

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

Ожидаем фазу 3 ака интеграция зондов. Вот-вот линукс сделает всем совсем хорошо.

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

опция «-werror on» будет default & readonly после следующего озарения Линуса

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

Я так смотрю кто-то -Werror уже давно для новостей юзает

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

Если я правильно опнял что там написано, то это баг анализатора. Он же ругается на то, что A::a не инициализированно, хотя это не так?

Прикольно.

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

Все правильно ругается. .a не инициализирован. По стандарту так нельзя менять порядок.

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

Ссылку на стандарт искать не буду, но при инициализации структуры с использованием именованных членов порядок может быть произвольным.

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

Да, именно так. Там на самом деле две проблемы. Первая - ошибка c «неправильным порядком инициализации», что не соответствует стандарту С99\С11. А вторая - ошибочное предупреждение о том, что член не инициализирован.

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

Моя ошибка, действительно в С++20 требуется соблюдать порядок инициализации с порядком объявления. В С99 - это не так, и на это предупредждение я наткнулся именно в сишном коде.

Значит я хотел скинуть именно вот эту ссылку: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82283

Tweaker ★★★★☆
()

звпушить в Linux - это великая честь для Вас!

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

По моему все обоснованно и понятно:

-Werror создает зависимость проекта от конкретной версии компилятора. Хуже того, эта зависимость инструментальной цепочки часто не распознается командой разработчиков и поэтому нигде не отмечается.

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

Кроме того, существует множество предупреждений, которые не должны вызывать сбои сборки, например -Wunknown-pragmas. Я имею обыкновение использовать #pragma markв своих проектах, чтобы обеспечить более приятное взаимодействие с редактором.

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

Когда выпускается новая версия компилятора, добавляются новые предупреждения или обнаруживаются другие области риска. Эти новые предупреждения теперь приведут к сбою вашей ранее работающей сборки

Компилятор нашёл баги в вашей хрени. Какой плохой компилятор, ай яй яй. Будьте благодарны компилятору и фиксити свои баги!

Пока одни радуются предупреждениям и пытаются писать не глючные программы(ака Rust’овики), сишники не хотят фиксить даже те несколько предупреждений которые показывает компилятор. Повторюсь, компилятор С. С, который позволяет почти любую дичь без предупреждений.

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 1)

Мдя…качество кода у профессиональных любителей швободки так себе. Без стучания по дереву и шаманизма никак.)))

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

Ссылку на стандарт искать не буду, но при инициализации структуры с использованием именованных членов порядок может быть произвольным.

«Не читал, но осуждаю мнение имею»?

[dcl.init.list]/3: List-initialization of an object or reference of type T is defined as follows:
— If the braced-init-list contains a designated-initializer-list, T shall be an aggregate class. The ordered identifiers in the designators of the designated-initializer-list shall form a subsequence of the ordered identifiers in the direct non-static data members of T. Aggregate initialization is performed ([dcl.init.aggr]).

[Example 2:

struct A { int x; int y; int z; };
A a{.y = 2, .x = 1};                // error: designator order does not match declaration order
A b{.x = 1, .z = 2};                // OK, b.y initialized to 0

— end example]

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

Вот когда после обновления дистра у тебя «отвалится» вайфай потому что вдруг появилась переменная которая нигде не используется, а ты не сможешь даже вылезти в инет что бы посмотреть что ж происходит, я посмотрю как ты будешьш топить за данное решение.

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

Пока одни радуются предупреждениям и пытаются писать не глючные программы(ака Rust’овики)

Понятно о том, что вы хотели сказать, но формально суждение не верно …

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.