LINUX.ORG.RU
ФорумTalks

Зачем нужно -Werror?

 


0

1

Скажите, программисты, зачем оно? В общем и целом, зачем? Чтобы не собиралось на компиляторе, отличном от компилятора автора? Но кому и зачем это надо?

★★★★

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

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

Если какой-то вася собирает софтину непроверенной версией, то предварительно должен вспомнить дисклеймер авторов, где указано, что AS-IS.

Если прожект заброшен, то ошибки компиляции ещё не самое худшее, что может случиться.

Если проект опенсурсный, то вы всегда в issues или список рассылки можете задать вопрос «Вы чё творите, псы!?».

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

А когда таки меняют, то правят свежепоявившиеся ворнинги.

Но они их не правят. Я компилил последнюю версию.

Если прожект заброшен, то ошибки компиляции ещё не самое худшее, что может случиться.

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

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

Я компилил последнюю версию.

Значит авторы версию компилятора у себя не обновляли. Очевидно же.

Ошибками их сделал вот этот сс@ный ключ.

Ошибками их сделал автор сценария сборки.

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

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

Значит авторы версию компилятора у себя не обновляли. Очевидно же.

А может, просто забухали на Балишечке. Разве до компилятора им там? На самом деле, правильно выше сказали, что не только компиляторов слишком дофига, но и платформ дофига. Разные ньюансы на разных платформах. Это всё малореально отследить. Хотя, теоретически, возможно.

Ошибками их сделал автор сценария сборки.

Но он бы не смог этого сделать, если бы этого ключа не было. Поэтому, я и спрашиваю, нафик этот ключ нужен.

lenin386 ★★★★
() автор топика
Последнее исправление: lenin386 (всего исправлений: 4)

В большинстве случаев предупреждения компилятора обоснованы, этот ключ просто заставляет их все адресовать. Очень легко игнорировать предупреждения в проекте, пока их не накопится большое количество, и среди них закрадётся и уже будет проигнорировано что-то очень очень важное (например ошибочная = вместо ==).

Но вообще я согласен что это флаг только для разработчиков, для тех кто опакечивает или потребляет проект этот флаг зачастую только во вред.

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

Поэтому, я и спрашиваю, нафик этот ключ нужен.

Вы ходите кругами. Ключ нужен, чтобы автор мог останавливать сборку с ненулевым кодом, если компилятор сочтёт что-то не правильным.

Спросите, зачем автору это надо?

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

Скажете, что все эти CI/CD – нинужно и вообще новомодная дичь для отсталых. Ну, проект-то не ваш. Напишите свой, где этого всего нет.

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

, и он хочет, чтобы длинный сборочный пайплайн завершался сразу, если кто-то накодил что-то подозрительное.

Для этого, написать скрипт - стОит огромные миллиарды. Конечно жэ.

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

Разные ньюансы на разных платформах. Это всё малореально отследить.

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

Но он бы не смог этого сделать, если бы этого ключа не было

Да ты что? Смотри:

if ( LANG= gcc -c -o zzz.o zzz.c 2>&1 | grep -F warning ); then
  echo "build failed due to warnings"
  exit 1
fi

Предпочитаешь чтобы все такое делали вместо -Werror?

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

проигнорировано что-то очень очень важное (например ошибочная = вместо ==)

Компилятор не может знать хотел ты написать = или ==. Так что на этот счёт как раз никаких варнингов быть не должно.

Но вообще я согласен что это флаг только для разработчиков, для тех кто опакечивает или потребляет проект этот флаг зачастую только во вред.

Нет, см. предыдущий коммент.

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

И возвращаясь к ранее упомянутому моменту: нафейхоа говнокодить костыль, если есть штатная функция цомпилятора?

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

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

Скажете, что все эти CI/CD – нинужно и вообще новомодная дичь для отсталых. Ну, проект-то не ваш. Напишите свой, где этого всего нет.

CI/CD - это и правда ненужный баззворд. И на очевидную полезность -Werror он никак не влияет.

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

Я привожу это только в качестве возможного примера. Поскольку мы не знаем, что за проект там у ТС, рассуждения о нужности пайплайнов не имеют смысла.

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

Костыль - локален для их конвеера, им надо, пусть там что хотят танцуют. А мне, в дистрибуцию, дайте максимально собирающуюся упаковку.

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

По моему опыту сборки софта, некоторые прогромисты весьма изобретательны во введении своих коллег в состояние глубокого недоумения своими методами сборки.

По моему, тоже.

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

Конвеер их, проект их, делают то, что считают нужным.

дайте максимально собирающуюся упаковку.

Вы обращались с этим запросом разрабам? Что они ответили?

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

Я не про явление, а про само слово. Его макаки придумали, думая что открыли что-то новое, а на самом деле за ним скрывается тривиальная логика: внёс заметную правку - запусти сборку, только запуск сборки автоматический по хукам из vcs, но ради этого совершенно незачем было придумывать дурацкие аббревиатуры.

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

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

Ну в общем, моё резюме по данной теме следующее:

Флаг нужен, чтобы остановить сборку с ненулевым кодом в случае, если компилятор обнаружил то, что разраб считает некорректным или подозрительным (да, отдельные ворнинги можно выключить).

Автору это может понадобиться в двух случаях:

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

Поскольку конкретный обсуждаемый проект мне не известен, добавить мне нечего.

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

Флаг нужен, чтобы остановить сборку с ненулевым кодом в случае, если компилятор обнаружил то, что разраб считает некорректным или подозрительным (да, отдельные ворнинги можно выключить).

Товарищ. Это называется птичье щебетание. Зачем этот флаг нужен, никто так и не объяснил.

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

Вы ждёте не объяснения, а безоговорочного согласия с вашим мнением, что флаг не нужен. Форумчане же описывают своё видение ситуации.

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

Хотя бы один аргумент против привели форумчане.

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

Прикрывание попендария, ты можешь этот ключ спокойно убрать, но после того как ты по сути модифицировал программу ответственность за всё что случится дальше несёшь исключительно ты.

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

ответственность за всё что случится дальше несёшь исключительно ты.

Ну а если не вносить никакие изменения, то… автор все равно никакой ответственности не несет)

goingUp ★★★★★
()

Как показывает практика:

  1. Многие погромисты руководствуются принципом «собралось – значит все правильно». И пофиг на ворнинги.

  2. Примерно каждый второй ворнинг – это сигнал о реальной ошибке, ждущей своего часа.

  3. Захламление ерраута «пустяковыми» хинтами и ворнингами приводит к незамечанию реально полезных сообщений.

Я на одной работе, когда пришел, просто офигел. Флагманский проект собирался с несколькими сотнями нотификаций компилятора, и всем было пофиг. ПМ молодой, а команде до фени. Тогда я взял для примера несколько сниппетов и пошел к генеральному (фирмочка была небольшая). Генеральный – тоже бывший девелопер, еще из старых, писал в НИИ на Фортране в свое время. Показал ему сниппеты, направил мысль в сторону понимания сути проблемы, и через неделю проект собирался с 0 hints, 0 warnings, что потенциально предотвратило кучу гемора и мне и всем остальным девам в исправлении будущих глюков.

P.S. Еще в той же фирме SVN-репа с кодом всех проектов была в единственном экземпляре на сервере, стоящем там же, в офисе. И я как-то невзначай на совещании обронил, а что, мол, будет, если офис вместе с сервером хорошенько так затопят соседи сверху? Гамма эмоций на лице шефа была непередаваемой! И уже на следующий день было на скорую руку налажено бекапирование репы на сервер какой-то дружественной конторы на другом конце города. А еще через неделю моих трудов были готовы скрипты инкрементальных бекапов всего и вся сразу в три удаленных локации. Веселое было времечко…

quwy
()

-Werror нужен, чтобы «ужесточить» правила для кода.
-Werror нужен, но он должен быть опционален
Должен быть простой способ собрать программу без -Werror, но не все разработчики предоставляют такой способ в своих скриптах сборки.
Короче дело не во -Werror, а в «токсичных» «гениях», которые считают что ТЕБЕ НЕЛЬЗЯ СОБИРАТЬ ПРОГРАММУ БЕЗ -Werror на своём локальном компьютере

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

Но почему править код и брать от самый компилятор должен человек, решивший собрать ПО, а не афтар?

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

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

Так напишите скрипт, делающий это.

Вам надо, вы и пишите.

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

Компилятор не может знать хотел ты написать = или ==. Так что на этот счёт как раз никаких варнингов быть не должно.

Как раз нет, если в if встречается A=B то очень хорошо если компилятор об этом предупредит.

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

А ты, как всегда стремителен. Не заметить в предупреждении "-Werror" - это надо забыть надеть очки, ну, или одно из двух.

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

А мне, в дистрибуцию, дайте максимально собирающуюся упаковку.

«Максимально собирающаяся упаковка» это сферическое в вакууме.

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

а смотреть её логи все равно обычно не хочется.

Вот так и появляется говнокод.

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

Программист думал, что что-то там типизирует, а наказан я.

Тебе за это платят?

i-rinat ★★★★★
()
Ответ на: комментарий от lenin386

Зачем этот флаг нужен, никто так и не объяснил

Объяснили: остановить сборку с ненулевым кодом возврата при любом предупреждении, а не только ошибке. Тебя, правда, этот ответ почему-то не устраивает

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

Вопрос неправильный. Какой вред от самого флага? Это инструмент. Ты же не ругаешь dd за то, что с его помощью можно угробить ФС, например? Так и здесь. Обычно делают минимум два сценария сборки: для разрабов и для пользователей. Для разрабов сценариев использования выше по треду написали такую кучу, что не вижу смысла дублировать. Для пользователей сценарии тоже могут быть разные, кстати, например, меинтейнер пакета в каком-то дистрибутиве может хотеть собирать в релизе, но с -Werror (но это уже вопрос к меинтейнерам, что и как они собирают). Если для твоей софтины разрабы не сделали пользовательский сценарий сборки, значит, либо софтина не предназначалась для сборки обычными пользователями (например, типичный сценарий в проприетарном софте), либо разрабы жёстко лоханулись. Но в этом случае твой гнев должен быть направлен не на флаг, а на разрабов. В общем, стоит начать с того, предусмотрена ли вообще пользовательская сборка

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

Убрать же ключик быстрее, чем исправлять код?

imul ★★★★★
()

В суровом продакшоне, есть такое понятие как контролируемая сборка. Это когда берут исходник с указаным хэшем. Формируют среду для сборки, окружение указанных версий. Компелятор линкер и прочий тулинг и на выходе получают гарантированный результат. А если ты каждый месяц меняешь компилятор или системные либы ты вебмакакочная профурсетка.

Наш проект собирается полностью из исходников вплоть до бинутилс и компилятора. То есть берёшь строго определенный дистр, вкатываешь туда оэвсе зависимости. Потом собираешь окружение для сборку уже целевой прошивки

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

На вкус и цвет фломастеры разные.

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

От пользы от него много, вреда никакого.

anc ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)