LINUX.ORG.RU

10 причин почему программист на С++ может выбить много денег


24

10

Список в конце поста написан Лавсаном 2 года назад. (2011-03-23 19:56:00) (источник)
Надеюсь, автор не подаст жалобу в Роспатент за перепечатку :-)
Кстати, sudo cast lovesan.

Чтобы проверить актуальность вопроса, всю последнюю неделю я долго и нудно использовал этот список в дискуссиях. Чтобы разобрать отдельные пункты отдельно.

Временное резюме: С++ всё еще актуален по историческим причинам. Еще есть мобилки (sudo cast mono), гиперкластеры для шиндовс 3.11 (sudo cast vromanov) и базы данных. Т.к. он актуален, но не предназначен ни для чего (см. выводы в конце списка) новых специалистов по нему должно быть мало. Маленькая конкуренция на огромной области применения — огромное лавэ $$$. Вот это и есть истинная причина использовать кресты — возможность срубить €€€.

Честно говоря, «хитрый план» мне уже очень надоел, поэтому пора открыть карты.

Заодним, крестопоклонники смогут выйти на последний и решительный бой, т.к. сегодня пятница и вечером будет время пообщаться. Поклонникам мамкиного борща тоже наверняка есть что добавить, конструктивно и аргументированно.

Вот этот список:

  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++ нет области применения

Промывать неокрепший студенческий мозг.

По тексту: согласен

C1nde ()

Вся эта чухня перевешивается двумя жирными плюсами:

1) C++11

2) По производительности рвет всех, как Тузик тряпку

anonymous ()

очень интересно все расписал.Нечто такое давно хотелось увидеть.Спасибо.

stackboxy ()
Ответ на: комментарий от anonymous

конкретные аргументы будут, где и что перевешивается?

stevejobs ★★★☆☆ ()

все это выглядит как тайд vs «обычный стиральный порошок (с)»

ananas ★★★★★ ()

Так это, альтернативу-то уже подвезли? На чем стоит переписывать все эти громадные проекты на крестах, браузеры там всякие, фотошопы, кады?

vazgen05 ★★ ()
Ответ на: комментарий от anonymous

Вся эта чухня перевешивается двумя жирными плюсами:

1) C++11

2) По производительности рвет всех, как Тузик тряпку

Вся эта чухня перевешивается одной буквой: D.

eugeno ★★★★★ ()

ты чего-то в последнее время расписался в шизофазическом стиле, стиви, ты как?

//предвижу: «программист с++ пишет только на правильном подмножестве с++»

RedPossum ★★★★★ ()
Ответ на: комментарий от stevejobs

Практика - критерий истины. Практика показывает, что на C++ как писали performance critical приложения, так и пишут.

anonymous ()
Ответ на: комментарий от ananas

Ну рассказывай, кого C++ не рвет по производительности? Очень интересно на такого монстра посмотреть.

anonymous ()
Ответ на: комментарий от eugeno

D - это было бы прекрасно, если бы был стандарт языка и стабильные реализации для всех тех платформ, где сейчас есть C++. А до тех пор, увы, никаких D даром не надо.

anonymous ()

Все правильно написано! Конечно, только деньги заставляют меня пользоваться этим безобразием. Если бы не деньги, я бы вообще не программировал

vromanov ★★ ()
Ответ на: комментарий от anonymous

Так там же ноги брать придется, а для меня это неприемлемо.

vazgen05 ★★ ()

Снова неосиляторы батхёртят. Сколько можно уже?

fenris ★★★★★ ()
Ответ на: комментарий от anonymous

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

ananas ★★★★★ ()

Хороший тред. Самое то в пятницу.

encyrtid ★★★★★ ()
Ответ на: комментарий от anonymous

Заикнулся про С++x11 и так беспонтово слился. Если знаешь старые кресты, в табличках «что нового в x11» должно быть всё понятно, сходи почитай и возвращайся с аргументами :-)

stevejobs ★★★☆☆ ()

Кое-что по делу, но в основном ерунда.

У си в еще большей степени нет области применения, а ему это не мешает жить и процветать.

unsigned ★★★ ()
Ответ на: комментарий от anonymous

Победика ты сначала моего меньшого брата. Уже есть веб сервер на чем-то отличном от С/C++ который бы бил nginx?

vromanov ★★ ()

У C++ нет области применения

Пишу это с KDE (написанного на С++), в Firefox (написанном на С++), открыты LibreOffice (написанный на С++) и...дальше нужно продолжать? У меня сейчас наверное только ядро на чистом С, и то только потому что его начали писать когда С++ был не очень распространён и теперь уже поддерживают на С. В Windows то же самое, кроме ядра на С вся ОС и приложения написаны на С++. Я понимаю, что сегодня пятница, но не рановато ли ты начал? ))

mbivanyuk ★★★★★ ()

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

thesis ★★★★★ ()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от RedPossum

фикс так и просится

«программист с++ пишет только на неправильном подмножестве с++»

geekless ★★ ()
Ответ на: комментарий от vromanov

Уже есть веб сервер на чем-то отличном от С/C++ который бы бил nginx?

Так на C или на C++. Романов, определитесь.

geekless ★★ ()
Ответ на: комментарий от vromanov

Если бы не деньги, я бы вообще не программировал

Иногда жалею, что не работаю водителем фуры. Хоть бы по странам поездил за казеный счет :(

x0r ★★★★★ ()
Ответ на: комментарий от mbivanyuk

У меня сейчас наверное только ядро на чистом С, и то только потому что его начали писать когда С++ был не очень распространён и теперь уже поддерживают на С

отсыпь, а?

ananas ★★★★★ ()
Ответ на: комментарий от vazgen05

Так это, альтернативу-то уже подвезли? На чем стоит переписывать все эти громадные проекты на крестах, браузеры там всякие, фотошопы, кады?

c#

anonymous ()

Re: Если бы не деньги, я бы вообще не программировал

Работая программистам, можно получать столько, что любые поездки за свой счет по карману бы не ударили. Водителем фуры ты будешь столько зарабатывать, только если будешь возить вещества из Афганистана.

anonymous ()
Ответ на: комментарий от geekless

Я же написал «меньшого брата». С младший брат С++. Ничего не мешает переименовать *.с в *.cpp и с минимальной правкой получить программу на С++.

vromanov ★★ ()
Ответ на: комментарий от mbivanyuk

ну тык, наркоманы против наркотиков, пчелы против меда...

x0r ★★★★★ ()
Ответ на: комментарий от vromanov

Синтаксически - да. Но С++ без, по крайней мере, STL, это не C++.

x0r ★★★★★ ()
Ответ на: комментарий от mbivanyuk

nginx

написанный на чистом Си

Firefox (написанном на С++)

залей эту версию на гитхаб, пожалуйста. У меня он на XML и JavaScript почему-то.

LibreOffice (написанный на С++)

именно поэтому он зависит от Java и Python, понятно

KDE (написанного на С++)

так вот почему оно так тормозит!

и...дальше нужно продолжать?

продолжайте наблюдения, очень интересно

stevejobs ★★★☆☆ ()
Ответ на: комментарий от x0r

да ну.. stl это из библиотек, не более того. Есдинственно, что она включена в стандарт

vromanov ★★ ()
Ответ на: комментарий от stevejobs

KDE (написанного на С++)

так вот почему оно так тормозит!

Не путай Qt и QML.

Ну и ты же знаешь, сколько KDE отъедает RAM в генте?

unfo ★★★★★ ()
Ответ на: комментарий от vromanov

С этой точки зрения можно вообще не разделять С и С++, и говорить о них, как об одном языке, а по топику обсуждать убогость/певосходство стандартных библиотек или тулкитов а-ля glib/boost.

Мое мнение, что кресты, будь то даже голый язык, это ООП в первую очередь, со всеми выплывающими (хотя меня както удачно троллили, мол имератив как не поверни - все равно императив). С и С++ хорошо дифференцируются, если сначала пописать на С, потом переучится на Java с ее заскоками, а потом уже спрыгнуть на С++(очень желательно на 11/14).

x0r ★★★★★ ()
Ответ на: комментарий от anonymous

и еще 2 чая

пункт 2) правда только при прямых руках у программиста. Но с кривыми руками программист офакапится в любом языке, так что - не новость

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от stevejobs

конкретные аргументы будут, где и что перевешивается?

Тестов вагон. Тот факт что на десктопах ядро более-менее распространенных ОС до сих пор не на Питоне/Руби/Java/whatever как бы намекает.

Pinkbyte ★★★★★ ()
Ответ на: комментарий от eugeno

Вся эта чухня перевешивается одной буквой: D.

Вот уж где проблемы с компиляторами и стандартом :-/
А идея-то хорошая...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от geekless

Между этими величинами нет явной связи (если не считать своппинг и пр.), я это и не утверждал :)

Хотя тормозов KDE я не замечал (последний раз пользовался во времена 4.5 — 4.6, периодически глюжу одним глазом в генте).

Гуй удобнее всего делать на Qt (без QML), ИМХО. Но вместо всего остального лучше пользовать сторонние решения (например, boost::asio вместо QtNetwork и т.д.).

unfo ★★★★★ ()
Ответ на: комментарий от stevejobs

У меня он на XML и JavaScript почему-то.

Что, даже внутренности движка? И gcc для компиляции не требует? Прикольно

именно поэтому он зависит от Java и Python, понятно

google://Libreoffice plugins

так вот почему оно так тормозит!

arguments or gtfo

продолжайте наблюдения, очень интересно

взаимно

Pinkbyte ★★★★★ ()

да ты неосилятор просто :)

Harald ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.