История изменений
Исправление bugfixer, (текущая версия) :
Фундаментальная разница: UB определено стандартом языка. Наличие UB в коде означает, что компилятор не даёт никаких гарантий насчёт поведения выданного бинарника.
Вот есть у Вас, допустим, 10 MLOC, и они даже как-то работают в Вашей текущей сборке Вашим «любимым» компилятором на Вашем текущем железе. Как Вы планируете там UB искать? «Глазками»? Или, может быть - «static analysis» какой? И сколько человеко-часов на это уйдёт? И при всех этих затратах - откуда возьмётся уверенность что Вы их таки найдёте все? А когда реальная проблема себя проявит (смена компилятора, входные данные которых до этого не было etc) - что именно даст Вам post-factum знание «это результат UB» vs «мы таки серьёзно лоханулись в логике»? Править-то придётся при любом раскладе (и хорошо если ещё останется кому править, и ради чего)…
Или, вот ещё пример: пусть там никакого UB и не было, и код Ваш полностью корректен и standard-compliant (сказка же!), но вот удалось таки словить в проде баг компилятора. Вам легче будет от того что Вы пальчиком в разрабов компилятора сможете тыркать «они, мол - заднеприводные, а мы белые и пушистые» - условный «самолёт» то уже потерян? Риски всё равно на Вас, и лучше их осознавать / уметь оценивать, что однозначно мгновенно приводит к вопросу «а что будет если XXX», даже если XXX «полное Г» и «делать так никогда не надо».
Вот я о чём.
Исправление bugfixer, :
Фундаментальная разница: UB определено стандартом языка. Наличие UB в коде означает, что компилятор не даёт никаких гарантий насчёт поведения выданного бинарника.
Вот есть у Вас, допустим, 10 MLOC, и они даже как-то работают в Вашей текущей сборке Вашим «любимым» компилятором на Вашем текущем железе. Как Вы планируете там UB искать? «Глазками»? Или, может быть - «static analysis» какой? И сколько человеко-часов на это уйдёт? И при всех этих затратах - откуда возьмётся уверенность что Вы их таки найдёте все? А когда реальная проблема себя проявит (смена компилятора, входные данные которых до этого не было etc) - что Вам даст post-factum знание «это результат UB» vs «мы таки серьёзно лоханулись в логике»? Править-то придётся при любом раскладе (и хорошо если ещё останется кому править, и ради чего)…
Или, вот ещё пример: пусть там никакого UB и не было, и код Ваш полностью корректен и standard-compliant (сказка же!), но вот удалось таки словить в проде баг компилятора. Вам легче будет от того что Вы пальчиком в разрабов компилятора сможете тыркать «они, мол - заднеприводные, а мы белые и пушистые» - условный «самолёт» то уже потерян? Риски всё равно на Вас, и лучше их осознавать / уметь оценивать, что однозначно мгновенно приводит к вопросу «а что будет если XXX», даже если XXX «полное Г» и «делать так никогда не надо».
Вот я о чём.
Исходная версия bugfixer, :
Фундаментальная разница: UB определено стандартом языка. Наличие UB в коде означает, что компилятор не даёт никаких гарантий насчёт поведения выданного бинарника.
Вот есть у Вас, допустим, 10 MLOC, и они даже как-то работают в Вашей текущей сборке Вашим «любимым» компилятором на Вашем текущем железе. Как Вы планируете там UB искать? «Глазками»? Или, может быть - «static analysis» какой? И сколько человеко-часов на это уйдёт? И при всех этих затратах - откуда возьмётся уверенность что Вы их таки найдёте все? А когда реальная проблема себя проявит (смена компилятора, входные данные которых до этого не было etc) - что Вам даст post-factum знание «это результат UB» vs «мы таки серьёзно лоханулись в логике»? Править-то придётся при любом раскладе (и хорошо если ещё останется кому править, и ради чего)…
Или вот ещё пример: пусть там никакого UB и не было, и код Ваш полностью корректен и standard-compliant (сказка же!), но вот удалось таки словить в проде баг компилятора. Вам легче будет от того что Вы пальчиком в разрабов компилятора сможете тыркать «они, мол - заднеприводные, а мы белые и пушистые» - условный «самолёт» то уже потерян? Риски всё равно на Вас, и лучше их осознавать / уметь оценивать, что однозначно мгновенно приводит к вопросу «а что будет если XXX», даже если XXX «полное Г» и «делать так никогда не надо».
Вот я о чём.