LINUX.ORG.RU

Избранные сообщения doushiyou

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

Форум — Development

Список в конце поста написан Лавсаном 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++ нет области применения.

stevejobs
()

Меня окончательно и бесповоротно достал 12309

Форум — Desktop

Я уже писал о том, что на моем компьютере периодически возникает 12309. Многие не верят, ибо у них «всё работает». Если у вас всё работает отлично, и это всё, что вы хотите сказать - пожалуйста, не говорите ничего.

У меня тоже всё работает. До поры до времени. Как только потребление ОЗУ вырастает до 70% и более, а CPU непрерывно загружен (хоть и не до упора), то любая, даже самая незначительная дисковая операция занимает достаточно много времени и приводит к тормозам ВСЕГО.

Буквально только что (т.е. за 20 минут до написания этого сообщения) игрался я в CSGO от нечего делать. Посреди игры (уже минут 10 прошло) неведомое нечто начинает усиленно обращаться к винчестеру. Неведомое нечто не может быть чем-то очевидным, ибо всевозможные обвновления/синхронизации/и т.д. я поотключал, а кроме steam и самой игры ничего запущено не было. В результате начинаются жесткие фризы, а через несколько секунд компьютер превращается в состояние овоща - не реагирует ни на что, картинка на мониторе замерла, а звуковая карта зацикленно играет короткий семпл. Только reset.

В этот момент у меня было была одна мысль в голове: «Что, б****? Что за херня?»
А всё дело в том, что подобное состояние системы я последний раз наблюдал на венде несколько лет назад, да и то - на чужом компьютере. А теперь вендоподобные проблемы на моем собственном пк!

Я не знаю, 12309 ли это, либо другой баг, связанный с дисковой производительностью во время заполненного ОЗУ... меня это уже не волнует.

Хочу спросить совета: что делать?

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

Из возможных вариантов:

1) Выбросить linux и пересесть на винду. (работать в винде для меня просто тошнотворно, не вариант)
2) Доставить в дуалбут винду, играть исключительно в винде, всё остальное - в linux (сам факт дуалбута будет мусолить мою душу, а в снах я буду видеть себя типичным школьником, который хвастается свеженькой ubuntu)
3) Заменить шедулер на BFS. (поможет ли?)
4) Просто обновить ядро на более свежее (у меня стоит 3.13.0-24-generic - стоковое для linux mint 17. Опять же - поможет ли? Думаю нет, т.к. разрабы ядра давно пометили проблему как «решенную»)
5) Заменить дистрибутив linux на что-то сверхминималистичное - чистый Xorg, драйвера на видокарту, steam, а нормальное пользование системой вместе с повседневными задачами перенести в freebsd. (несмотря на то, что freebsd я уже научился готовить до вменяемого состояния, в отличие от pcbsd, лол но там всё еще есть некоторые мелкие неприятности, которые надо решать. Да и опять таки, дуалбут, мать его за ногу)
6) Забить на игры (чем развлекаться? пить пивко во дворе? я не пью)
7) Ваш вариант?

P.S. Как мне теперь смотреть в глаза людям, которым я советовал linux? А тем, которым ставил? Что я за дурак был тогда...
P.P.S. Да, я уже думал заменить home на удаленный каталог средствами ufs. Но это скорее удобный костыль, да и на всю систему ufs не поставить...

 ,

reprimand
()

перед установкой gentoo

Галерея — Скриншоты

Мой домашний компьютер! Монитор:dell u2311 Клавиатура: BTC (маленькая) Мышка (за кадром): от малоизвестной компании microsoft Наушники: beyerdynamic DT250 (80 ом).

Сейчас система Arch, DE: LXDE, dolphin, yakuake (в терминале emacs). Собираюсь переходить на Gentoo, задумался над разбиением диска.

>>> Просмотр (3000x2250, 1374 Kb)

 , ,

BillDver
()