Давно уже пишу на С++, и чем больше работаю с этим языком, чем вернее убеждаюсь, что этот язык — большпя спекуляция... Для решения конкретных практических проблем этот язык слишком перегружен и непоследователен. Берём Java, С#, тот же VB горячо любимый — изучаешь за пару недель и спокойно пользуешься. Не надо каждый месяц убеждаться, что что-то ты не знаешь, нету геморроя с перегрузкой, правилами инстанциирования шаблонов, мучительным выбором что имеено использовать — потоки std или Сишные потоки и многое многое другое, не надо разбираться с проблемами при генерации исключений... Постоянно натыкаешьяся на мысль что ты не знаешь языка — что то совершенно не очевидно и не до конца понятно, а зачем мне разбираться пол жизни с языком когда передо мной стоят более прозаичные проблемы — решить конкретную прикладную задачу. Зачем эти горы спекулятивных книг типа Александреску, написанных с одной целью — показать что я могу так извернуться, что вы нихрена не ппоёмёте Зачем это всё ?! Переносимости у С++ нет до сих пор — элементарно даже исходники не затачиваются под конкретный компилятор, про объектные модули я даже не заикаюсь... Зачем проблемы на пустом месте ? Если я захочу низкоуровневый интерфейс то возьму С, в котором несколько простых ивполне очевидных правил и сделаю всё что я захочу — в том числе никто и не мешает писать в ООП стиле... Если я захочу красивого ООП и высооуровневых конструкций то возьму C#, Java или VB... Где место С++ если исходить из банального прогматизма а показать как круто ты можешь кодировать что никто не разберётся в твоих извращённых конструкциях ?
ЗЫ Это так, о наболевшем Сам пишу на С++ в основном, хотя переползаю на С# и С
Только что была проблема: перменной типа system.intptr присвоить 1, что VB.NET делать не хотел
пришлось ковырять MSDN и находить конвертор, который intellisens'ом не показывается.
>конкретную прикладную задачу. Зачем эти горы спекулятивных книг типа Александреску, написанных с одной целью — показать что я могу так >извернуться, что вы нихрена не ппоёмёте Зачем это всё ?! Переносимости у С++ нет до сих пор — элементарно даже исходники не
эти "шаблонные извращения" имеют одну весьма прагматичную цель — увеличить степень повторного использования кода,
и избавиться от плохой практики копи-паст программирования (неизбежной в других языках где шаблонов нет)
Здравствуйте, d Bratik, Вы писали:
DB>Привет, товарищ по несчастью.
DB>Вся кривизна С++ вылезает, когда пишется система с GUI. Правильно Вирт говорит — "дом, построенный на песке".
А кто говорил, что С++ — это просто? Да, его тяжело выучить, приходится ДУМАТЬ, прогая на нём.
Устоявшееся мнение "программер с пивом" никак не относится к программистам на С++
Лично я способен стерпеть от С++ любые недоделки и сложность ради изящности, с которой решается кажущаяся неразрешимой проблема, стоит лишь подумать...
Здравствуйте, Аноним, Вы писали:
А>Давно уже пишу на С++, и чем больше работаю с этим языком, чем вернее убеждаюсь, что этот язык — большпя спекуляция... Для решения конкретных практических проблем этот язык слишком перегружен и непоследователен. Берём Java, С#, тот же VB горячо любимый — изучаешь за пару недель и спокойно пользуешься. Не надо каждый месяц убеждаться, что что-то ты не знаешь, нету геморроя с перегрузкой, правилами инстанциирования шаблонов, мучительным выбором что имеено использовать — потоки std или Сишные потоки и многое многое другое, не надо разбираться с проблемами при генерации исключений... Постоянно натыкаешьяся на мысль что ты не знаешь языка — что то совершенно не очевидно и не до конца понятно, а зачем мне разбираться пол жизни с языком когда передо мной стоят более прозаичные проблемы — решить конкретную прикладную задачу. Зачем эти горы спекулятивных книг типа Александреску, написанных с одной целью — показать что я могу так извернуться, что вы нихрена не ппоёмёте :))) Зачем это всё ?! Переносимости у С++ нет до сих пор — элементарно даже исходники не затачиваются под конкретный компилятор, про объектные модули я даже не заикаюсь... Зачем проблемы на пустом месте ? Если я захочу низкоуровневый интерфейс то возьму С, в котором несколько простых ивполне очевидных правил и сделаю всё что я захочу — в том числе никто и не мешает писать в ООП стиле... Если я захочу красивого ООП и высооуровневых конструкций то возьму C#, Java или VB... Где место С++ если исходить из банального прогматизма а показать как круто ты можешь кодировать что никто не разберётся в твоих извращённых конструкциях ?
А>ЗЫ Это так, о наболевшем :) Сам пишу на С++ в основном, хотя переползаю на С# и С ;)
Кто ж его любит ...
С C++ как с Microsoft или как с проституткой (кому как удобнее):
никто не любит, но многие используют.
Давайте я аргументирую свою точку зрения, почему С++ — язык достаточно "кривой", и почему для очень широкого круга задач лучше использовать другие языки.
Итак, я последнюю неделю на работе программировал систему подготовки 3D моделей для проекта Trans-Force ( www.trans-force.com ). На С++ я программирую год. За неделю я потратил свое время впустую на следующие вещи:
1) Функции Maya API пишут свои сообщения в std::cout и std::cerr. Мне потребовалось перехватить их. Чтобы понять, как это сделать, учитывая то, что разные версии Maya используют разные версии run-time, потребовалось около 6 часов.
2) 1,5 часа ушло на поиск ошибки
#pragma pack ( push, 1 )
#pragma pack ( pop, 1 )
3) 1 час ушел на то, чтобы понять, что у меня в двух разных C++-модулях имеются различные структуры с одинаковым именем.
4) 2 часа ушло на поиски утечек COM-интерфейсов.
Уже получилось больше рабочего дня.
Также мне пришлось потратить дополнительное время на обертки над интерфейсами экспортируемых функций из dll, потому что меня огранивает невозможность передать из dll-и в dll типов, которые перераспределяют память.
А сколько лишнего времени у меня ушло на создание GUI на WTL — слов нет (по сравнению с Windows Forms). MFC нельзя использовать, потому что некоторая программа, которая будет использовать мои dll, тоже использует MFC, но с другим run-time.
Учитывая то, что я программирую на работе не 8 часов в день, а меньше, то "кривизна" C++ или моих рук мне обошлась где-то в половину рабочего времени.
Если бы все компоненты, с которыми мне пришлось иметь дело, были написаны например на C#, моя производительность была бы существенно выше.
Здравствуйте, Аноним, Вы писали:
А>Давно уже пишу на С++, и чем больше работаю с этим языком, чем вернее убеждаюсь, что этот язык — большпя спекуляция... Для решения конкретных практических проблем этот язык слишком перегружен и непоследователен. Берём Java, С#, тот же VB горячо любимый — изучаешь за пару недель и спокойно пользуешься. Не надо каждый месяц убеждаться, что что-то ты не знаешь, нету геморроя с перегрузкой, правилами инстанциирования шаблонов, мучительным
А>ЗЫ Это так, о наболевшем Сам пишу на С++ в основном, хотя переползаю на С# и С
А мне даже очень нравится каждый день познавать в С++ что-то новое, хотя пишу на нем уже более 3-х лет
На С# вообще не хочу переходить. Когда писал на нем проект — получил массу НЕудовольствия. Да, некоторые моменты быстрее, но кафйа от программирования никакого.
С++ форевер! Хотя мне кажется эта тема уже неплохо объезжена на рсдн.
Здравствуйте, Аноним, Вы писали:
А> Для решения конкретных практических проблем этот язык слишком перегружен и непоследователен. Берём Java, С#, тот же VB горячо любимый — изучаешь за пару недель и спокойно пользуешься.
Твой выбор — Оберон, одназначна
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, d Bratik, Вы писали:
DB>Здравствуйте, BioUnit, Вы писали:
BU>>А что значит "система с GUI"?
DB>Например, Visual Studio.
Visual Studio — это "полный набор инструментов для создания как настольных прикладных систем, так и корпоративных веб-приложений". Что-то слова "система" я тут не встретил.
DB>Когда делаешь GUI на C++ очень быстро проявляется весь букет "венерических заболеваний" этого языка. Модульность, расширяемость, простота — становятся недостижимыми качествами системы.
Да? Я занимаюсь разработкой уже порядочное время и что-то "букета" такого не встречал. Трудности, конечно есть, но они как-то не совсем зависят от языка. А про модульность и т.п., может просто маловато практики в анализе и дизайне? Вот только язык тут не при чем.
BU>>И ещё, приводи примеры кривизны и как она вылезает, только не такой бред, который ты запостил в другой ветке. Желательно ещё и с примерами на других менее кривых по-твоему языках. BU>>Думаю, видя конкретные примеры, можно будет показать, что это не кривизна С++ вылезает, а чего-то другого.
DB>Например, при создании GUI просто жизненно необходима такая абстракция, как указатель на метод объекта (делегаты), подобный тому, что есть в .NET, в Delphi и в C++Builder. Как организовать это в С++? Почему в нем указатели на методы сделаны так глупо?
Реализаций делегатов можно привести множество, загляни хотя бы в Boost.
Хотя честно говоря, я не вижу в этом "жизненной необходимости".
Опять же нет конкретных примеров кривизны.
Кроме того тебе не кажется странным отделять C++Builder и C++ ? Ты считаешь, что это разные языки?
В этом случае ты наивно ошибаешься, т.к. одно из них вообще языком не является, так же как .NET и Delphi...
Исходя из этого могу предположить, что твоя компетенция просто не позволяет тебе реально судить о С++, как о языке программирования, если ты сравниваешь его со средами разработки. Это все равно, что судить о русском языке по песням группы "Фабрика".
Re[2]: Почему я не люблю C++
От:
Аноним
Дата:
27.01.05 07:39
Оценка:
Здравствуйте, Myk, Вы писали:
Myk>Здравствуйте, Аноним, Вы писали:
А>>Давно уже пишу на С++, и чем больше работаю с этим языком, чем вернее убеждаюсь, что этот язык — большпя спекуляция... Для решения конкретных практических проблем этот язык слишком перегружен и непоследователен. Берём Java, С#, тот же VB горячо любимый — изучаешь за пару недель и спокойно пользуешься. Не надо каждый месяц убеждаться, что что-то ты не знаешь, нету геморроя с перегрузкой, правилами инстанциирования шаблонов, мучительным
А>>ЗЫ Это так, о наболевшем Сам пишу на С++ в основном, хотя переползаю на С# и С
Myk>А мне даже очень нравится каждый день познавать в С++ что-то новое, хотя пишу на нем уже более 3-х лет
Если программирование ради программирование то С++ — то что надо — единственное наверное в своём жанре, но для решения конкретнх прикладных задач когда хочется получить результат не в виде просто красивого или изощрённого кода, а кокретных расчётов или работающей программы — я выбираю то что понятнее и проще
Здравствуйте, Аноним, Вы писали:
А>Если я захочу красивого ООП и высооуровневых конструкций то возьму C#, Java или VB...
Что касается Java: в последней версии этот язык сильно усложнился (в основном из-за
кривых generic'ов, как и в С++ появились конструкции которые "без бутылки" не поймешь).
IMHO java спецификация все распухает и распухает, скоро превратится в еще
один C++ (С++ 21 века )
Здравствуйте, Аноним, Вы писали:
А>Если программирование ради программирование то С++ — то что надо — единственное наверное в своём жанре, но для решения конкретнх прикладных задач когда хочется получить результат не в виде просто красивого или изощрённого кода, а кокретных расчётов или работающей программы — я выбираю то что понятнее и проще
Есть обратный опыт. Чем сложнее алгоритм, тем больше выигрыш в удобочитаемости, времени разработки и т.п. Для меня это самый лаконичный и понятный язык.
На "линейных" задачах (типа копать от забота и до обеда) конечно лучше VB и ему подобные макроязыки. Но в более сложных ситуациях рулят плюсы, однозначно. Там, где "другие не могут".
...А отсюда наливаем, когда рецепт написан совсем неразборчиво...
Вот-вот. С++ — это круто. Исключения, шаблоны, классы, ООП — здорово. Вот только при взаимодействии между dll-ями C++ превращается в самый что ни на есть обычный С. И вообще, при разбиении достаточно большого проекта на независимые части на "стыке" этих частей IМНО нет места шаблонам, исключениям, классам, выделяющим память с помощью malloc/new и т.д.
Ну и наконец. Кто за какое время сможет без компилятора найти ошибку:
Здравствуйте, Dirichlet, Вы писали:
D>Ну и наконец. Кто за какое время сможет без компилятора найти ошибку:
Хороший пример плохого кода с точки зрения naming conventions. Я бы не стал указатель на строку обзывать тем же именем, что и метод стринга.
Могу привести другой пример из модной ныне жабы. Попробуй без компилятора догадаться, что будет напечатано на экране.
public class A
{
private static Random rnd = new Random();
public static void main(String[] args) {
StringBuffer word = null;
switch(rnd.nextInt(2)) {
case 1: word = new StringBuffer('P');
case 2: word = new StringBuffer('G');
default: word = new StringBuffer('M');
}
word.append('a');
word.append('i');
word.append('n');
System.out.println(word);
}
}
Почему добро всегда побеждает зло? Потому что историю пишут победители.
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, Аноним, Вы писали:
А>> Для решения конкретных практических проблем этот язык слишком перегружен и непоследователен. Берём Java, С#, тот же VB горячо любимый — изучаешь за пару недель и спокойно пользуешься.
AJD>Твой выбор — Оберон, одназначна
Здравствуйте, Dirichlet, Вы писали:
D>Вот-вот. С++ — это круто. Исключения, шаблоны, классы, ООП — здорово. Вот только при взаимодействии между dll-ями C++ превращается в самый что ни на есть обычный С. И вообще, при разбиении достаточно большого проекта на независимые части на "стыке" этих частей IМНО нет места шаблонам, исключениям, классам, выделяющим память с помощью malloc/new и т.д.
mfc42.dll
D>Ну и наконец. Кто за какое время сможет без компилятора найти ошибку:
D>
Здравствуйте, d Bratik, Вы писали:
DB>Привет, товарищ по несчастью.
DB>Вся кривизна С++ вылезает, когда пишется система с GUI. Правильно Вирт говорит — "дом, построенный на песке".
Ну вот хоть кто-то Вирта помянул. Устроился недавно на работу в контору, которая пишет здоровую ИС на С++. Поймал себя на мысли что я думаю не о реализации нужной логики, а о том как мне извернутьсяи что все эти скобочки и звездочки означают
Здравствуйте, d Bratik, Вы писали:
DB>Привет, товарищ по несчастью.
DB>Вся кривизна С++ вылезает, когда пишется система с GUI. Правильно Вирт говорит — "дом, построенный на песке".
А что значит "система с GUI"?
И чем GUI так отличается от других областей применения?
И ещё, приводи примеры кривизны и как она вылезает, только не такой бред, который ты запостил в другой ветке. Желательно ещё и с примерами на других менее кривых по-твоему языках.
Думаю, видя конкретные примеры, можно будет показать, что это не кривизна С++ вылезает, а чего-то другого.
Здравствуйте, Михаил, Вы писали:
М>Здравствуйте, Аноним, Вы писали:
А>>Если программирование ради программирование то С++ — то что надо — единственное наверное в своём жанре, но для решения конкретнх прикладных задач когда хочется получить результат не в виде просто красивого или изощрённого кода, а кокретных расчётов или работающей программы — я выбираю то что понятнее и проще
М>Есть обратный опыт. Чем сложнее алгоритм, тем больше выигрыш в удобочитаемости, времени разработки и т.п. Для меня это самый лаконичный и понятный язык. М>На "линейных" задачах (типа копать от забота и до обеда) конечно лучше VB и ему подобные макроязыки. Но в более сложных ситуациях рулят плюсы, однозначно. Там, где "другие не могут".
Для того, что бы нарезать колбасы необязательно доставать все лезвия швецарского ножа, но и необязательно таскать с собой обычный кухонный нож.
Надеюсь, метафора понятна?
Здравствуйте, Amethyst, Вы писали:
A>Здравствуйте, Dirichlet, Вы писали:
D>>Ну и наконец. Кто за какое время сможет без компилятора найти ошибку: A>Хороший пример плохого кода с точки зрения naming conventions. Я бы не стал указатель на строку обзывать тем же именем, что и метод стринга. A>Могу привести другой пример из модной ныне жабы. Попробуй без компилятора догадаться, что будет напечатано на экране.
A>
A>public class A
A>{
A> private static Random rnd = new Random();
A> public static void main(String[] args) {
A> StringBuffer word = null;
A> switch(rnd.nextInt(2)) {
A> case 1: word = new StringBuffer('P');
A> case 2: word = new StringBuffer('G');
A> default: word = new StringBuffer('M');
A> }
A> word.append('a');
A> word.append('i');
A> word.append('n');
A> System.out.println(word);
A> }
A>}
A>
Здравствуйте, BioUnit, Вы писали:
BU>А что значит "система с GUI"?
Например, Visual Studio.
BU>И чем GUI так отличается от других областей применения?
Когда делаешь GUI на C++ очень быстро проявляется весь букет "венерических заболеваний" этого языка. Модульность, расширяемость, простота — становятся недостижимыми качествами системы.
BU>И ещё, приводи примеры кривизны и как она вылезает, только не такой бред, который ты запостил в другой ветке. Желательно ещё и с примерами на других менее кривых по-твоему языках. BU>Думаю, видя конкретные примеры, можно будет показать, что это не кривизна С++ вылезает, а чего-то другого.
Например, при создании GUI просто жизненно необходима такая абстракция, как указатель на метод объекта (делегаты), подобный тому, что есть в .NET, в Delphi и в C++Builder. Как организовать это в С++? Почему в нем указатели на методы сделаны так глупо?
d Bratik пишет:
> BU>А что значит "система с GUI"? > Например, Visual Studio.
Написана на С++...
> BU>И чем GUI так отличается от других областей применения? > Когда делаешь GUI на C++ очень быстро проявляется весь букет > "венерических заболеваний" этого языка. Модульность, расширяемость, > простота — становятся недостижимыми качествами системы.
Да. У меня, например, сейчас как раз пишется модульная, расширяемая (но
не простая, естественно) система с GUI. С встроенной поддержкой VBA. На С++.
> BU>И ещё, приводи примеры кривизны и как она вылезает, только не такой > бред, который ты запостил в другой ветке. Желательно ещё и с примерами > на других менее кривых по-твоему языках. > BU>Думаю, видя конкретные примеры, можно будет показать, что это не > кривизна С++ вылезает, а чего-то другого. > Например, при создании GUI просто жизненно необходима такая > абстракция, как указатель на метод объекта (делегаты)
С каких пор она стала жизненно необходима?
> подобный тому, что есть в .NET, в Delphi и в C++Builder. Как > организовать это в С++?
Dirichlet пишет:
> Давайте я аргументирую свою точку зрения, почему С++ — язык достаточно > "кривой", и почему для очень широкого круга задач лучше использовать > другие языки. > [большой skip]
Можно вопрос? А где здесь хоть один недостаток _ЯЗЫКА_ С++, а не
сторонних библиотек?
> Если бы все компоненты, с которыми мне пришлось иметь дело, были > написаны например на C#, моя производительность была бы существенно выше.
С хорошими библиотеками на С++ она тоже была бы выше...
C>Можно вопрос? А где здесь хоть один недостаток _ЯЗЫКА_ С++, а не C>сторонних библиотек?
C>С хорошими библиотеками на С++ она тоже была бы выше...
Я программирую на С++. Передо мной стоят вполне конкретные задачи. Я программирую не на абстрактном С++, а на вполне конкретном компиляторе. Я вынужден использовать библиотеки, написанные на С++.
Для меня нет разницы, недостатки это языка, библиотек или компилятора. После того как выбран язык программирования С++, мы выбираем лучший для наших целей компилятор и лучшие для наших целей библиотеки. Если мы сталкиваемся с проблемами, то значит наш первоначальный выбор языка был неверен.
Dirichlet пишет:
> C>Можно вопрос? А где здесь хоть один недостаток _ЯЗЫКА_ С++, а не > C>сторонних библиотек? > C>С хорошими библиотеками на С++ она тоже была бы выше... > Я программирую на С++. Передо мной стоят вполне конкретные задачи. Я > программирую не на абстрактном С++, а на вполне конкретном > компиляторе. Я вынужден использовать библиотеки, написанные на С++.
Ну вот и надо говорить: "Библиотека xxx на для компилятора yyy — полный
АЦТОЙ!".
> Для меня нет разницы, недостатки это языка, библиотек или компилятора.
Твои проблемы.... А разница есть.
> После того как выбран язык программирования С++, мы выбираем лучший > для наших целей компилятор и лучшие для наших целей библиотеки.
А как вы узнаете, что эти библиотеки и компилятор — лучшие?
> Если мы сталкиваемся с проблемами, то значит наш первоначальный выбор > языка был неверен.
Ага, а С# магически разрешает сразу все проблемы. И все библиотеки для
C# тоже абсолютно всегда правильны, безглючны и совместимы со всем
остальным еще не написанным софтом...
Здравствуйте, Cyberax, Вы писали:
>> Для меня нет разницы, недостатки это языка, библиотек или компилятора. C>Твои проблемы.... А разница есть.
Меня интересует конечный результат. А именно набор программ, помогающий нам эффективно работать с моделями. Какая разница, что мне мешает быстрее добиться результата — язык, библиотеки или компилятор?
>> После того как выбран язык программирования С++, мы выбираем лучший >> для наших целей компилятор и лучшие для наших целей библиотеки. C>А как вы узнаете, что эти библиотеки и компилятор — лучшие?
В компании, где я работаю, есть много достаточно квалифицированных людей, чтобы осознанно сделать выбор.
C>Ага, а С# магически разрешает сразу все проблемы. И все библиотеки для C>C# тоже абсолютно всегда правильны, безглючны и совместимы со всем C>остальным еще не написанным софтом...
В отделе, где я работаю, есть опыт разработки отдельных компонент на С#. Поэтому я могу сравнивать.
Если интересует вопрос, почему же я не программирую на С#, то потому, что стоимость перевода моих компонент на С# достаточно высокая.
Дело в том, что код, который будет писаться другими людьми и будет взаимодействовать с моим кодом, тоже должен будет писаться на C#. А такого количества знающих C# людей у нас в отделе пока нет.
Dirichlet пишет:
>>> Для меня нет разницы, недостатки это языка, библиотек или компилятора. > C>Твои проблемы.... А разница есть. > Меня интересует конечный результат. А именно набор программ, > помогающий нам эффективно работать с моделями. Какая разница, что мне > мешает быстрее добиться результата — язык, библиотеки или компилятор?
Большая. То что тебе мешают определенные глюки библиотек — твои личные
проблемы, и обсуждать их надо с разработчиками либ или
специализированных форумах.
А вот недостатки языка программирования влияют на всех.
>>> После того как выбран язык программирования С++, мы выбираем лучший >>> для наших целей компилятор и лучшие для наших целей библиотеки. > C>А как вы узнаете, что эти библиотеки и компилятор — лучшие? > В компании, где я работаю, есть много достаточно квалифицированных > людей, чтобы осознанно сделать выбор.
А есть из чего выбирать?
> C>Ага, а С# магически разрешает сразу все проблемы. И все библиотеки для > C>C# тоже абсолютно всегда правильны, безглючны и совместимы со всем > C>остальным еще не написанным софтом... > В отделе, где я работаю, есть опыт разработки отдельных компонент на > С#. Поэтому я могу сравнивать.
Работающие с теми же программами, и выполняющие ту же работу?
> Если интересует вопрос, почему же я не программирую на С#, то потому, > что стоимость перевода моих компонент на С# достаточно высокая. > Дело в том, что код, который будет писаться другими людьми и будет > взаимодействовать с моим кодом, тоже должен будет писаться на C#. А > такого количества знающих C# людей у нас в отделе пока нет.
И что, люди знающие С++ не могут без проблем перейти на C#? Странно.
Здравствуйте, csvb, Вы писали:
C>Кто ж его любит ... C>С C++ как с Microsoft или как с проституткой (кому как удобнее): C>никто не любит, но многие используют.
Здравствуйте, Dirichlet, Вы писали:
>>> Для меня нет разницы, недостатки это языка, библиотек или компилятора. C>>Твои проблемы.... А разница есть.
D>Меня интересует конечный результат. А именно набор программ, помогающий нам эффективно работать с моделями. Какая разница, что мне мешает быстрее добиться результата — язык, библиотеки или компилятор?
Да вся разница как раз в том, что Вы не чувствуете разницы...