воскресенье, сентября 23, 2007

Размышления на тему сложности C++ на блоге The lonely compiler

The lonely compiler: Синтаксис и семантика, простота и сложность

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

22 комментария:

  1. Анонимный23/9/07 13:09

    Вопрос о том, что удачно спроектирован С++ или не удачно, неактуален, хотя бы для меня. Для меня главное, что мне удобно его использовать в большинстве задач. А там где использование С++ нерационально – используем С.

    Это не значит, что я знаком только с С&C++ :о) совсем нет... и другие языки я тоже люблю :о)и использую в зависимости от задачи.

    ОтветитьУдалить
  2. Кто такой автор не знаю, Страустроп тоже ничего кроме того что это он его придумал. В свое время читал Кернигана и Ричи, читал Страустропа, баловался немного С++.

    Думаю что тут "эффект второй системы по Бруксу" ... Потом можно вспомнить Вирта и Оберон... Ну и вообще можно в глубь - буквально вчера пересматривал статьи Дейкстры

    "... разработка "более богатых возможностями" или "более мощных" языков программирования была ошибкой в том смысле, что эта причудливая монструозность, это нагромождение идиосинкразий в действительности неуправляемы как механически, так и ментально. Я предвижу великое будущее для очень систематических и очень умеренных языков."

    ОтветитьУдалить
  3. to dask.net
    опять кусок из Дейкстры

    "Я наблюдаю культурную традицию, которая, по всей вероятности, уходит корнями в эпоху Возрождения: игнорировать это влияние и рассматривать человеческую мысль как первичную и главенствующую над тем, что ей создано. Но когда я начинаю анализировать ... я прихожу к совершенно иному заключению, а именно: инструменты, которые мы пытаемся использовать, и язык и обозначения, которые мы используем для выражения или записи наших мыслей, являются основным фактором, который определяет, о чем мы вообще можем мыслить и что можем выразить! Анализ влияния, которое язык программирования оказывает на своих пользователей, и признание факта, что к настоящему времени мощь нашего мозга является наиболее скудным ресурсом, совместно дают нам новый набор эталонов для сравнения относительных достоинств различных языков программирования. Компетентный программист хорошо знает о том, что объем его черепной коробки крайне ограничен; поэтому он подходит к задаче программирования с предельным смирением, и помимо прочего он избегает заумных трюков как чумы".

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

    ОтветитьУдалить
  4. (уйду немножко в оффтопик)
    а что ты думаешь про язык D?

    ОтветитьУдалить
  5. А там где использование С++ нерационально – используем С.
    Да оно везде нерационально.

    ОтветитьУдалить
  6. 2migmit: та ладно там нерационально. это почему же еще?

    ОтветитьУдалить
  7. Yuriy Volkov>
    migmit, кажется, вольно цитирует недавнего Линуса Торвальдса.
    Как там -- "если бы использование C было бы обусловлено только желанием держаться подальше от программистов на C++, это было бы само по себе очень веской причиной" ;)

    ОтветитьУдалить
  8. Потому что в любой задаче есть более разумные средства.

    ОтветитьУдалить
  9. разумен человек, а не язык или компилятор. Следовательно если что-либо не получается выразить на каком-либо языке, то в первую очередь следует винить себя а не инструмент. Хотя бы в том, что этот самый инструмент был выбран неверно. С тем, что есть языки, используя которые, продуктивность работы программиста повышается в разы - я знаком и соглашаюсь. Но в областях, где требуется выжать из железа максимум с С или С++ (про асм я вообще молчу) конкурировать тяжело.В общем я хотел всего лишь сказать, что все таки есть области, в которых именно использование С&С++ является рациональным решением. Ембедед и риалтайм системы например. Чем лучше в таких областях С++? Ответ прост - ООП.

    ОтветитьУдалить
  10. >а что ты думаешь про язык D?

    Похоже, это язык, который так и не смог найти себе нишу. И вряд ли сможет.
    У С++ есть то преимущество, что на нем уже написано уже много софта. Ну и меняется он потихоньку к лучшему.

    Java, C# - тоже языки, которые напоминают "улучшенный" C++. Активно пиарятся компаниями, их придумавшими.

    D здесь уже кажется лишним.

    ОтветитьУдалить
  11. Чем больше изучаю различных языков, тем больше убеждаюсь в ограниченности и неудобности С++.
    Но тем неменее, я прекрасно понимаю, что это является разумным компромиссом между удобством программирования и низкоуровневностью, ведущей к возможности достижения максимальной производительности.
    Именно этот компромисс позволил С++ стать дефакто промышленным стандартом в разработке софта и занять значительную нишу в этой сфере. Иначе, это был бы очередной высокоуровневый, красивый, концептуальный академический язык программирования, которых и так не мало.

    Хотя большая проблема С++, в его стандартизации, что увеличивает инерционность в развитии языка. 10 лет на принятие нового стандарта это очень и очень много. Непозволительно много.

    ОтветитьУдалить
  12. Хотя большая проблема С++, в его стандартизации, что увеличивает инерционность в развитии языка. 10 лет на принятие нового стандарта это очень и очень много. Непозволительно много.
    2009-2003 = 6 или я считать разучился? 0_о

    Последующие стандарты будут выходить чаще(но, думаю, не чаще, чем раз в 3-4 года). Просто если бы не дали время разработчикам и производителям компиляторов "перейти в колею стандарта", то толку от этого стандарта было бы не очень много...

    ОтветитьУдалить
  13. 2009-2003 = 6 или я считать разучился? 0_о

    AFAIR, стандарт 2003 года - это фактически исправление допущенных ошибок и опечаток предыдущего стандарта. Зачастую о нем даже и не вспоминают. Такой стандарт из серии "не считается".

    Просто если бы не дали время разработчикам и производителям компиляторов "перейти в колею стандарта", то толку от этого стандарта было бы не очень много...

    Питон вот обновляется гораздо чаще. Муж говорит, что примерно каждые 1.5-2 года. И ничего, набирает популярность.

    ОтветитьУдалить
  14. AFAIR, стандарт 2003 года - это фактически исправление допущенных ошибок и опечаток предыдущего стандарта. Зачастую о нем даже и не вспоминают. Такой стандарт из серии "не считается".
    Так и есть, но свой долг комитет выполнил(им полагается каждые 5-6 лет обновлять или пересматривать стандарт).

    Питон вот обновляется гораздо чаще. Муж говорит, что примерно каждые 1.5-2 года. И ничего, набирает популярность.
    А у Питона есть стандарт? Просто Delphi - вон, каждый год обновляется, ибо "они одни на белом свете".
    Ещё, в случае Питона играет роль тот фактор, что он зародился в наши дни, а не в дни "хаоса и ИТ разрухи".

    ОтветитьУдалить
  15. У Питона действительно есть стандарт, фактически это то, что описано на http://www.python.org/doc/. У Питона, однако, в отличие от C++ есть де-факто референсная реализация - CPython. Из-за наличия такой "главной" реализации, чаще всего словом Python называют и язык, и продукт.

    Но есть и другие: http://www.python.org/dev/implementations/, некоторые из которых реализуют язык в чистом виде, а некоторые -- с вариантами.

    И кстати насчет зарождения, не для спора, а для справки. Зародился Питон в начале 90-х. В наши же дни он лишь приобрел заметно большую популярность, чем при зарождении. Наверное где-то с версии 2.2 можно говорить о современном Питоне.

    ОтветитьУдалить
  16. Анонимный4/10/07 10:49

    Почти не использую C++. По-моему, это язык, в котором слишком много различных нюансов. И процесс написания программы превращается в шаманство.... Единственное, что на нём написал, 3d лайнсы, после чего окончательно решил, что буду использовать его только при необходимости. Для практических же целей - Delphi или C#.

    ОтветитьУдалить
  17. Думаю надо разделять понятия сложности языка и сложности программирования на нём. Из первого совсем не следует второе.

    Сложность языка определяется количеством сущностей, которыми оперирует язык, а также связями между ними и законами которым они подчиняются.

    Чистый Си намного проще, чем С++. Но программировать на нём сложнее, чем на С++.

    Сложность языка лишь определяет его гибкость, но не сложность его использования.

    ОтветитьУдалить
  18. Nunquam dormio, золотые слова :).

    ОтветитьУдалить
  19. Только в нашей стране, ежегодно (и уже лет десять) "выпекают" по нескольку тысяч (если не десятков тысяч) C++ кодеров, отсюда и популярность.

    ОтветитьУдалить
  20. Анонимный29/2/08 09:43

    Я считаю, что сложность С++ как инструмента вовсе не влечет за собой сложность созданных с его помощью программ. Как раз наоборот! Ведь сложность языковых средств призвана не к тому, чтобы усложнить программу (иначе такому языку - грош цена), а к тому, чтобы упростить создание программы.

    ОтветитьУдалить
  21. Анонимный15/3/08 09:40

    Только в нашей стране, ежегодно (и уже лет десять) "выпекают" по нескольку тысяч (если не десятков тысяч) C++ кодеров, отсюда и популярность.
    И качество "выпекаемых" соответствующее.
    С++ - язык для профессионалов, его возможности и мощь начинаешь понимать лишь спустя несколько лет серьезного использования. И понимать, каким ты олухом был вначалае, читая свой старый код.
    Что касается ситуации конкретно в нашей группе в институте, то на С++ пишут потому, что на нём пишут несколько человек, у которых все остальные скатывают. Остальные пишут на нём непонимая возможностей языка. Они конечно подходят под понятие "С++ кодеров", но пишут ужасно.И программы получаются соответственнные.
    Наверное им стоит пересесть на другие языки, более простые и удобные.

    ОтветитьУдалить
  22. Общее правило программирования - это "Чем сложнее программисту,тем легче пользователю".
    Если вы потратите время на разработку качественной программы, вы сумеете оценить достоинчтва языка и побороть его недостатки.Вне зависимости от уровня и языка программирования.
    Не следует ругать C++,ибо это хороший язык.Он обладает именно теми возможностями,которых хватает программисту. В нём нет "уборщиков мусора",которые призывают забыть о том,что компьютерная память имеет пределы. В нём есть такие вольготные излишества,как шаблоны. В нём есть возможность соединяться с Ассемблером.
    С++ есть не сложнее других.Он - объектно ориентированыый язык,не более. Другое дело,что это - очень старый язык, и что-то новое в нём сказать очень трудно, не сломав старого (представьте,что мировое сообщество вынуждено в спешном порядке переучиваться...Новые компьютеры и компиляторы не поддерживают старую нотацию языка и обратно...Что-то упрощать,изменять или удалять в нём уже поздно.).
    Каждый программист волен выбирать свой язык.Пишите на Лиспе, друзья.И не охайте по поводу его сложности: что выбрали,то выбрали.Программирование на любом языке - нетривиальная штука.
    И на любом языке можно сделать как шедевр,так и дерьмо.Всё зависит от таланта и усердия, в большей степени - от усердия.

    ОтветитьУдалить