Цитата: adolfus от 14.11.2024 01:01:33Безопасность в С++ достигается полным отказом от наследования, полиморфизма и прочего зла, типа создания шаблонов, котороыми никто кроме меня не будет пользоваться.
Безопасность С++ в первую очередь достигается тем, что это строго типизированный язык. Даже С с ним и рядом не стоял. А вот гибкость, наложенную поверх ограничивающей строгой типизации, и обеспечивают шаблоны.
Цитата: adolfus от 14.11.2024 01:01:33
Также, если вы не пишете oбработчики исключений, позволяющие исправить ситуацию, вызвашую исключение, и продолжать выполнение программы, то нет необходимости использовать try-catch.
И самая мякотка -- повторное использование классов. Когда я начинал программировать на С++, мои классы изобиловали не нужными на тот момент вещами -- я верил, когда-нибудь это может понадобиться. Спустя какое-то время выяснилось, что ничего из того, что было "про запас" написано, так и не сыграло. При этом классы в разных проектах, выросшие из таких "избыточных", постоянно дорабатывались под конкретную задачу и в результате между ними осталось мало общего. Сегодня я вообще не думаю насчет того, что разрабатываемый класс может понадобиться в каком-нибудь другом проекте -- я в это не верю. Время, потраченное на проектирование "прозапас" и прочую шлифовку -- это просто просранное время.
Все эти претензии могут быть высказаны к любому объектно ориентированному языку. Ничего С++ специфического здесь не озвучено.
Давайте пойдём от обратного. Рассмотрим, кто и на чём программирует. По большому счёту, языки делятся на транслируемые (компилируемые) и интерпретируемые. Есть множество ресурсов с указанием некоего рейтинга (по использованию?) языков программирования. На вершине находятся сплошь интерпретируемые языки, такие как Python, JavaScript (в обоих ипостасях - как клиентский язык и как Node.js), Java, PHP. Наличие jit опустим - он может наличествовать в любом интерпретируемом языке. Всё это массовый сегмент для большинства программистов, имеющий низкий порог вхождения с точки зрения образования и опыта.
С другой стороны, в наличии языки программирования для написания высокопроизводительных (как правило серверных) приложений и ОС, GUI. И в этом сегменте наличествует С, С++. Есть некоторое количество golang(самое известное - Docker, зачем писали на go - не знаю). Rust и странно-для-чего-деланный C# (для Windows, про Mono помнить можно, но лучше забыть) в некоторых количествах присутствует.
Итак, вам нужно написать
высокопроизводительное сетевое приложение/демон. Каков будет ваш выбор? Интерпретируемые языки отпадут сразу и по производительности и по потребляемым ресурсам. Не боясь особо ошибиться, это будет C. С++ воспоследует. Если для демона важны расширения посредством разделяемых библиотек - то это 99% будет С. Иначе - возможны варианты. Но стоит заметить, что именно относительно свежие дополнения С++ в виде поддержки асинхронных алгоритмом + корутины сделает процесс написания максимально безболезненным и быстрым. И что самое важное - логика программы будет прямой,
почти как в отсутствие конкурентной среды и с блокируемыми системными вызовами. И исключения будут работать и обрабатываться правильно.
А вот в языках, где event loop работает с событиями (через futures/queues + обработчик события, например в виде .then{...}) логика рваная и инвертированная. В такой среде исключения не работают правильно. Скажем, libevent и Node.js именно так и построен. Вы озвучили проблемы с исключениями в С++ в такой среде, но именно для С++ и асинхронных алгоритмов с корутинами это
ни разу не проблема.
В общем, если вам что-то не нравится, это не означает, что есть в наличии то, что нравится. В таком случае используют то, что максимально удовлетворяет запросам. От этого обычно и пляшут. И С++ остаётся пока №1 среди транслируемых (компилируемых) языков программирования. Но у С есть сегменты, где он превалирует. Впрочем, писать на С++, как на С, тоже никто не мешает, получая бенефиты от более строгой типизации (значит - меньше ошибок) и большей скорости от встраивания, где это нужно (и от уменьшения косвенной адресации в общем).
А где требования пониже и/или ресурсы (программистские) пожиже - там и Python с Node.js свою нишу найдёт.
PS Существуют книги/учебники из цикла "XXX за YYY дней". Применительно к С++ это "С++ за 21 день". Я его ради любопытства лет 20 назад поглядел. Так это вполне себе был учебник, чтобы за месяц начать
что-то писать на С++. Так что и для новичков С++ не имеет запредельной сложности
для вхождения.
PPS Утверждаю, что основные претензии к С++ базируются на очень старых версиях языка (или на вовсе нестандартном Microsoft VS), по крайней мере не позже С++98. С каждым новым стандартом С++ становится проще для использования. Да, дополнительные ключевые слова, алгоритмы и классы вводятся, но разумным будет забывание и исключение устаревшего и адаптация нового. Количество используемого и необходимого для запоминания материала может даже
уменьшится.