Контроль бинарного кода на проекте C++
От: cppguard  
Дата: 04.05.21 23:17
Оценка: 3 (1) +2
Часто можно слышать, что С++ выбирают за быстроту при большом многообразии выразительных средств. И вот читая очередную статью про противоестественную ошибку на пустом месте у меня вдруг возник вопрос: а как вообще в более-менее крупных проектах выполняется контроль сгенерированного кода? Вот допустим описал программист нетривиальный конструктор у класса, который должен по всем правилам избегать двойного копирования (copy elision, move semantics, etc.), но запутался в l-value и r-value ссылках, в итоге код получился неоптимальным. Но если судить по тем статьям, что описывают такие случаи, то проблема обнаруживается или когда бинарный код начинает неимоверно жиреть, или когда производительность заметно падает в узких местах. Получается, что чтобы пользоваться всеми преимуществами С++, нужно или каждый метод при каждом изменении прогонять через godbolt и глазами убеждаться, что компилятор понял идею автора правильно, или обложиться тестами производительности по самое не хочу. Или есть какой-то другой метод? Вариант "мы нанимаем только экспертов С++" я не рассматриваю, потому что вся история ЭВМ построена на уменьшении влияния человеческого фактора на процесс построения корректных и эффективных программ. И вот ещё одно интересное наблюдение: многие именитые фигуры из мира С++ вроде Герба Саттера как таковой рабочий код не пишут, они могут обсуждать новый стандарт, разные скользкие моменты, идиоматичность разных конструкций и вообще что-угодно, кроме написания production-ready кода. А один из самых известных авторов и проповедников С++, Скотт Мейерс, вообще ни разу в жизни не работал программистом, если верить ему самому. Только вдумайтесь — человек, который консультирует в области использования С++, сам никогда не писал на нём!

Данная тема — не попытка развязать сотый holly war на тему, просто мне всегда было интересно, как пользоваться С++ правильно. На тех, проектах, где я работал, ситуация всегда была в духе "хотели как лучше, а получились как всегда" в том смысле, что кодовая база росла, программисты была разного качества, кто-то писал идиоматичных С++, кто-то на Си с конструкторами, всё это было приправлено сегфолтами и всё в таком духе.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.