Здравствуйте, кубик, Вы писали:
Последние лет десять думаю об этом. История, по-моему, была такая.
Изначально у сей (не плюсов) была ниша кросс-платформенного ассемблера — полный (и, ключевой момент —
естественный) доступ к железу и скорость. Важным моментом был сокращенный синтаксис — все эти {}, &, *, ?: и так далее.
Параллельно существовали мощные объектно-ориентированные языки, которые обладали очень слабой производительностью. Страуструп писал на одном таком серьезную систему, не смог добиться перфы, плюнул и переписал на сях, после чего создал для себя новый инструмент — немного классов, чтоб организовывать код, и транслятор в си. Это была свободная ниша и плюсы туда пришлись как нельзя лучше, что и обеспечило им господство на долгие годы.
Потом пришла пора шаблонного программирования и начались чудеса.
Во-первых, фокус с функционала переместился на «архитектуру». Извините меня, но std:(w)string это ХУДШАЯ РЕАЛИЗАЦИЯ строк, которую я когда либо видел. Она же не умеет просто ничего! Форматирование?
Старый добрый си. Перевод регистра?
Либо явный перебор, либо навесной бустовский алгоритм (и да, буст до сих пор НЕ часть языка). Смена UTF-8 на UTF-16?
Самописный велосипед. Для чего нужен класс, который ничего полезного не делает? Служит флажком в земле (штандартом)? Разве в стандартной библиотеке Си были функции для штандартизации? Нет, они все делали что-то очень полезное.
А это очень важный звоночек. Он звенит, когда программисты перестают заниматься чем-то полезным (для непрограммистов) и начинают страдать херней, раздуваясь от ЧСВ.
Во-вторых, шаблоны пошли вразрез с тем, что добавлял Страуструп. Вместо инкапсуляции алгоритмов под капот, чтобы не запинаться при работе над частной задачей, все кишки вытащили наружу и шагу ступить нельзя, чтобы не попасть в какой-нибудь a.begin(), a.end(), b.end().
Дальше — хуже. Сокращенный синтаксис стал черезвычайно многословным. static_cast<T>(o) вместо (T*) o и прочие бла-бла-бла. Шаблоны стали использоваться для чего угодно помимо обобщения. В библиотеке, претендующей на штандартность (бусте) встречаются трюки типа использования наследования для достраивания функционала (less или как там его). Не в реализации, нет! В юзерском коде! Производительность всего этого дела неявно падала все время. Если почитать, что пишут создатели требовательных к перфе приложений (движков, например), это будет «никакого STL никогда и ни за что!». А прогресс ведь тоже на месте не стоял и железо становилось мощнее. Неудивительно, что в TIOBE плюсы вдвое уступают как голому C, так и медленной Джаве.
Единственное преимущество, которое у плюсов остается, это ВЕНДОРОНЕЗАВИСИМОСТЬ. С Джавой связываться — тащить ее на целевую платформу, а ни хостеры, ни виндовые юзеры ее очень не любят. Шарп — ну, понятно, до недавнего времени это был evil Microsoft (что дальше с ним будет — увидим).
Резюме: стоит хорошему языку вырваться на волю, и конец этой груде мусора.