воскресенье, 3 мая 2020 г.

[prog.c++] По поводу стенаний на счет сложности выразительного C++ кода

Я тут пару дней как вынырнул из внезапного аврала, чутка отдышался, огляделся по сторонам и сразу на нескольких читаемых мной ресурсах обнаружил очередные стенания по поводу того, что лучше уж писать простыни тупого спаггети-кода, нежели связываться с компактным и выразительным C++ным кодом, который построен на высоких абстракциях, шаблонах, constexpr, лямбдах и других плюшках современного C++.

Сразу же вспомнился свежий опыт, приобретенный во время этого самого внезапного аврала. Нужно было в С++ном коде написать загрузку данных из текстового файла. Пользуясь средствами только стандартной библиотеки C++ (поскольку вкорячить в этот проект быстро стороннюю либу, особенно что-то из Boost-а, типа Boost.Spirit, заняло бы гораздо больше времени и это бы имело еще некоторые негативные последствия, о которых нет возможности рассказать).

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

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

При этом во мне еще была жива память о реализованном на продвинутых C++14 шаблонах easy_parser из RESTinio. И я уверен, что если бы была возможность сделать тот же самый разбор, но с применением easy_parser, то и времени бы это заняло в районе получаса, ну может быть часа. И кода было бы написано меньше. И надежность всего этого была бы выше. И работало бы это все быстрее.

Можно сказать, что на собственной шкуре проверил историю, которую когда-то рассказывал Максим Янченко (aka jazzer с RSDN), про быструю и дешевую реализацию парсеров на Boost.Spirit.


Какова мораль?

Переусложнить можно все что угодно.

Но фичи C++ действительно дают возможность писать меньше, а результат получать качественно.

И если кто-то не может это воспринять из-за каких-то личных тараканов в голове, и предпочитает клепать спаггети-код из-за нежелания познакомиться, например, с шаблонами C++, то давайте все-таки называть вещи своими именами: это из-за неасиляторства. А не из-за того, что сложный выразительный код на C++ не нужен.

Комментариев нет: