Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.
Клуб нелюбителей C++
В своё время я посмотрел массу языков программирования (и продожаю смотреть), на некоторых — что-то писал, хотя бы реализацию известной американской считалочки. И мне всегда казалось, что C++ — самый уродливый, нелогичный и жуткий из всех языков. Оказалось — не казалось. Очень хорошая статья «За что я не люблю C++» Алексея Борескова — лишнее тому доказательство.
Статья — гавно. Есть три утверждения: 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++ «уродливый, нелогичный и жуткий» тоже в силу исторических причин, а не потому что его делали садисты.
Это я к тому, что не любить C++ за перечисленные недостатки, это то же самое, что винить Perl за то, что нельзя сделать hash с perect-hashing в целях эффективности (или что ключём в хэше обязана быть строка, что часто неудобно), или что яве нужна JVM, и вообще у неё уродский JNI. Для каждой задачи есть свой инструмент, и C++ один из самых эффективных. Если кто-то пытается совать его во все дыры — сам себе злобный буратино.
А мне статья понравилась. Сам C++ знаю достаточно хорошо, чтобы согласится с автором — язык довольно неудобный и ужасно сложный, если принимать во внимание все мелочи. И чем больше познаешь C++ — тем больше убеждаешься, что он очень сложен.
В итоге, вы согласились почти со всеми положениями статьи. Я, наверное заметно, не считаю, что статья гавно. Она написана человеком, который умеет писать (на его счету несколько книг и статей) и давно в теме (15 лет программирования на C++ на момент написания статьи).
Комментарий сотру чуть позже — разберусь что глючит, у меня тут переход на другую площадку, всяческие падения постоянно идут.
Известный старый баян, который уже даже не веселит. Обычно его вспоминают те, кто не знает что сказать против С++, поскольку его не знают сами и им кажется что автор то знает, а это далеко не так.(к хозяину блога не относится:))
Автор(статьи) просто не осилил С++ и его не знает, несмотря на некий мифический опыт. Любой кто разобрался в С++ и применял его активно на практике, сможет опровергнуть каждое утверждения из этой статьи.
У С++ есть много недостатков, но что поразительно, автор статьи не один из них не затронул.
«с С++ я столкнулся 15 лет назад» != «15 лет программирования на C++»
Требование «Язык должен быть таким, чтобы программисты на С могли легко на него перейти» звучит нелепо (и чем автор занимался 15 лет..) в свете двух других, более важных: а) бинарной совместимости с программами на Си, б) компилируемости текстов на Си.
Сататью писал человек который не грокк С++. Аргументы там детские. Про неявные преобразования вообще смешно. Там есть пример про передачу аргументов по ссылке и по значению (копия). В этом примере автор пишет что мол «если программист надеется через переданный в функцию объект получить какой-то результат (т.е. изменение в объекте), то он надеется совершенно напрасно — будет изменена лишь копия объекта».. такое может полагать только очень наивный новичок. Уже с первых дней бэйсика где было byref и byval мне было понятно чем отличаются эти два м способа. Автор несёт местами наимвную чушь. Всоё непонимание он проэцирует на язык. С++ конечно птичий язык (хотя не более чем перл), но логика в нём есть и если понял логику, то становится всё понятно и легко. + С++ выше по уровню чем С, но всё равно достаточно низкоуровневый (в сравнении с многими другими) поэтому писать сложные вещи на нём сложно, а простые нелегко. Это как про английский язык или про китайский писать мол глупые языки, уродливые…
[[ С++ вообще не различает два существенно РАЗНЫХ понятия — абстрактнывй тип данных (АТД) и объект. ]]
Это автор не различает понятия: тип от инстанса.
Почему-то автор не смог переопределить оператор для struct Vector3D; я написал пример за 5 минут, и без виртуальных таблиц кстати.
[[ в С++ нет интерфейсов ]] — читать про абстрактные классы
[[ объектная модель просто отсутствует ]]
Читаем что же такое есть эта объектная модель — совокупность основополагающих принципов, лежащих в основе объектно-ориентированного проектирования; парадигма программирования, основанная на принципах абстрагирования, инкапсуляции, модульности, иерархичности, типизации, параллелизма и устойчивости. ( http://vmk.ugatu.ac.ru/book/buch/glossary.htm )
Мысленно сравним определение с тем что есть в С++ -- либо ссылка «Объектная Модель» в голове автора линкуется на совершенно отличные данные, либо он лжёт.
Дальше читать устал. Что касается предоставленных нам «целей создания С++», то хорошо бы их ещё проверить на историческую правдивость. Amen.
Да, кстати, многие придирки к С++.. они скажем так с позиции сегодняшнего дня. По сути это как к старшему поколению придираться, мол не смеются над медведоми не знают что за ктулху такое…
Объем выхлопа из под пера не характеризует адекватность автора. Увы. Есть такой «писатель» Фаронов, много написал, но еда его собраты дельфины не переваривают ибо не в себе.
А эта статья старая, уже 100 обкритикованная на программистских форумах.
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
С++ позволял использовать старые наработки на С. Это определило и выбор языка программистами и корявости самого языка, но и отсутствие некоторых важных деталей (дабы не переусложнять и сохранить производительность). претензии к статье в том, что аргументация мягко говоря хромает и производит впечатление, что писал статью человек случайный. Критика сводится по сути к тому, что С++ видите-ли не даёт сразу мощного.. гм.. набора высокоуровневых инструментов. Мол обманули. Это как ребёнок, ожидавший чего то большего. ну своя ниша у языка и не его вина, что на нём пытаются писать всё, что только можно и не можно. Автор оспаривает утверждение «Язык должен быть таким, чтобы программисты с С могли легко на него перейти» и впадает в рассуждение, что новые особенности языка понять программистам на С будет сложно. Как будто это новость. Но если воспринять утверждение в иной плоскости перехода на новый язык с учётом багажа опыта и написанных библиотек.. То оказывается что утверждение верно. В общем статья сомнительная. Ну а переход на Мак… Нужно начинать по сути с нуля, винда потому у всех стоит, что даёт совместимость старого ПО на новой версии Оси.А если и переходить на чтото новое, то на линух — бесплатно и законно. А если за деньги, то проще на винде покачто.
Статья действительно бредовая, что, безусловно, не опроврегает утверждение, что С++ уродливый и жуткий (не уверен насчет «нелогичный»). Тем не менее, в ряде случаев просто не из чего больше выбирать.
Мне как-то посоветовали спрашивать на собеседованиях «Что вам не нравится в С++» (у соискателей на должность С++-программиста). Люди обычно несут как раз вот такую ахинею. «Жопой чувствую, что что-то не так с этим С++, а объяснить внятно не могу».
Кстати, там куча фактических ошибок в комментариях к коду «примеров, почему С++ сосёт», я не верю, что автор хорошо знает стандарты.
Про «скрытые затраты» вообще бред. OMFG ОКАЗЫВАЕТСЯ КОГДА Я СОЗДАЮ ОБЪЕКТ НА ЭТО ТРАТЯТСЯ РЕСУРСЫ!!!!!!!!!!!! — так, что ли? Строка в том примере передается по ссылке, ничего лишнего не происходит. Я готов утверждать, что сгенерированный любым приличным компилятором иполняемый код не будет уступать по производительности аналогичному коду для любого другого языка, в подавляющем большинстве случаев, будет превосходить. Единственный спорный момент — 0-terminated vs pascal strings, но поскольку автор не указывает, как он планирует использовать строку дальше, этот момент можно считать находящимся за рамками обсуждения.
Objective-C оказался мне интересным — позволяет динамическое изменение типов, при этом (кажется) сохраняя скорость сравнимую с Си, плюс интроспекция.
Вообще С++ становится всё менее актуальным и современным — тут я соглашусь; конкуренты у него очень «вкусные», а некоторые минусы найденные в статье и для меня — минусы :), например отсутствие вышеприведённых плюсов Обжектив-Си.
Причем, что самое главное, компилятор в принципе может обнаруживать лишь ошибки в структуре языка. В то время как набор тестов способен определять ВСЕ ошибки.
А по моему С++ очень красивый язык. И я полность согласен с Р. Лафоре, в том, что «уже небольшой опыт общения с С++ позволит вам чувствовать себя гораздо комфортнее, а другие языки программирования будут казаться чересчур прихотливыми и избыточными». Так оно и оказалось. 4-х летний опыт Паскаля и ознакомления (Кстати в поисках достойной замены Паскаля) с другими языками, я абсолютно полностью согласен. Хотя в начале язык казался не просто сложным а элементарно не своим.:) все решаемо впринципе:) Я наконец то почувствовал что такое С++ и вот теперь точно могу сказать, что Паскаль хорош в обучающих целях, хотя мой препод по Разработке ПО и бизнес проектов, написал на нем 5 проектов, которые распостранены по всей России:)
А если не нравится попробуйте С#. Лично мне он нравится больше чем С++ чисто с синтаксической части. Короче красивее. Но я отказался от него из за его еще более абстрагированности.
Так что нефиг хаить С++!!! Это очень красивый язык!
Попробуйте посмотреть какие-то действительно красивые языки: JavaScript2, Python, Erlang. Из ряда Pascal/C++/C#, возможно C++ действительно кажется красивым.
Комментарии 31
1. C++ — не
2. На С++ не могут писать C программисты, без предварительного обучения. Логично, на Java, C#, Haskell, Perl, подставить по вкусу он тоже писать не умеет. За 25 лет можно много наворотить.
3. Если не знать, что некоторая библиотека делает «под полой», то результат может оказаться весьма небыстрым. В
3.5 (следствие) STL — небыстрая библиотека, да есть такое. Именно поэтому все, кто пишет высоконагруженный код рано или поздно от неё отказываются в пользу самописанных библиотек. Или делают свою
Да, C++ ужасный язык, но в своей нише (высокопроизводительный код с нетривиальной логикой) — он один из лучших. Вероятно, есть _немного_ лучше (OCaml, который я очень люблю, D, может
(комментарий от 01:47 прошу стереть)
В итоге, вы согласились почти со всеми положениями статьи. Я, наверное заметно, не считаю, что статья гавно. Она написана человеком, который умеет писать (на его счету несколько книг и статей) и давно в теме (15 лет программирования на C++ на момент написания статьи).
Комментарий сотру чуть позже — разберусь что глючит, у меня тут переход на другую площадку, всяческие падения постоянно идут.
Автор(статьи) просто не осилил С++ и его не знает, несмотря на некий мифический опыт. Любой кто разобрался в С++ и применял его активно на практике, сможет опровергнуть каждое утверждения из этой статьи.
У С++ есть много недостатков, но что поразительно, автор статьи не один из них не затронул.
Не зачет в общем.
Требование «Язык должен быть таким, чтобы программисты на С могли легко на него перейти» звучит нелепо (и чем автор занимался 15 лет..) в свете двух других, более важных: а) бинарной совместимости с программами на Си, б) компилируемости текстов на Си.
После обеда ещё почетайу :)
+ С++ выше по уровню чем С, но всё равно достаточно низкоуровневый (в сравнении с многими другими) поэтому писать сложные вещи на нём сложно, а простые нелегко.
Это как про английский язык или про китайский писать мол глупые языки, уродливые…
Это автор не различает понятия: тип от инстанса.
[[ в С++ нет интерфейсов ]] — читать про абстрактные классы
[[ объектная модель просто отсутствует ]]
Читаем что же такое есть эта объектная модель — совокупность основополагающих принципов, лежащих в основе
Мысленно сравним определение с тем что есть в С++ -- либо ссылка «Объектная Модель» в голове автора линкуется на совершенно отличные данные, либо он лжёт.
Дальше читать устал. Что касается предоставленных нам «целей создания С++», то хорошо бы их ещё проверить на историческую правдивость. Amen.
Спасибо за критику. Вообще, хотелось бы услышать автора в комментариях, попробую ему написать.
Какие смешный скобки вокруг цитат.
Написал автору статьи в аську, появится в онлайн, попрошу его прокомментировать все замечания.
Подозреваю, хорошие языки существуют уже по сто лет :)
А эта статья старая, уже 100 обкритикованная на программистских форумах.
У него (автора) солидное, убедительно резюме.
А вообще вывод только один можно сделать из всего этого. Переходите, друзья, на Мак, тут и
Угу, я опять про макось :)
p.s. если openid недоступен, ошибка сверху:
Warning: curl_setopt()
Notice: Undefined offset: 1 in /home/u12474/bolknote.ru/www/_blok/openid.inc.php on line 432
Критика сводится по сути к тому, что С++
Автор оспаривает утверждение «Язык должен быть таким, чтобы программисты с С могли легко на него перейти» и впадает в рассуждение, что новые особенности языка понять программистам на С будет сложно. Как будто это новость. Но если воспринять утверждение в иной плоскости перехода на новый язык с учётом багажа опыта и написанных библиотек.. То оказывается что утверждение верно. В общем статья сомнительная. Ну а переход на Мак… Нужно начинать по сути с нуля, винда потому у всех стоит, что даёт совместимость старого ПО на новой версии Оси.А если и переходить на чтото новое, то на линух — бесплатно и законно. А если за деньги, то проще на винде покачто.
Мне
Про «скрытые затраты» вообще бред. OMFG ОКАЗЫВАЕТСЯ КОГДА Я СОЗДАЮ ОБЪЕКТ НА ЭТО ТРАТЯТСЯ РЕСУРСЫ!!!!!!!!!!!! — так, что ли? Строка в том примере передается по ссылке, ничего лишнего не происходит. Я готов утверждать, что сгенерированный любым приличным компилятором иполняемый код не будет уступать по производительности аналогичному коду для любого другого языка, в подавляющем большинстве случаев, будет превосходить. Единственный спорный момент —
Вообще С++ становится всё менее актуальным и современным — тут я соглашусь; конкуренты у него очень «вкусные», а некоторые минусы найденные в статье и для меня — минусы :), например отсутствие вышеприведённых плюсов
Да, мне самому
После этого пассажа можно бросать чтение.
http://community.livejournal.com/ru_anti_c … mode=reply
А если не нравится попробуйте С#. Лично мне он нравится больше чем С++ чисто с синтаксической части. Короче красивее. Но я отказался от него из за его еще более абстрагированности.
Так что нефиг хаить С++!!! Это очень красивый язык!