Почему C++ - говно. В 10 пунктов.

топ 100 блогов love5an23.03.2011 Существует замечательный сайт C++ FQA Lite, в котором подробно и обстоятельно объясняются недостатки C++.

На мой взгляд, хотя там все написано верно, написано это слишком эмоционально(чувствуется, что автор провел немало времени, борясь с недостатками плюсов), и слишком уж многословно. Да и, к тому же, на английском

Поэтому я решил составить свой список, в котором четко и ясно объясняется, почему же все-таки я считаю C++ таким страшным говном, которое надо закопать. В списке всего десять пунктов, все четко, ясно и по делу.

Итак:

  1. Вырвиглазный синтаксис и контекстно-зависимая грамматика
    • медленная компиляция
    • частые "internal error" в компиляторах
    • код плохо читается и его сложно поддерживать
    • разбор кода различными инструментами, вроде IDE, и его генерация - сильно затруднены
  2. ручное управление памятью
    • неудобства при работе с динамической памятью
    • утечки памяти
    • висячие ссылки
    • сегфолты
    • стандартные средства, как то malloc/new, работают медленно
    • фрагментация кучи
    • велосипедные аллокаторы на каждом шагу
      • которые далеко не факт что эффективнее malloc/new
    • велосипедные счетчики ссылок на каждом шагу, опять же
      • медленная работа
      • перерасход по памяти
    • отладка затруднена
    • написание GC, по факту, невозможно, отчасти из-за (5), (7) и (8)
  3. Никакого ABI
  4. Нестандартизированный и непредсказумый name mangling
  5. Дублирование функционала Си
    • сами фичи из Си никуда не деваются при этом
      • отчасти из-за того, что по функционалу превосходят аналоги из C++
    • запутывает новичков
    • malloc - new/new[], free - delete/delete[]
    • препроцессор - шаблоны
    • указатели - ссылки
      • ссылка не может быть NULL, что способствует появлению висячих ссылок и сегфолтов
    • структуры - классы
    • stdio - iostream
  6. Стандартная библиотека убога
    • Отсутствует даже такой функционал, как вменяемая работа со строками и многомерные массивы
      • Юникод?
  7. Слабая типизация
    • способствует ошибкам
    • затрудняет отладку
    • const не дает абсолютно никаких гарантий
    • при этом система типов невероятно переусложенена
      • в основном из-за пунктов (2), (5) и (9)
      • медленная компиляция
      • частые внутренние ошибки в компиляторах
  8. объектая система убога
    • практически никакой интроспекции
      • отладка затруднена
    • передача объектов по значению
      • понятие идентичности объекта теряет смысл
      • добавляет сложностей в управлении памятью
      • добавляет сложностей при отладке
      • используется часто, по причине (2)
        • перерасход по памяти
        • медленная работа
    • множественное наследование неудобно в использовании
      • проблема ромба по дефолту не разрешается никак
    • исключения в конструкторах гарантированно влекут утечку памяти
      • исключения в деструкторах тоже, и просто утечку - еще в лучшем случае
        • коды ошибок деструкторы и конструкторы возвращать не могут
          • ошибки в них не обработать никак
            • поэтому ими стараются не пользоваться
              • раздувание кода
    • деструктор можно вызывать до выхода из блока кода, или до delete
      • гарантированная утечка ресурсов/сегфлот
      • это не предотвратить никак, деструктор обязан быть public
    • одиночная диспетчеризация
      • виртуальные методы в конструкторах не работают
      • реализована убого
        • pure virtual function call
        • сложности в случае с множественным наследованием
        • деструкторы обязаны быть виртуальными
          • по дефолту - не виртуальные
        • никаких интерфейсов, только классы
    • порядок инициализации статических членов классов не определен
    • private, public и protected не дают никаких гарантий сокрытия данных
      • к инкапсуляции же не относятся совершенно никак
    • отсутствие "свойств"
      • вынуждает городить getter'ы и setter'ы
        • раздувание кода
        • размывание интерфейса класса
    • неявно генерирумые конструкторы, деструкторы и операторы присваивания
    • "friend" нарушают инкапсуляцию
  9. шаблоны
    • очень сильно замедляют компиляцию
    • раздувание кода
    • обфускация кода
    • результат раскрытия плохо предсказуем
    • сложности в отладке
      • километровые и плохо читаемые сообщения об ошибках при компиляции
    • нарушают инкапсуляцию
      • обязаны содержать реализацию в заголовочных файлах
    • позволяют генерировать некорректный код
  10. исключения
    • отсутствие finally/unwind-protect
      • заставляет городить классы ради одних деструкторов
        • раздувание кода
        • медленная компиляция
        • медленная работа
    • конфликтуют с другими возможностями языка
      • конструкторы/деструкторы
      • ручное управление памятью
    • работают медленно
    • малофункциональны (ср. CL condition system)


По причинам 3, 4, 5, 9 и 10 C++ совершенно неприменим для системного и низкоуровневого программирования.
А по причинами 1, 2, 5, 6, 7, 8, и, опять же, 9 и 10 - и для прикладного.

У C++ нет области применения. C++ протух и умер. Хватит насиловать труп!

Оставить комментарий

Anonymous 12.06.2020 13:51
Пейсатель данного поста страдает терминальной стадией фимоза головного мозга: нахВАтавшись быдлоязыков в духе жабы и жабаскрипта, мозг поциента просто не способен воспринимать небыдло языки. Таких погромистов надо гнать с*аным веником в гумонитарии.
Anonymous 12.06.2020 13:53
Писать большой проект с нуля и на C++ говнопрограммистами и руксоставолм вышедшим из таких - считается малоудачной идеей. Но, вот незадача - почти все успешные ОС, ..., и даже игры - только так и пишутся, а неуспешные - надо же наоборот: на всё прочем, включая этот ваш Python. Исключения конечно бывают, особенно когда насрать на производителность у конечного потребителя заставляя делать Upgrade, но лишь - чтобы подтвердить правило... Любой программист прокачавшийся выше хеллоувордщика допускает на 10 000 строк кода примерно одинаковое количество ошибок (которое варьируется от 1 у Кнутов и Кормаков до 10 000+ у типичного быдлокодера). А код на C++ обычно длиннее, чем на более поздних языках, и багов, разумеется, будет намного больше. Потому у него глаза зырестей а не в жопе - чаще всё же смотрят в код, а не надеясь на отсеивание ошибок компилятором, тем более что логические - им всегда пропускаются. А, для быдлокодеров ниасилляторов функции free() и delete - в разы проще написать медленный, но макет на чём-то хоть и (супер)медленном, но со сборкой мусора (обычно это C#, Java или Python), а потом переписать особенно тормозящие участки (которые, как водится, окажутся совсем не там, где ты думал и вообще неисправимы почти всегда). Наконец, бывает так, что единственная скорость, которой хочет заказчик — это скорость разработки и он покупает макет и начинает юзать его как нормальную программу, оставляя программистов наедине с баблом и удивлением, но это уже относится именно к безмозглым быдлокодерам ниассияляторам ни С++, ни Си, ни даже CBuilder-only.
АВасЕбет? 06.11.2020 11:25
Чел который это высрал полное дно в программирование. Закрой енбало и ничего не говори про плюсы
aspirin 06.11.2020 11:28
Козлобородая гнида, которая своей пиздой высрала человека, написавшего эту хуету, должна пройти стерилизацию, стерилизовать своих детей и изолироваться от общества. Такую хуету нельзя плодить
aspirin 06.11.2020 11:28
Уничтожьте эту тварь, пока она не отложила яйца!!!
Jewgeni Jewtifjew 29.11.2020 07:30
бля ! совершенно в дырочку!!
как меня зае...л этот язычёк!
ssihi 16.12.2020 01:36
Полностью согласен с этим этим молодым человеком. Высер Страуструпа, может быть, в 90-х или начале нулевых мог что-то показать. Сейчас это мёртвый кусок дерьма. Современные языки работают куда лучше этой допотопной штуки. ООП в плюсах это ООП курильщика, всё через задницу в нём. В 2021 году "быдлоязыком" становится как раз С++ со своими рудиментами. Пора уже отравить его на покой.
Константин 20.03.2023 09:31
Здравствуйте, писал на с++ и на питоне. Могу сказать что с++ это язык программирования для полных даунов которые ничего не знают про это. Питон это новые возможности искусственный интеллект и тд
Макс 01.06.2023 19:59
Автор все по фактам разложил Плюсцы - конченный кусок блевотины. И используют его в продакшене только больные шизоиды. Максимум для чего он может пригодиться - повые...ться перед такими же долбоящерами. Все. Питон тож в топку. Скриптопомоечное говнище для быдла. Хотя, в отличие от плюсов, у него хотя бы есть своя ниша. Итог: определенные проекты, конечно, можно и нужно писАть на, например, С# или Жаба. Или даже на питоне. Но! Лучше Си ничего пока не придумали. Аминь.
yurmal 05.06.2023 20:25
C++ говно. Особенно видно по комментариям.
Архив записей в блогах:
Друзья, нас ждет горячая предвыборная пора. Ближайший месяц будет много скандалов, грязи и провокаций. Поскольку я читаю все комментарии к своим постам, хотел попросить вас. Не нужно в комменты к постам вставлять полит-агитацию, ...
Решила я тут посмотреть рецептики, присланные благодарными потребителями Его Нежнейшества на сайт одного из изготовителей. В общем, стандартная нямка, но вот на что я обратила внимание, так это на салатики со сказочно-романтичными названиями. ...
Власти города Гома, в котором проживает более 1,5 миллиона человек, приняла решение эвакуировать население из-за извержения вулкана Ньирагонго. Отмечается, что вечером субботы, 22 мая, поток лавы приблизился к местного аэропорта. В то же время в ряде районов отключено электричество. ...
По мотивам - http://community.livejournal.com/man_woman/9436132.htmlМилые, очаровательные наши альтруистки ...
22 июля 2012 года 13:46 | Евгений Попов Текст Фото Видео Кончай перекур, становись на руки Писатель Евгений Попов о последних политических сюжетах Вот все намекали да намекали вам, граждане, как в том старом анекдоте, когда обманутый муж все ...