Вчера не удержался, сделал небольшой пост в G+. Получил там комментарий от ув.тов.Dev Lila. Начал отвечать и понял, что ответ выходит слишком длинным и лучше бы его преобразовать в блог-пост. Что, в общем-то, и делаю.
Для того, чтобы был лучше понятен контекст, продублирую текст своей заметки из G+, дабы желающие могли походить по ссылкам и составить свое мнение о том, что и где написано.
Вот интересно. В комментарии к последней статье на Хабре пришел не пойми кто (вероятно, про C++ вообще мало чего знающий), написал какую-то откровенную х*йню, куча народа эту х*йню отплюсовало. Почему это именно что х*йня я подробнее описал здесь.
На LOR-е недавно еще один неосилятор плюсов пытался возмутиться, что он не понимает C++ного кода с использованием Boost.MPL.
Сегодня вот на RSDN-е наткнулся на "плач Ярославны" по поводу использования возможностей современного C++: вот этот плач. И, что характерно, его там плюсуют, т.к. находятся люди, разделяющие подобные взгляды.
Такое ощущение, что современный C++ начинает восприниматься как Haskell лет 10-15 назад. Эдакий илитарный (от илитка) и оторванный от жизни и реальных задач язык для ботанов, которым хватило терпения зазубрить стандарт.
Так вот хотелось бы заострить внимание на двух вещах.
Первое. Статья для Хабра, вероятно, вышла неудачной. Но неприятно удивляет (точнее не удивляет, скорее просто разочаровывает) тотальное отсутствие желания общаться конструктивно. Набросать говна и свалить -- это запросто. А вот хотя бы просто спросить о чем-то, что было непонятно. Или просто сказать: "Вот тут ничего не понял" или "Вот здесь слишком много непонятных деталей". Но такого стремления к конструктиву в принципе нет.
Можно, конечно, делать поправку на то, что это Хабр такой. Но Хабр является всего лишь отражением программерского сообщество. Или какой-то части (существенной, думаю) этого самого программерского сообщества. Что не внушает оптимизма по поводу будущего.
Второе. Мне непонятны жалобы на то, что чем дальше, тем меньше современный C++ похож на старый-добрый, теплый и ламповый "С с классами", к которому все так привыкли и который такой удобный и няшный (на самом деле нет). Это как если бы студенты математических факультетов начали бы жаловаться на то, что матанализ, блин, какой-то слишком сложный, чем основы высшей математики и анализа из старших классов школы. Есть вещи, которые в принципе сложные. Для борьбы с ними и создаются сложные инструменты. И не важно, будет ли это математический аппарат из матанализа или же variadic templates и ADL из C++. Если вам так повезло, что вы можете обходится более простыми инструментами, то это не означает, что сложные инструменты не нужны.
Другое дело, что я сам, бывает, не в восторге от того, какую сложность доводится встречать в том или ином коде. Иногда эта сложность является следствием неумения программировать или же отсутствием опыта или даже элементарного вкуса. Как говорится "Программу на Фортране" можно написать на любом языке программирования. Точно так же и со сложностью: чрезмерную сложность, при отсутствии мозгов и здравого смысла можно организовать буквально на ровном месте.
Тоже самое касается и попыток выжать из возможностей текущей версии языка то, на что он не способен. Например, как Boost.Lambda в свое время или же попытки эмулировать variadic templates на перегрузках функций с разным количеством аргументов. Тут нужно вносить изменения в язык, а не извращаться с библиотеками. Хотя с тогдашними темпами развития языка у многих выбора просто не оставалось. Тем не менее, я сам не был в восторге, когда видел такое в коде. Ну и старался держаться подальше от такого кода.
Но ведь сейчас же как раз все происходит по уму: то, что должно быть именно в язык (вроде лямбд, variadic templates и rvalue references) оказывается именно в языке. Нужны тебе продвинутые возможности -- используешь их. Причем используешь их в нормальном, штатном режиме, а не балансируешь на пределе возможностей компиляторов. Не нужны продвинутые фичи -- не используешь. Но осуждать их наличие в языке-то зачем?
Отсюда, собственно, и возникает ощущение, что C++ превращается в какую-то заумную хрень, которую может осилить далеко не каждый, да и не нужно это в реальной жизни.
И хотя глупо спорить с тем, что C++ сейчас мало где нужен. Это же объективно так. Развитие вычислительной техники и языков программирования привело к тому, к чему и должно было привести. C++ -- это нишевый язык, он объективно нужен далеко не везде. И, к счастью, сейчас полно инструментов, которые способны C++ заменить в тех или иных областях. Но там, где C++ все еще нужен, глупо жаловаться на его сложность и непохожесть на ламповый "C с классами". Просто глупо.