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

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

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


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

22 коммент.:

dask.net комментирует...

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

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

Николай Войнов комментирует...

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

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

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

Николай Войнов комментирует...

to dask.net
опять кусок из Дейкстры

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

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

Alexey Zakhlestin комментирует...

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

migmit комментирует...

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

Yuriy Volkov комментирует...

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

lrrr комментирует...

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

migmit комментирует...

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

Yuriy Volkov комментирует...

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

Алёна комментирует...

>а что ты думаешь про язык D?

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

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

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

Nunquam dormio комментирует...

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

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

archimed7592 комментирует...

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

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

Алёна комментирует...

2009-2003 = 6 или я считать разучился? 0_о

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

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

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

archimed7592 комментирует...

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

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

Maniac комментирует...

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

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

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

NightmareZ комментирует...

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

Nunquam dormio комментирует...

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

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

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

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

archimed7592 комментирует...

Nunquam dormio, золотые слова :).

STK комментирует...

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

Анонимный комментирует...

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

Анонимный комментирует...

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

Oreolek комментирует...

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