LINUX.ORG.RU

ЧЕМ ПЛОХ C++???


1

0

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

Кто может чётко объяснить в чём недостатки C++ (прямо по пунктам)???
Кто больше найдёт :)))
anonymous

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

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

anonymous
()

ага, а некоторые люди говорят и думают что ты полный идиот, но разве ты будешь их слушать?

anonymous
()

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

hbee ★★★★
()
Ответ на: комментарий от hbee

>C++ плох своей избыточной сложностью - той же (и большей) мощи и выразительности можно получить за меньшую плату.

Что мешает использовать только необходимое подмножество?

anonymous
()
Ответ на: комментарий от anonymous

> Что мешает использовать только необходимое подмножество?

А там все - необходимое. Нужны tuples? Пожалуйста, пара часов геморроя, и получите... как насчет lambda? да аналогично. Только вот синтаксис у этого дела кривоват до жути; ну не был язык приспособлен для метапрограммирования... А уж отладка STL-софта - это вообще песня. тру блэк практически =/

int19h ★★★★
()
Ответ на: комментарий от int19h

>А уж отладка STL-софта - это вообще песня. тру блэк практически

Давно меня мучает этот вопрос, хотя на практике с STL вообще не работаю, т.к. компилятор кривой. Какие есть методы, кроме отладочной печати на экран/в файл?

anonymous
()
Ответ на: комментарий от anonymous

>Что мешает использовать только необходимое подмножество?

Мне необходимо использовать метапрограммирование, но в C++ это сделано ужасно.

hbee ★★★★
()
Ответ на: комментарий от anonymous

> за это приходится платить сложностью конструкций и высокой квалификацией разработчика.

И, соответственно, временем квалифицированного разработчика.

> С моей точки зрения, это скорее достоинство

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

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от anonymous

> Давно меня мучает этот вопрос, хотя на практике с STL вообще не работаю, т.к. компилятор кривой. Какие есть методы, кроме отладочной печати на экран/в файл?

Да методы в принципе стандартные - дебаггер =) Другой вопрос, как имена типов STL'ных контейнеров в нем выглядят...

int19h ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

> нормальные люди предпочитают заниматься интересными вещами, а не изобретением в сотый раз велосипедов.

Готовые велосипеды бесплатно раздаются на boost.org

int19h ★★★★
()

Все концепции в C++ - стянуты из других языков, и стянуты - очень плохо.

Те же темплейты - это плохо украденный аналог гигиенических макр в языке Scheme. Результат весьма плачевный.

Реализация ООП в C++ - убогая, если сравнивать в более классическими языками. Система типов - тоже убогая, даже если с Адой сравнивать.

Сложность языка - чрезмерно большая и никак не обоснованная - слишком много лишних конструкций. Тем более, что если уж строить метаязык, то надо делать его ядро максимально простым, и всю сложность запрятать в макры/темплейты.

В общем - давить. Страус - лох. Правильно его из AT&T уволили.

anonymous
()
Ответ на: комментарий от anonymous

Фигню говоришь. Сложность его вытекает из криволапости Страуса. Настоящий метаязык легко может оставаться простым.

anonymous
()
Ответ на: комментарий от watashiwa_daredeska

>С точки зрения неквалифицированных разработчиков aka "C++ разработчиков" - это может быть и достоинство, но нормальные люди предпочитают заниматься интересными вещами, а не изобретением в сотый раз велосипедов.

IMHO: нормальные люди не занимаются программированием вообще. Да и доля высоквалифицированных программистов очень не высока среди пишущего народа. Поэтому С++ и имеет репутацию монстра.

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

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

anonymous
()
Ответ на: комментарий от watashiwa_daredeska

>> за это приходится платить сложностью конструкций и высокой квалификацией разработчика.

>И, соответственно, временем квалифицированного разработчика.

Это достаточно спорно. Квалифицированный специалист на С++ может очень эффективно решать весьма сложные проблемы.

anonymous
()
Ответ на: комментарий от anonymous

С более адекватным языком он будет решать сложные проблемы эффективнее.

anonymous
()
Ответ на: комментарий от anonymous

Тебе это КАЖЕТСЯ. Простой язык может быть очень эффективным - если это МЕТАЯЗЫК. Учись, поумнеешь.

anonymous
()
Ответ на: комментарий от anonymous

сранно когда программисты недоучки ругают с++

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

язык богов мточно сказать

программирование на нем как песня, и удобно, и красиво, и радостно

я бы сказал что с++ это for fun

кроме того стоит напомнить что это единствинный объектный язык программирования прозрачный для архитектуры

и кстати, много лет пользуюсь стл и никаких проблем с отладкой не возникало

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

anonymous
()
Ответ на: комментарий от anonymous

>Учись, поумнеешь.

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

anonymous
()
Ответ на: комментарий от anonymous

Пример недостатка C++: в STL нельзя использовать безымянный функтор. И нельзя сделать функтор локальным классом. Значит, функторы определяются далеко от места использования, что снижает читаемость.

hbee ★★★★
()
Ответ на: комментарий от hbee

>Пример недостатка C++: в STL нельзя использовать безымянный функтор. И нельзя сделать функтор локальным классом. Значит, функторы определяются далеко от места использования, что снижает читаемость.

Это недостаток стандартной библиотеки а не языка.
Язык позволяет решить эту проблему и писать что-то типа
for_each(vp.begin(), vp.end(), cout << *_1 << '\n');

Подробности:
http://boost.org/doc/html/lambda/using_library.html#lambda.introductory_examples

anonymous
()
Ответ на: комментарий от anonymous

> Это недостаток стандартной библиотеки а не языка. Язык позволяет решить эту проблему и писать что-то типа for_each(vp.begin(), vp.end(), cout << *_1 << '\n');

Всё новые и новые подпорки и костыли (цитата с твоей ссылки):

Note that a normal (non-lambda) expression as subexpression of a lambda expression is evaluated immediately. This may cause surprises. For instance, if the previous example is rewritten as

for_each(vp.begin(), vp.end(), cout << '\n' << *_1);

the subexpression cout << '\n' is evaluated immediately and the effect is to output a single line break, followed by the elements of vp. The BLL provides functions constant and var to turn constants and, respectively, variables into lambda expressions, and can be used to prevent the immediate evaluation of subexpressions:

for_each(vp.begin(), vp.end(), cout << constant('\n') << *_1);

Вполне в духе C++ :-)

hbee ★★★★
()
Ответ на: комментарий от int19h

> Готовые велосипеды бесплатно раздаются на boost.org

В одной компании, например, существует строгое полиси на использование сторонних продуктов. boost запрещён. Отговорки - 1. у нас никто этого не знает, 2. а кто это будет поддерживать? В итоге, тот кто умеет, изобретает велосипеды, кто не умеет - ходит пешком.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от watashiwa_daredeska

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

anonymous
()
Ответ на: комментарий от anonymous

> сранно когда программисты недоучки ругают с++

Ничего не срано. Недоучки всегда что-нибудь ругают :)

> с++ это самый мощный язык программирования на сегодня, на нем можно сделать что угодно

Самый мощный - assembler. До него даже C++ недотягивает :) А если подойти теоретически, то они почти все эквивалентны машине Тьюринга, так что пофиг.

> язык богов

Так вот почему наш мир такой дерьмовый...

> с++ это for fun

Чёрный юмор что-ли?

> единствинный объектный язык программирования прозрачный для архитектуры

Что значит прозрачный для архитектуры?

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

Там где используют C++, идёт расчёт на миллионы леммингов. Эти автомобили выше их понимания, поэтому запрещены к использованию так же, как и специализированные ЯП. Мозг лемминга слишком мал, чтобы обучаться.

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от hbee

>Всё новые и новые подпорки и костыли (цитата с твоей ссылки):

Увы, сложно придумать язык, чтоб он отвечал тем концепциям, которые будут придуманы позже. Кое какие вещи получаются не слишком изящными. Но они ВОЗМОЖНЫ!!! Это и есть тот самый ++ IMHO: библиотека написанная на С++ это не подпорка под сам язык, поскольку использует его возможности. Скорее подпоркой можно назвать препроцессор...

anonymous
()
Ответ на: комментарий от anonymous

Да нет, не сложно. Настоящий полноценный метаязык учитывает ВСЕ концепции, которые только могут появиться. C++ - не настоящий, к сожалению.

И, кстати, крайне глупо утверждать, что эта концепция "придумана позже". Она минимум на 40 лет старше, чем C++.

anonymous
()
Ответ на: комментарий от watashiwa_daredeska

>Там где используют C++, идёт расчёт на миллионы леммингов. Эти автомобили выше их понимания, поэтому запрещены к использованию так же, как и специализированные ЯП. Мозг лемминга слишком мал, чтобы обучаться.

Имеется наверное ввиду недоучки использующие С++? Это душераздирающее зрелище! Для них создавали pascal, VB и Java.

anonymous
()
Ответ на: комментарий от anonymous

>Да нет, не сложно. Настоящий полноценный метаязык учитывает ВСЕ концепции, которые только могут появиться.

Определение дали. Осталось только доказать, что такой язык может существовать. Если я не ошибаюсь, то его существование опровергнет уже доказанную теорему Геделя о неполноте.

anonymous
()
Ответ на: комментарий от anonymous

Вопрос к тем, кто опускает C++ :
Перечислите пожалуйста языки которые ЛУЧШЕ!
Чем они лучше для разработки больших промышленных проектов?

И ещё. Давайте не будем рассматривать задачи, для которых лучше всего 
подходит perl. Я считаю, что C++ и Perl - это языки, которые покрывают все возможные задачи (каждый свои естественно).

kri
()
Ответ на: комментарий от watashiwa_daredeska

>В одной компании, например, существует строгое полиси на использование сторонних продуктов. boost запрещён. Отговорки - 1. у нас никто этого не знает, 2. а кто это будет поддерживать? В итоге, тот кто умеет, изобретает велосипеды, кто не умеет - ходит пешком.

Такова жизнь. К достоинствам и недостаткам языка это не относится.

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

anonymous
()
Ответ на: комментарий от anonymous

Не тупи. Если это метаязык, то он позволяет ВСТРОИТЬ в себя компилятор любого другого языка. Пример - Common Lisp, иногда - Scheme. Так что - ошибаешься, Гёдель тут совсем не при делах, речь только о turing completeness макросистемы языка.

anonymous
()
Ответ на: комментарий от anonymous

>Если это метаязык, то он позволяет ВСТРОИТЬ в себя компилятор любого другого языка. Пример - Common Lisp, иногда - Scheme. Так что - ошибаешься, Гёдель тут совсем не при делах, речь только о turing completeness макросистемы языка.

>полноценный метаязык учитывает ВСЕ концепции

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

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

anonymous
()
Ответ на: комментарий от anonymous

Почему ты так тормозишь?

К примеру - когда придумывали Лисп, никто и не знал про строго типизированные ленивые функциональные языки. Однако, очень просто расширить Лисп так, что он поддерживал бы и ленивую семантику, и строгую типизацию. Потому как он - метаязык. Однако, ты не сможешь такого же проделать с C++. Никогда. Так понятнее?

P.S. Не пытайся философствовать. Не по уму тебе это занятие.

anonymous
()
Ответ на: комментарий от anonymous

Первое правило интеллигентного спора: переходи на личности :-)

Согласно твоему определению метаязык должени поддерживать ВСЕ возможные, пусть еще не придуманные концепции программирования. То что лиспу удалость поддержать ленивую семантику (что бы это ни означало ;-) не меняя самого себя, не доказывает, что он поддерживает ВСЕ концепции. Следовательно, твое утверждение, о том, что лисп является метаязыком несколько преждевременно.

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

>Не пытайся философствовать. Не по уму тебе это занятие.

ps. Философия это ЛЮБОВЬ к мудрости. Ум и любовь это не совсем одно и тоже. Да и к мудрости ум имеет отдаленное отношение.

anonymous
()
Ответ на: комментарий от anonymous

Изволь, прежде чем продолжать тут позориться, ознакомиться с понятием Turing-completeness (иначе - алгоритмической полноты). Наличие таковой ГАРАНТИРУЕТ, что на языке можно выразить ЛЮБОЙ ВОЗМОЖНЫЙ алгоритм. Соответственно, когда Тьюринг-полным является макроязык, то это автоматически гарантирует, что язык может быть расширен до ЛЮБОЙ ВОЗМОЖНОЙ семантики. Учи теорию, и не пытайся умничать - у тебя это очень плохо и позорно получается.

anonymous
()
Ответ на: комментарий от anonymous

кстати (ты наверняка знаешь) есть известный результат что плюсовые шаблоны тьюринг-полны (если убрать ограничение на вложенность).

Но конечно, всем понятно что шаблоны это уродский способ метапрограммирования..

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

С шаблонами одна существенная засада - язык шаблонов не совпадает с самим C++ - то есть, это всё же не полноценный язык. К примеру, нет памяти, которая была бы общей для разных шаблонов.

anonymous
()
Ответ на: комментарий от anonymous

> язык шаблонов не совпадает с самим C++

[offtopic] Позвольте, Луговский же от анонимусов грозился не писать? Ты его ученик? :) [/offtopic]

Teak ★★★★★
()

Был бы я модератором, заплюсовал бы за разжигание флейма! :) На lor с подобными вопросами лучше не соваться %)

KIV
()
Ответ на: комментарий от dilmah

> кстати (ты наверняка знаешь) есть известный результат что плюсовые шаблоны тьюринг-полны (если убрать ограничение на вложенность).

на правах иллюстрации:

http://www.linux.org.ru/view-message.jsp?msgid=824267

;)

int19h ★★★★
()
Ответ на: комментарий от KIV

> Был бы я модератором, заплюсовал бы за разжигание флейма! :) На lor с подобными вопросами лучше не соваться %)

Это только начало. Настанет время, когда использование C++ будет повсеместно признано дурным тоном, как сейчас использование PL/1 :-)

hbee ★★★★
()
Ответ на: комментарий от hbee

> C++ плох своей избыточной сложностью - той же (и большей) мощи и 
> выразительности 

Так не используйте всю мощь С++ для прозрачной программы "Hello world!".
Проблема не в языке, а в программистах, пытающих всунуть в код все,
 что знают, а затем гордятся этим.

anonymous
()
Ответ на: комментарий от anonymous

> Так не используйте всю мощь С++ для прозрачной программы "Hello world!".

Откуда ты делаешь предположения о сложности моих задач? Мне нужна мощь и выразительность такая же и большая, чем предоставляет C++. И существуют языки, дающие это, при существенно меньшем "уровне шума".

hbee ★★★★
()
Ответ на: комментарий от anonymous

В универе нас учили, что на Lisp можно написать всё что угодно и т.д. (ибо базовае функции всё покрывают....)

Но вопрос не в принципиальной возможности а в скорости, удобстве, надёжности, прозрачности для себя и остальных.

Ведь написать можно и на ASM-е! Вопрос КАК!!!

kri
()
Ответ на: комментарий от kri

Из Лиспа ты можешь сделать C++ - так, что и не отличишь. Пишешь на C++, а на самом деле - на Лиспе. Из C++ ты НИЧЕГО кроме C++ не сделаешь. Лисп - это метаязык, который можно легко и дёшево превратить вообще в любой язык, какой сможешь придумать.

Почитай на http://www.paulgraham.com/

Если сможешь. Вообще-то тебя туда уже посылали не так давно - ты не осилил. Боюсь, мозгов у тебя маловато...

anonymous
()
Ответ на: комментарий от anonymous

C++ - проверенный временем язык.
ОПЫТ говорит, что на нём можно писать большие, расширяемые проекты.
Для этого придумали кучу либ, идиом, паттернов и т.д.

На кой нужен такой метаязык???
Да только для теоретиков!!! На практике, чтобы сделать из Lisp-а C++
уйдут годы!!!
А результат? будет тот же.

Ещё раз говорю - с теоретической точки зрения всё чисто - Lisp рулит, 
но с практической - он ни на что не годится!!!

Подходи к процессу не только как программер, но ещё и как менеджер, 
проектировщик, да и как заказчик тоже, которого волнует только быстрота 
и дешевизна!!! 

kri
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.