Клуб нелюбителей C++
В своё время я посмотрел массу языков программирования (и продожаю смотреть), на некоторых — что-то писал, хотя бы реализацию известной американской считалочки. И мне всегда казалось, что C++ — самый уродливый, нелогичный и жуткий из всех языков. Оказалось — не казалось. Очень хорошая статья «За что я не люблю C++» Алексея Борескова — лишнее тому доказательство.
Статья — гавно. Есть три утверждения:
3.5 (следствие) STL — небыстрая библиотека, да есть такое. Именно поэтому все, кто пишет высоконагруженный код рано или поздно от неё отказываются в пользу самописанных библиотек. Или делают свою perfomance-orientied версию STL (типа EASTL). У нас пошли по второму пути. Часть design flaws, из-за которых STL нельзя сделать быстрее обещают исправить в C++09.
Да, C++ ужасный язык, но в своей нише (высокопроизводительный код с нетривиальной логикой) — он один из лучших. Вероятно, есть _немного_ лучше (OCaml, который я очень люблю, D, может Objective-C), но в силу исторических причин, им не занять уже его места. Да, C++ «уродливый, нелогичный и жуткий» тоже в силу исторических причин, а не потому что его делали садисты.
Это я к тому, что не любить C++ за перечисленные недостатки, это то же самое, что винить Perl за то, что нельзя сделать hash с perect-hashing в целях эффективности (или что ключём в хэше обязана быть строка, что часто неудобно), или что яве нужна JVM, и вообще у неё уродский JNI. Для каждой задачи есть свой инструмент, и C++ один из самых эффективных. Если кто-то пытается совать его во все дыры — сам себе злобный буратино.
(комментарий от 01:47 прошу стереть)
А мне статья понравилась. Сам C++ знаю достаточно хорошо, чтобы согласится с автором — язык довольно неудобный и ужасно сложный, если принимать во внимание все мелочи. И чем больше познаешь C++ — тем больше убеждаешься, что он очень сложен.
Комментарий для ivank.ru:
В итоге, вы согласились почти со всеми положениями статьи. Я, наверное заметно, не считаю, что статья гавно. Она написана человеком, который умеет писать (на его счету несколько книг и статей) и давно в теме (15 лет программирования на C++ на момент написания статьи).
Комментарий сотру чуть позже — разберусь что глючит, у меня тут переход на другую площадку, всяческие падения постоянно идут.
Известный старый баян, который уже даже не веселит. Обычно его вспоминают те, кто не знает что сказать против С++, поскольку его не знают сами и им кажется что автор то знает, а это далеко не так.(к хозяину блога не относится:))
Автор(статьи) просто не осилил С++ и его не знает, несмотря на некий мифический опыт. Любой кто разобрался в С++ и применял его активно на практике, сможет опровергнуть каждое утверждения из этой статьи.
У С++ есть много недостатков, но что поразительно, автор статьи не один из них не затронул.
Не зачет в общем.
интересное чтиво, упоминание синтаксиса скриптовых языков(питона) и медляность stl не совсем вместе вяжутся.
Комментарий для daevaorn.myopenid.com:
Если вы считаете, что автор «не осилил» C++, то попробуйте посмотреть на его статьи и книги ;) Очень вряд ли это так :)
Комментарий для dkrnl.livejournal.com:
Ну почему же, вяжутся. STL и Python там в разных контекстах.
«с С++ я столкнулся 15 лет назад» != «15 лет программирования на C++»
Требование «Язык должен быть таким, чтобы программисты на С могли легко на него перейти» звучит нелепо (и чем автор занимался 15 лет..) в свете двух других, более важных: а) бинарной совместимости с программами на Си, б) компилируемости текстов на Си.
После обеда ещё почетайу :)
Комментарий для zencd.livejournal.com:
Требование «язык должен быть таким, чтобы программисты на С могли легко на него перейти» в статье выдвигается от автора языка, это же легко понять.
Сататью писал человек который не грокк С++. Аргументы там детские. Про неявные преобразования вообще смешно. Там есть пример про передачу аргументов по ссылке и по значению (копия). В этом примере автор пишет что мол «если программист надеется через переданный в функцию объект получить какой-то результат (т. е. изменение в объекте), то он надеется совершенно напрасно — будет изменена лишь копия объекта».. такое может полагать только очень наивный новичок. Уже с первых дней бэйсика где было byref и byval мне было понятно чем отличаются эти два м способа. Автор несёт местами наимвную чушь. Всоё непонимание он проэцирует на язык. С++ конечно птичий язык (хотя не более чем перл), но логика в нём есть и если понял логику, то становится всё понятно и легко.
+ С++ выше по уровню чем С, но всё равно достаточно низкоуровневый (в сравнении с многими другими) поэтому писать сложные вещи на нём сложно, а простые нелегко.
Это как про английский язык или про китайский писать мол глупые языки, уродливые...
[[ С++ вообще не различает два существенно РАЗНЫХ понятия — абстрактнывй тип данных (АТД) и объект. ]]
Это автор не различает понятия: тип от инстанса.
Почему-то автор не смог переопределить оператор для struct Vector3D; я написал пример за 5 минут, и без виртуальных таблиц кстати.
[[ в С++ нет интерфейсов ]] — читать про абстрактные классы
[[ объектная модель просто отсутствует ]]
Читаем что же такое есть эта объектная модель — совокупность основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигма программирования, основанная на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости. ( http://vmk.ugatu.ac.ru/book/buch/glossary.htm )
Мысленно сравним определение с тем что есть в С++ -- либо ссылка «Объектная Модель» в голове автора линкуется на совершенно отличные данные, либо он лжёт.
Дальше читать устал. Что касается предоставленных нам «целей создания С++», то хорошо бы их ещё проверить на историческую правдивость. Amen.
Комментарий для zencd.livejournal.com:
Спасибо за критику. Вообще, хотелось бы услышать автора в комментариях, попробую ему написать.
Комментарий для zencd.livejournal.com:
Какие смешный скобки вокруг цитат.
Написал автору статьи в аську, появится в онлайн, попрошу его прокомментировать все замечания.
Да, кстати, многие придирки к С++.. они скажем так с позиции сегодняшнего дня. По сути это как к старшему поколению придираться, мол не смеются над медведоми не знают что за ктулху такое...
Комментарий для barbudos.myopenid.com:
Подозреваю, хорошие языки существуют уже по сто лет :)
Объем выхлопа из под пера не характеризует адекватность автора. Увы. Есть такой «писатель» Фаронов, много написал, но еда его собраты дельфины не переваривают ибо не в себе.
А эта статья старая, уже 100 обкритикованная на программистских форумах.
Комментарий для daevaorn.myopenid.com:
У него (автора) солидное, убедительно резюме.
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
Комментарий для prepor.ru:
Вот, блин, сколько можно. Выкинуть что ли эту реализацию с cURL. Я что-то не заметил, что кто-то через HTTPS авторизуется.
С++ позволял использовать старые наработки на С. Это определило и выбор языка программистами и корявости самого языка, но и отсутствие некоторых важных деталей (дабы не переусложнять и сохранить производительность). претензии к статье в том, что аргументация мягко говоря хромает и производит впечатление, что писал статью человек случайный.
Критика сводится по сути к тому, что С++ видите-ли не даёт сразу мощного.. гм.. набора высокоуровневых инструментов. Мол обманули. Это как ребёнок, ожидавший чего то большего. ну своя ниша у языка и не его вина, что на нём пытаются писать всё, что только можно и не можно.
Автор оспаривает утверждение «Язык должен быть таким, чтобы программисты с С могли легко на него перейти» и впадает в рассуждение, что новые особенности языка понять программистам на С будет сложно. Как будто это новость. Но если воспринять утверждение в иной плоскости перехода на новый язык с учётом багажа опыта и написанных библиотек.. То оказывается что утверждение верно. В общем статья сомнительная. Ну а переход на Мак... Нужно начинать по сути с нуля, винда потому у всех стоит, что даёт совместимость старого ПО на новой версии Оси.А если и переходить на чтото новое, то на линух — бесплатно и законно. А если за деньги, то проще на винде покачто.
Статья действительно бредовая, что, безусловно, не опроврегает утверждение, что С++ уродливый и жуткий (не уверен насчет «нелогичный»). Тем не менее, в ряде случаев просто не из чего больше выбирать.
Мне как-то посоветовали спрашивать на собеседованиях «Что вам не нравится в С++» (у соискателей на должность С++-программиста). Люди обычно несут как раз вот такую ахинею. «Жопой чувствую, что что-то не так с этим С++, а объяснить внятно не могу».
Кстати, там куча фактических ошибок в комментариях к коду «примеров, почему С++ сосёт», я не верю, что автор хорошо знает стандарты.
Про «скрытые затраты» вообще бред. OMFG ОКАЗЫВАЕТСЯ КОГДА Я СОЗДАЮ ОБЪЕКТ НА ЭТО ТРАТЯТСЯ РЕСУРСЫ!!!!!!!!!!!! — так, что ли? Строка в том примере передается по ссылке, ничего лишнего не происходит. Я готов утверждать, что сгенерированный любым приличным компилятором иполняемый код не будет уступать по производительности аналогичному коду для любого другого языка, в подавляющем большинстве случаев, будет превосходить. Единственный спорный момент — 0-terminated vs pascal strings, но поскольку автор не указывает, как он планирует использовать строку дальше, этот момент можно считать находящимся за рамками обсуждения.
Objective-C оказался мне интересным — позволяет динамическое изменение типов, при этом (кажется) сохраняя скорость сравнимую с Си, плюс интроспекция.
Вообще С++ становится всё менее актуальным и современным — тут я соглашусь; конкуренты у него очень «вкусные», а некоторые минусы найденные в статье и для меня — минусы :), например отсутствие вышеприведённых плюсов Обжектив-Си.
Комментарий для zencd.livejournal.com:
Да, мне самому Objective-C очень нравится, я впервый с ним столкнулся, когда попытался простенькое приложение под Мак написать.
После этого пассажа можно бросать чтение.
Комментарий для warmland.ru:
Да, у меня тоже определённые сомнения закрались на этой фразе.
http://community.livejournal.com/ru_anti_cpp/
Комментарий для indeyets.livejournal.com:
Спасибо, вот, например, чудесное:
http://community.livejournal.com/ru_anti_cpp/1101.html?mode=reply
А по моему С++ очень красивый язык. И я полность согласен с Р. Лафоре, в том, что «уже небольшой опыт общения с С++ позволит вам чувствовать себя гораздо комфортнее, а другие языки программирования будут казаться чересчур прихотливыми и избыточными». Так оно и оказалось. 4-х летний опыт Паскаля и ознакомления (Кстати в поисках достойной замены Паскаля) с другими языками, я абсолютно полностью согласен. Хотя в начале язык казался не просто сложным а элементарно не своим.:) все решаемо впринципе:) Я наконец то почувствовал что такое С++ и вот теперь точно могу сказать, что Паскаль хорош в обучающих целях, хотя мой препод по Разработке ПО и бизнес проектов, написал на нем 5 проектов, которые распостранены по всей России:)
А если не нравится попробуйте С#. Лично мне он нравится больше чем С++ чисто с синтаксической части. Короче красивее. Но я отказался от него из за его еще более абстрагированности.
Так что нефиг хаить С++!!! Это очень красивый язык!
Комментарий для id.rambler.ru/users/alphill@rambler.ru/:
Попробуйте посмотреть какие-то действительно красивые языки: JavaScript2, Python, Erlang. Из ряда Pascal/C++/C#, возможно C++ действительно кажется красивым.