Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Клуб нелюбителей C++

В своё время я посмотрел массу языков программирования (и продожаю смотреть), на некоторых — что-то писал, хотя бы реализацию известной американской считалочки. И мне всегда казалось, что C++ — самый уродливый, нелогичный и жуткий из всех языков. Оказалось — не казалось. Очень хорошая статья «За что я не люблю C++» Алексея Борескова — лишнее тому доказательство.

31 комментарий
ivank (ivank.ru) 2008

Статья — гавно. Есть три утверждения:

  1. C++ — не объектно-ориентированный язык. Это явная ложь или не понимание, того что есть ООП. Делегирование, и наличие reflection (ну и вообще метаинформации), ни в коем образе не являются необходимыми требованиями. Давайте ещц duck typing вспомним, ага?
  2. На С++ не могут писать C программисты, без предварительного обучения. Логично, на Java, C#, Haskell, Perl, подставить по вкусу он тоже писать не умеет. За 25 лет можно много наворотить.
  3. Если не знать, что некоторая библиотека делает «под полой», то результат может оказаться весьма небыстрым. В общем-то следствие простое — знай как работают библиотеки, на которые ты полагаешься.
    3.5 (следствие) STL — небыстрая библиотека, да есть такое. Именно поэтому все, кто пишет высоконагруженный код рано или поздно от неё отказываются в пользу самописанных библиотек. Или делают свою perfomance-orientied версию STL (типа EASTL). У нас пошли по второму пути. Часть design flaws, из-за которых STL нельзя сделать быстрее обещают исправить в C++09.

Да, C++ ужасный язык, но в своей нише (высокопроизводительный код с нетривиальной логикой) — он один из лучших. Вероятно, есть _немного_ лучше (OCaml, который я очень люблю, D, может Objective-C), но в силу исторических причин, им не занять уже его места. Да, C++ «уродливый, нелогичный и жуткий» тоже в силу исторических причин, а не потому что его делали садисты.

ivank (ivank.ru) 2008

Это я к тому, что не любить C++ за перечисленные недостатки, это то же самое, что винить Perl за то, что нельзя сделать hash с perect-hashing в целях эффективности (или что ключём в хэше обязана быть строка, что часто неудобно), или что яве нужна JVM, и вообще у неё уродский JNI. Для каждой задачи есть свой инструмент, и C++ один из самых эффективных. Если кто-то пытается совать его во все дыры — сам себе злобный буратино.

(комментарий от 01:47 прошу стереть)

FX Poster (blog.fxposter.org) 2008

А мне статья понравилась. Сам C++ знаю достаточно хорошо, чтобы согласится с автором — язык довольно неудобный и ужасно сложный, если принимать во внимание все мелочи. И чем больше познаешь C++ — тем больше убеждаешься, что он очень сложен.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для ivank.ru:

В итоге, вы согласились почти со всеми положениями статьи. Я, наверное заметно, не считаю, что статья гавно. Она написана человеком, который умеет писать (на его счету несколько книг и статей) и давно в теме (15 лет программирования на C++ на момент написания статьи).

Комментарий сотру чуть позже — разберусь что глючит, у меня тут переход на другую площадку, всяческие падения постоянно идут.

Daevaorn (daevaorn.myopenid.com) 2008

Известный старый баян, который уже даже не веселит. Обычно его вспоминают те, кто не знает что сказать против С++, поскольку его не знают сами и им кажется что автор то знает, а это далеко не так.(к хозяину блога не относится:))

Автор(статьи) просто не осилил С++ и его не знает, несмотря на некий мифический опыт. Любой кто разобрался в С++ и применял его активно на практике, сможет опровергнуть каждое утверждения из этой статьи.

У С++ есть много недостатков, но что поразительно, автор статьи не один из них не затронул.

Не зачет в общем.

dkrnl.livejournal.com 2008

интересное чтиво, упоминание синтаксиса скриптовых языков(питона) и медляность stl не совсем вместе вяжутся.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для daevaorn.myopenid.com:

Если вы считаете, что автор «не осилил» C++, то попробуйте посмотреть на его статьи и книги ;) Очень вряд ли это так :)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для dkrnl.livejournal.com:

Ну почему же, вяжутся. STL и Python там в разных контекстах.

zencd.livejournal.com 2008

«с С++ я столкнулся 15 лет назад» != «15 лет программирования на C++»

Требование «Язык должен быть таким, чтобы программисты на С могли легко на него перейти» звучит нелепо (и чем автор занимался 15 лет..) в свете двух других, более важных: а) бинарной совместимости с программами на Си, б) компилируемости текстов на Си.

После обеда ещё почетайу :)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zencd.livejournal.com:

Требование «язык должен быть таким, чтобы программисты на С могли легко на него перейти» в статье выдвигается от автора языка, это же легко понять.

barbudos.myopenid.com 2008

Сататью писал человек который не грокк С++. Аргументы там детские. Про неявные преобразования вообще смешно. Там есть пример про передачу аргументов по ссылке и по значению (копия). В этом примере автор пишет что мол «если программист надеется через переданный в функцию объект получить какой-то результат (т. е. изменение в объекте), то он надеется совершенно напрасно — будет изменена лишь копия объекта».. такое может полагать только очень наивный новичок. Уже с первых дней бэйсика где было byref и byval мне было понятно чем отличаются эти два м способа. Автор несёт местами наимвную чушь. Всоё непонимание он проэцирует на язык. С++ конечно птичий язык (хотя не более чем перл), но логика в нём есть и если понял логику, то становится всё понятно и легко.
+ С++ выше по уровню чем С, но всё равно достаточно низкоуровневый (в сравнении с многими другими) поэтому писать сложные вещи на нём сложно, а простые нелегко.
Это как про английский язык или про китайский писать мол глупые языки, уродливые...

zencd.livejournal.com 2008

[[ С++ вообще не различает два существенно РАЗНЫХ понятия — абстрактнывй тип данных (АТД) и объект. ]]

Это автор не различает понятия: тип от инстанса.

Почему-то автор не смог переопределить оператор для struct Vector3D; я написал пример за 5 минут, и без виртуальных таблиц кстати.

[[ в С++ нет интерфейсов ]] — читать про абстрактные классы

[[ объектная модель просто отсутствует ]]

Читаем что же такое есть эта объектная модель — совокупность основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигма программирования, основанная на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости. ( http://vmk.ugatu.ac.ru/book/buch/glossary.htm )

Мысленно сравним определение с тем что есть в С++ -​-​ либо ссылка «Объектная Модель» в голове автора линкуется на совершенно отличные данные, либо он лжёт.

Дальше читать устал. Что касается предоставленных нам «целей создания С++», то хорошо бы их ещё проверить на историческую правдивость. Amen.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zencd.livejournal.com:

Спасибо за критику. Вообще, хотелось бы услышать автора в комментариях, попробую ему написать.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zencd.livejournal.com:

Какие смешный скобки вокруг цитат.

Написал автору статьи в аську, появится в онлайн, попрошу его прокомментировать все замечания.

barbudos.myopenid.com 2008

Да, кстати, многие придирки к С++.. они скажем так с позиции сегодняшнего дня. По сути это как к старшему поколению придираться, мол не смеются над медведоми не знают что за ктулху такое...

Евгений Степанищев (bolknote.ru) 2008

Комментарий для barbudos.myopenid.com:

Подозреваю, хорошие языки существуют уже по сто лет :)

Daevaorn (daevaorn.myopenid.com) 2008

Объем выхлопа из под пера не характеризует адекватность автора. Увы. Есть такой «писатель» Фаронов, много написал, но еда его собраты дельфины не переваривают ибо не в себе.

А эта статья старая, уже 100 обкритикованная на программистских форумах.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для daevaorn.myopenid.com:

У него (автора) солидное, убедительно резюме.

preprocessor (prepor.ru) 2008

barbudos, object-c cуществует уже дохрена лет. И, кстати, не только сам язык, но и фреймворк, лежащий в основе Макоси, о чем говорят даже имена классов NS (NextStep)

А вообще вывод только один можно сделать из всего этого. Переходите, друзья, на Мак, тут и Object-C и питон и руби работают вместе с Cocoa (в .NET тоже, но .NET для винды это нифига не тоже самое, что Cocoa для мак).

Угу, я опять про макось :)

p.s. если openid недоступен, ошибка сверху:
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/u12474/bolknote.ru/www/_blok/openid.inc.php on line 245

Notice: Undefined offset: 1 in /home/u12474/bolknote.ru/www/_blok/openid.inc.php on line 432

Евгений Степанищев (bolknote.ru) 2008

Комментарий для prepor.ru:

Вот, блин, сколько можно. Выкинуть что ли эту реализацию с cURL. Я что-то не заметил, что кто-то через HTTPS авторизуется.

Barbudos (barbudos.myopenid.com) 2008

С++ позволял использовать старые наработки на С. Это определило и выбор языка программистами и корявости самого языка, но и отсутствие некоторых важных деталей (дабы не переусложнять и сохранить производительность). претензии к статье в том, что аргументация мягко говоря хромает и производит впечатление, что писал статью человек случайный.
Критика сводится по сути к тому, что С++ видите-ли не даёт сразу мощного.. гм.. набора высокоуровневых инструментов. Мол обманули. Это как ребёнок, ожидавший чего то большего. ну своя ниша у языка и не его вина, что на нём пытаются писать всё, что только можно и не можно.
Автор оспаривает утверждение «Язык должен быть таким, чтобы программисты с С могли легко на него перейти» и впадает в рассуждение, что новые особенности языка понять программистам на С будет сложно. Как будто это новость. Но если воспринять утверждение в иной плоскости перехода на новый язык с учётом багажа опыта и написанных библиотек.. То оказывается что утверждение верно. В общем статья сомнительная. Ну а переход на Мак... Нужно начинать по сути с нуля, винда потому у всех стоит, что даёт совместимость старого ПО на новой версии Оси.А если и переходить на чтото новое, то на линух — бесплатно и законно. А если за деньги, то проще на винде покачто.

zorgg.nudnik.ru 2008

Статья действительно бредовая, что, безусловно, не опроврегает утверждение, что С++ уродливый и жуткий (не уверен насчет «нелогичный»). Тем не менее, в ряде случаев просто не из чего больше выбирать.

Мне как-то посоветовали спрашивать на собеседованиях «Что вам не нравится в С++» (у соискателей на должность С++-программиста). Люди обычно несут как раз вот такую ахинею. «Жопой чувствую, что что-то не так с этим С++, а объяснить внятно не могу».

zorgg.nudnik.ru 2008

Кстати, там куча фактических ошибок в комментариях к коду «примеров, почему С++ сосёт», я не верю, что автор хорошо знает стандарты.

Про «скрытые затраты» вообще бред. OMFG ОКАЗЫВАЕТСЯ КОГДА Я СОЗДАЮ ОБЪЕКТ НА ЭТО ТРАТЯТСЯ РЕСУРСЫ!!!!!!!!!!!! — так, что ли? Строка в том примере передается по ссылке, ничего лишнего не происходит. Я готов утверждать, что сгенерированный любым приличным компилятором иполняемый код не будет уступать по производительности аналогичному коду для любого другого языка, в подавляющем большинстве случаев, будет превосходить. Единственный спорный момент — 0-terminated vs pascal strings, но поскольку автор не указывает, как он планирует использовать строку дальше, этот момент можно считать находящимся за рамками обсуждения.

zencd.livejournal.com 2008

Objective-C оказался мне интересным — позволяет динамическое изменение типов, при этом (кажется) сохраняя скорость сравнимую с Си, плюс интроспекция.

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

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zencd.livejournal.com:

Да, мне самому Objective-C очень нравится, я впервый с ним столкнулся, когда попытался простенькое приложение под Мак написать.

warmland.ru 2008

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

После этого пассажа можно бросать чтение.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для warmland.ru:

Да, у меня тоже определённые сомнения закрались на этой фразе.

indeyets.livejournal.com 2008
Евгений Степанищев (bolknote.ru) 2008

Комментарий для indeyets.livejournal.com:

Спасибо, вот, например, чудесное:
http://community.livejournal.com/ru_anti_cpp/1101.html?mode=reply

id.rambler.ru/users/alphill@rambler.ru/ 2008

А по моему С++ очень красивый язык. И я полность согласен с Р. Лафоре, в том, что «уже небольшой опыт общения с С++ позволит вам чувствовать себя гораздо комфортнее, а другие языки программирования будут казаться чересчур прихотливыми и избыточными». Так оно и оказалось. 4-х летний опыт Паскаля и ознакомления (Кстати в поисках достойной замены Паскаля) с другими языками, я абсолютно полностью согласен. Хотя в начале язык казался не просто сложным а элементарно не своим.:) все решаемо впринципе:) Я наконец то почувствовал что такое С++ и вот теперь точно могу сказать, что Паскаль хорош в обучающих целях, хотя мой препод по Разработке ПО и бизнес проектов, написал на нем 5 проектов, которые распостранены по всей России:)

А если не нравится попробуйте С#. Лично мне он нравится больше чем С++ чисто с синтаксической части. Короче красивее. Но я отказался от него из за его еще более абстрагированности.

Так что нефиг хаить С++!!! Это очень красивый язык!

Евгений Степанищев (bolknote.ru) 2009

Комментарий для id.rambler.ru/users/alphill@rambler.ru/:

Попробуйте посмотреть какие-то действительно красивые языки: JavaScript2, Python, Erlang. Из ряда Pascal/C++/C#, возможно C++ действительно кажется красивым.