06.03 23:18
←
06.03.2008, Nº 1613
Клуб нелюбителей C++В своё время я посмотрел массу языков программирования (и продожаю смотреть), на некоторых — что-то писал, хотя бы реализацию известной американской считалочки. И мне всегда казалось, что C++ — самый уродливый, нелогичный и жуткий из всех языков. Оказалось — не казалось. Очень хорошая статья «За что я не люблю C++» Алексея Борескова — лишнее тому доказательство.
06.03 23:18
← 06.03.2008, Nº 1613 |
||||||||||||||||||||||||||||||||
Статья - гавно. Есть три утверждения: 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++ один из самых эффективных. Если кто-то пытается совать его во все дыры - сам себе злобный буратино. (комментарий от 01:47 прошу стереть)
А мне статья понравилась. Сам C++ знаю достаточно хорошо, чтобы согласится с автором - язык довольно неудобный и ужасно сложный, если принимать во внимание все мелочи. И чем больше познаешь C++ - тем больше убеждаешься, что он очень сложен.
В итоге, вы согласились почти со всеми положениями статьи. Я, наверное заметно, не считаю, что статья гавно. Она написана человеком, который умеет писать (на его счету несколько книг и статей) и давно в теме (15 лет программирования на C++ на момент написания статьи). Комментарий сотру чуть позже — разберусь что глючит, у меня тут переход на другую площадку, всяческие падения постоянно идут.
Известный старый баян, который уже даже не веселит. Обычно его вспоминают те, кто не знает что сказать против С++, поскольку его не знают сами и им кажется что автор то знает, а это далеко не так.(к хозяину блога не относится:)) Автор(статьи) просто не осилил С++ и его не знает, несмотря на некий мифический опыт. Любой кто разобрался в С++ и применял его активно на практике, сможет опровергнуть каждое утверждения из этой статьи. У С++ есть много недостатков, но что поразительно, автор статьи не один из них не затронул. Не зачет в общем.
интересное чтиво, упоминание синтаксиса скриптовых языков(питона) и медляность stl не совсем вместе вяжутся.
Если вы считаете, что автор «не осилил» C++, то попробуйте посмотреть на его статьи и книги ;) Очень вряд ли это так :)
Ну почему же, вяжутся. STL и Python там в разных контекстах.
"с С++ я столкнулся 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
Вот, блин, сколько можно. Выкинуть что ли эту реализацию с cURL. Я что-то не заметил, что кто-то через HTTPS авторизуется.
С++ позволял использовать старые наработки на С. Это определило и выбор языка программистами и корявости самого языка, но и отсутствие некоторых важных деталей (дабы не переусложнять и сохранить производительность). претензии к статье в том, что аргументация мягко говоря хромает и производит впечатление, что писал статью человек случайный. Критика сводится по сути к тому, что С++ видите-ли не даёт сразу мощного.. гм.. набора высокоуровневых инструментов. Мол обманули. Это как ребёнок, ожидавший чего то большего. ну своя ниша у языка и не его вина, что на нём пытаются писать всё, что только можно и не можно. Автор оспаривает утверждение «Язык должен быть таким, чтобы программисты с С могли легко на него перейти» и впадает в рассуждение, что новые особенности языка понять программистам на С будет сложно. Как будто это новость. Но если воспринять утверждение в иной плоскости перехода на новый язык с учётом багажа опыта и написанных библиотек.. То оказывается что утверждение верно. В общем статья сомнительная. Ну а переход на Мак... Нужно начинать по сути с нуля, винда потому у всех стоит, что даёт совместимость старого ПО на новой версии Оси.А если и переходить на чтото новое, то на линух — бесплатно и законно. А если за деньги, то проще на винде покачто.
Статья действительно бредовая, что, безусловно, не опроврегает утверждение, что С++ уродливый и жуткий (не уверен насчет "нелогичный"). Тем не менее, в ряде случаев просто не из чего больше выбирать. Мне как-то посоветовали спрашивать на собеседованиях "Что вам не нравится в С++" (у соискателей на должность С++-программиста). Люди обычно несут как раз вот такую ахинею. "Жопой чувствую, что что-то не так с этим С++, а объяснить внятно не могу".
Кстати, там куча фактических ошибок в комментариях к коду "примеров, почему С++ сосёт", я не верю, что автор хорошо знает стандарты. Про "скрытые затраты" вообще бред. OMFG ОКАЗЫВАЕТСЯ КОГДА Я СОЗДАЮ ОБЪЕКТ НА ЭТО ТРАТЯТСЯ РЕСУРСЫ!!!!!!!!!!!! - так, что ли? Строка в том примере передается по ссылке, ничего лишнего не происходит. Я готов утверждать, что сгенерированный любым приличным компилятором иполняемый код не будет уступать по производительности аналогичному коду для любого другого языка, в подавляющем большинстве случаев, будет превосходить. Единственный спорный момент - 0-terminated vs pascal strings, но поскольку автор не указывает, как он планирует использовать строку дальше, этот момент можно считать находящимся за рамками обсуждения.
Objective-C оказался мне интересным - позволяет динамическое изменение типов, при этом (кажется) сохраняя скорость сравнимую с Си, плюс интроспекция. Вообще С++ становится всё менее актуальным и современным - тут я соглашусь; конкуренты у него очень "вкусные", а некоторые минусы найденные в статье и для меня - минусы :), например отсутствие вышеприведённых плюсов Обжектив-Си.
Да, мне самому Objective-C очень нравится, я впервый с ним столкнулся, когда попытался простенькое приложение под Мак написать.
Причем, что самое главное, компилятор в принципе может обнаруживать лишь ошибки в структуре языка. В то время как набор тестов способен определять ВСЕ ошибки. После этого пассажа можно бросать чтение.
Да, у меня тоже определённые сомнения закрались на этой фразе.
http://community.livejournal.com/ru_anti_cpp/
Спасибо, вот, например, чудесное: http://community.livejournal.c…html?mode=reply
А по моему С++ очень красивый язык. И я полность согласен с Р. Лафоре, в том, что "уже небольшой опыт общения с С++ позволит вам чувствовать себя гораздо комфортнее, а другие языки программирования будут казаться чересчур прихотливыми и избыточными". Так оно и оказалось. 4-х летний опыт Паскаля и ознакомления (Кстати в поисках достойной замены Паскаля) с другими языками, я абсолютно полностью согласен. Хотя в начале язык казался не просто сложным а элементарно не своим.:) все решаемо впринципе:) Я наконец то почувствовал что такое С++ и вот теперь точно могу сказать, что Паскаль хорош в обучающих целях, хотя мой препод по Разработке ПО и бизнес проектов, написал на нем 5 проектов, которые распостранены по всей России:) А если не нравится попробуйте С#. Лично мне он нравится больше чем С++ чисто с синтаксической части. Короче красивее. Но я отказался от него из за его еще более абстрагированности. Так что нефиг хаить С++!!! Это очень красивый язык!
Попробуйте посмотреть какие-то действительно красивые языки: JavaScript2, Python, Erlang. Из ряда Pascal/C++/C#, возможно C++ действительно кажется красивым. |
| Евгений Степанищев (imbolk@gmail.com)
t=0.066
|