Вопрос начинающего программиста на С++
От: RSDNer Россия http://itsoyuz.h10.ru/
Дата: 09.08.02 10:54
Оценка:
Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net). Последняя версия посовременнее будет, но, возможно, и посложнее. Посоветуйте. Заранее благодарен, спасибо.
Re: Вопрос начинающего программиста на С++
От: Yampolski_Nikita Россия http://nikitay.pisem.net
Дата: 09.08.02 10:58
Оценка: 1 (1)
Здравствуйте RSDNer, Вы писали:

RSDN>Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net). Последняя версия посовременнее будет, но, возможно, и посложнее. Посоветуйте. Заранее благодарен, спасибо.


C++ — Страуструп
_____________
Yampolski Nikita
Re: Вопрос начинающего программиста на С++
От: Mishka.NET Норвегия  
Дата: 09.08.02 11:02
Оценка: 1 (1) -5
Здравствуйте RSDNer, Вы писали:

RSDN>Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net). Последняя версия посовременнее будет, но, возможно, и посложнее. Посоветуйте. Заранее благодарен, спасибо.


Изучай С#. Позно уже за С++ браться. Ну уж если очень хочется, то берём Страуструпа, Мейерса, Александреску и пр.
Re: Вопрос начинающего программиста на С++
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.08.02 11:13
Оценка: 10 (1)
Здравствуйте RSDNer, Вы писали:

RSDN>Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net).


ИМХО, вопрос так стоять не может. Правильнее будет так —

Господа! Нужно написать справочник абонентов (драйвер к железяке, игрушку-стрелялку, бухгалтерию и т.д., не нужное вычеркнуть, нужное добавить) на чем это лучше сделать? Использовать .Net или хватит и VC6?
Re: Вопрос начинающего программиста на С++
От: Михаил Фирулин  
Дата: 09.08.02 11:15
Оценка:
Здравствуйте RSDNer, Вы писали:

RSDN>Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net). Последняя версия посовременнее будет, но, возможно, и посложнее. Посоветуйте. Заранее благодарен, спасибо.


А что вы уже знаете? Если вы новичок, то (совет студента)) начните с Кернигана и Ритчи "Язык программирования С", замечательная книга с остроумнейшими примерами и дельными заданиями для самост. работы. Потом можно уже браться за Страуструпа "Я. пр. С++", начинать с него тяжеловато. Хвататься за С# новичку имхо не стоит, нужна классическая база. Или я ошибся на ващ счет и вы дока в Паскале? Тогда извиняюсь).
Re[2]: Вопрос начинающего программиста на С++
От: Dr_Sh0ck Беларусь  
Дата: 10.08.02 08:14
Оценка:
Здравствуйте Mishka.NET, Вы писали:

[skipped]

M.NET>Изучай С#. Позно уже за С++ браться. Ну уж если очень хочется, то берём Страуструпа, Мейерса, Александреску и пр.


А последний, интересно, в переводе есть (а то за english-версию такие бабки... )
Do not fake yourself ;)
ICQ#: 198114726
Re: Начинай с C++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 13.08.02 12:28
Оценка: 29 (3) +2
Здравствуйте RSDNer, Вы писали:

RSDN>Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net). Последняя версия посовременнее будет, но, возможно, и посложнее. Посоветуйте. Заранее благодарен, спасибо.


Если в смысле изучения, то начинай с C++ (я думаю, что лучше с .Net, поскольку народ утверждает, что VС7 поближе к стандарту, чем VС6, а сам я ещё с семёркой не работал). Что C#, что Java — попытки кастрации C++ под нужды менеджеров, которые никак не могли разобраться с таким сложным языком. (Ладно, это уж я со зла , хотя и небезосновательно) Поймешь C++ — с остальными C++ — подобными языками проблем будет намного меньше. А если начнёшь с кастрированного объектного языка, то заморочаешься потом.

Во как
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Начинай с C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.08.02 17:33
Оценка: 11 (1) -7
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Если в смысле изучения, то начинай с C++ (я думаю, что лучше с .Net, поскольку народ утверждает, что VС7 поближе к стандарту, чем VС6, а сам я ещё с семёркой не работал). Что C#, что Java — попытки кастрации C++ под нужды менеджеров, которые никак не могли разобраться с таким сложным языком. (Ладно, это уж я со зла , хотя и небезосновательно) Поймешь C++ — с остальными C++ — подобными языками проблем будет намного меньше. А если начнёшь с кастрированного объектного языка, то заморочаешься потом.


Я думаю что при первом же достаточно крупном проекте ты поймешь что не все ладно в королевстве датском, т.е. С++. Гемороя и нелогичности в нем более чем достаточно. Так что таки C# или Java для современного новичка получше будут, если конечно он потом чем то низкоуровневым заниматься не собирается.
AVK Blog
Re[3]: Начинай с C++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 16.08.02 23:28
Оценка: 10 (1) +3
Здравствуйте AndrewVK, Вы писали:

AVK>Здравствуйте Геннадий Васильев, Вы писали:


ГВ>>Если в смысле изучения, то начинай с C++ (я думаю, что лучше с .Net, поскольку народ утверждает, что VС7 поближе к стандарту, чем VС6, а сам я ещё с семёркой не работал). Что C#, что Java — попытки кастрации C++ под нужды менеджеров, которые никак не могли разобраться с таким сложным языком. (Ладно, это уж я со зла :), хотя и небезосновательно) Поймешь C++ — с остальными C++ — подобными языками проблем будет намного меньше. А если начнёшь с кастрированного объектного языка, то заморочаешься потом.


AVK>Я думаю что при первом же достаточно крупном проекте ты поймешь что не все ладно в королевстве датском, т.е. С++. Гемороя и нелогичности в нем более чем достаточно. Так что таки C# или Java для современного новичка получше будут, если конечно он потом чем то низкоуровневым заниматься не собирается.


Чаще, правда, это нелогичность программистов при употреблении C++. (ИМХО ;) ) Концептуально язык весьма логичен. Просто, мне кажется, что начав с Java-like языков новичку труднее будет перешагнуть определённый психологический порог в развитии способности выделять сущности и концепции (как устойчивые совокупности требований), и уверенно выражать их на языке программирования. Я полагаю, что для таких целей C++ содержит больше выразительных средств, чем Java. Соглашусь, что сложностей и тонких мест у него навалом, но лучше уж наличие возможности, пусть и "труднопостижимой", чем её отсутствие.

Также не согласен с доводом, что C++ — это язык для низкоуровневых систем. C++ — язык для сложных и больших программ, а не только низкоровневых. Или зачем там так развиты средства комбинирования абстракций? Так что, думаю, что если современный новичок и не столкнётся с C++, то только в том случае, если никогда не будет заниматься сложными программами.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Начинай с C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.02 09:47
Оценка:
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Чаще, правда, это нелогичность программистов при употреблении C++. (ИМХО ) Концептуально язык весьма логичен.

В чем логика отсутствия нормальных property или event? Почему это сложно ввести в состав языка? В чем логика отсутствия нормального рефлекшена?

ГВ> Просто, мне кажется, что начав с Java-like языков новичку труднее будет перешагнуть определённый психологический порог в развитии способности выделять сущности и концепции (как устойчивые совокупности требований), и уверенно выражать их на языке программирования.

Как раз реализация определенных концепций на таких языках оказывается зачастую более понятной, простой и красивой. Сравни к примеру COM и объекты дотнета или джавы.


ГВ> Я полагаю, что для таких целей C++ содержит больше выразительных средств, чем Java.

Например?

ГВ>Также не согласен с доводом, что C++ — это язык для низкоуровневых систем. C++ — язык для сложных и больших программ, а не только низкоровневых.

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

ГВ> Или зачем там так развиты средства комбинирования абстракций? Так что, думаю, что если современный новичок и не столкнётся с C++, то только в том случае, если никогда не будет заниматься сложными программами.

Чтобы создавать большие проекты на С++ нужно быть совсем не новичком.
AVK Blog
Re[4]: Начинай с C++
От: achp  
Дата: 17.08.02 11:00
Оценка: +1
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Также не согласен с доводом, что C++ — это язык для низкоуровневых систем. C++ — язык для сложных и больших программ, а не только низкоровневых. Или зачем там так развиты средства комбинирования абстракций? Так что, думаю, что если современный новичок и не столкнётся с C++, то только в том случае, если никогда не будет заниматься сложными программами.


Не бывает языков для систем, бывают языки для слоев!
Re[5]: Начинай с C++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.08.02 16:36
Оценка: 56 (8) +1 -1
Здравствуйте AndrewVK, Вы писали:

AVK>Здравствуйте Геннадий Васильев, Вы писали:


ГВ>>Чаще, правда, это нелогичность программистов при употреблении C++. (ИМХО ;) ) Концептуально язык весьма логичен.

AVK>В чем логика отсутствия нормальных property или event? Почему это сложно ввести в состав языка? В чем логика отсутствия нормального рефлекшена?

Сразу вопрос. Что такое нормальные property и event? Какая реализация, например, событий, была бы "логичной"? Каким, например, должен быть механизм передачи событий? Должен ли он предусматривать межпроцессную передачу данных? Должна ли принимающая сторона уметь идентифицировать отправителя события? Должна ли создаваться очередь событий? Варианты ответов на эти вопросы прекрасно можно оформить библиотеками классов на C++! Зачем навязывать самим себе "единственно правильную" модель реализации?

Для C# и Java эти вопросы решались исходя из целей этих языков. C# — поддержание амбиций Microsoft (т.е., внедрение поддержки модели COM), а Java... кстати, в Java event-ов и property на уровне языка нет! Есть библиотеки!

ГВ>> Просто, мне кажется, что начав с Java-like языков новичку труднее будет перешагнуть определённый психологический порог в развитии способности выделять сущности и концепции (как устойчивые совокупности требований), и уверенно выражать их на языке программирования.

AVK>Как раз реализация определенных концепций на таких языках оказывается зачастую более понятной, простой и красивой. Сравни к примеру COM и объекты дотнета или джавы.

Ну, во-первых. Сравнивать COM (в сущности — способ структурирования коммуникаций) с моделью объектов в языках реализации не совсем корректно.

Реализация COM для C++ в Miscrosoft-овском варианте обладает теми же чертами, что и плоский API на C с небольшими вкраплениями объектного подхода. То есть — можно было бы и лучше. Потом, не надо забывать о том, что, действительно, по сравнению с C++ (что, впрочем, ИМХО, справедливо для любого языка общего назначения) языки специального назначения обладают преимуществами в специальных областях. Ну, например, VBS или Perl лучше подходят для скриптования идиотской модели объектов ClearQuest, нежели C++, хотя и там время от времени приходится использовать его.

Здесь я имею в виду то, что если Java создана для решения проблемы переносимости (решается виртуально) и популяризации Sun, а C# + CLR — как противовес Java в той же области, то, естественно, они в этом смысле обладают преимуществами перед C++. Тогда как C++ создан для упрощения решения проблем программирования. Что называется — почувствуйте разницу ;)

И здесь я действительно согласен с тем, что на C# проще реализовать что-то на базе модели COM. Но, ёлки-палки, COM — это не способ построения абстракций уровня реализации, он слишком ограничен для этого!
:crash:

ГВ>> Я полагаю, что для таких целей C++ содержит больше выразительных средств, чем Java.

AVK>Например?

Итак, цели: выделение абстракций и их комбинирование.
Чего нет в Java: а) множественное наследование; б) шаблоны; в) инлайнирование (как инструмент совмещения структурированных абстракций и эффективности исполнения).

Предлагать назвать что-то, имеющееся в Java, что нельзя сделать в C++ — было бы подставой тебя с моей стороны, поскольку ничего такого нет, за исключением возможности переноса байт-кода.

ГВ>>Также не согласен с доводом, что C++ — это язык для низкоуровневых систем. C++ — язык для сложных и больших программ, а не только низкоровневых.

AVK>Вот как раз для сложных и болшьших программ С++ подходит хуже нежели шарп и джава.

Абсолютно не согласен. Вопрос в том — что именно называть большой и сложной программой. Собственно, к чему я клоню: если под "большой системой" понимать систему состоящую из большого количества наивно реализованных элементов (то есть, по минимуму использующих общесистемные абстракции), то — да: Java, C#, VBS, xxxScript. Соответственно, потери на сопровождение такой системы — экспонента от количества её "возможностей", которыми часто называются функциональные точки (экраны, отчёты и пр.). Мне, например, приходилось сталкиваться с "большими и сложными" биллинговыми программами, написанными на SQL+VB, где основная сложность — поддержание адекватности структуры отчётов структуре БД, что суть прямое нарушение принципа абстракции пользовательского интерфейса (отчётов) от деталей реализации (структуры БД). Так основное время команды уходило на вот это самое бестолкове сопровождение.

Прикол как раз в том, что когда работаешь со скриптовыми языками, часто даже не задаёшь себе тех вопросов, которые не боишься ставить, используя C++. А C# и Java я как раз и считаю разновидностью скриптовых языков, посольку ИМХО они апеллируют к реализации каких-то элементов системы на других языках.

К примеру, именно отсутствие в Java (и в C#) шаблонов и приведёт либо к разбуханию большой и сложной программы, либо к снижению эффективности её работы, за счёт необходимости run-time-приведения типов (виртуальные функции). Не считая уже того, что в Java невозможно будет перенести на транслятор такую же часть контроля корректности программирования, как и в C++. Т.е., Java-программы будет сложнее сопровождать, если конечно, не требовать от пользователя поставить 4-х процессорный сервер P4-2200 под 10-пользовательскую CRM. ;)

ГВ>> Или зачем там так развиты средства комбинирования абстракций? Так что, думаю, что если современный новичок и не столкнётся с C++, то только в том случае, если никогда не будет заниматься сложными программами.

AVK>Чтобы создавать большие проекты на С++ нужно быть совсем не новичком.

Хммм... Просто голову не надо забивать "быстрым р-р-результатом" :maniac: и читать соответствующую литературу, тогда и не будет проблем с построением абстракций. И, кстати, результатов получается больше и в целом — быстрее, если учесть необходимое сопровождение. Впрочем, соглашусь, что какой-никакой опыт "шишек" необходим.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[5]: Начинай с C++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.08.02 16:40
Оценка:
Здравствуйте achp, Вы писали:

A>Здравствуйте Геннадий Васильев, Вы писали:


ГВ>>Также не согласен с доводом, что C++ — это язык для низкоуровневых систем. C++ — язык для сложных и больших программ, а не только низкоровневых. Или зачем там так развиты средства комбинирования абстракций? Так что, думаю, что если современный новичок и не столкнётся с C++, то только в том случае, если никогда не будет заниматься сложными программами.


A>Не бывает языков для систем, бывают языки для слоев!


А слой, по-твоему, не система? :no: Как раз-таки, большая и сложная система. ;)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: Начинай с C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.02 20:34
Оценка: 6 (1) -4
Здравствуйте Геннадий Васильев, Вы писали:

ГВ>Сразу вопрос. Что такое нормальные property и event? Какая реализация, например, событий, была бы "логичной"?

Такая как в шарпе.


ГВ>Каким, например, должен быть механизм передачи событий? Должен ли он предусматривать межпроцессную передачу данных? Должна ли принимающая сторона уметь идентифицировать отправителя события? Должна ли создаваться очередь событий? Варианты ответов на эти вопросы прекрасно можно оформить библиотеками классов на C++! Зачем навязывать самим себе "единственно правильную" модель реализации?

Во, начинается. Во многих современных языках события реализуются на уровне языка, а в С++ можно библиотеками. Можно конечно, но не удобно.

ГВ>Для C# и Java эти вопросы решались исходя из целей этих языков. C# — поддержание амбиций Microsoft (т.е., внедрение поддержки модели COM),

Гы.

ГВ>а Java... кстати, в Java event-ов и property на уровне языка нет! Есть библиотеки!

Я в курсе. Ничего хорошего в этом нет.

AVK>>Как раз реализация определенных концепций на таких языках оказывается зачастую более понятной, простой и красивой. Сравни к примеру COM и объекты дотнета или джавы.

ГВ>Ну, во-первых. Сравнивать COM (в сущности — способ структурирования коммуникаций)
COM это COM, т.е. компонентная модель. И не надо никаких лишних сущностей придумывать. Принцип бритвы Оккама помнишь?

ГВ> с моделью объектов в языках реализации не совсем корректно.

Очень даже корректно. Решаемые задачи абсолютно идентичны.

ГВ>Реализация COM для C++ в Miscrosoft-овском варианте обладает теми же чертами, что и плоский API на C с небольшими вкраплениями объектного подхода. То есть — можно было бы и лучше.

В рамках С++, при оставлении самого языка неизменным, вряд ли.

ГВ> Потом, не надо забывать о том, что, действительно, по сравнению с C++ (что, впрочем, ИМХО, справедливо для любого языка общего назначения) языки специального назначения обладают преимуществами в специальных областях. Ну, например, VBS или Perl лучше подходят для скриптования идиотской модели объектов ClearQuest, нежели C++, хотя и там время от времени приходится использовать его.


ГВ>Здесь я имею в виду то, что если Java создана для решения проблемы переносимости (решается виртуально) и популяризации Sun, а C# + CLR — как противовес Java в той же области,

Это твои домыслы. И джава и дотнет созданы как средства разработки приложений.

ГВ> то, естественно, они в этом смысле обладают преимуществами перед C++. Тогда как C++ создан для упрощения решения проблем программирования. Что называется — почувствуйте разницу ;)

Программировать на шарпе и джаве на порядок проще чем на плюсах. Так что ты попробуй для начала и почувствуй разницу. А разница действительно существенна. В отсутствие рефлекшена и получаются монстры вроде COM с его IUnknown,QueryInterface и IDispatch.

ГВ>И здесь я действительно согласен с тем, что на C# проще реализовать что-то на базе модели COM. Но, ёлки-палки, COM — это не способ построения абстракций уровня реализации, он слишком ограничен для этого!

Не, ты не понял. В шарпе COM оставлен только для совместимости. У него своя собственная объектная модель.

ГВ>Итак, цели: выделение абстракций и их комбинирование.

ГВ>Чего нет в Java: а) множественное наследование; б) шаблоны; в) инлайнирование (как инструмент совмещения структурированных абстракций и эффективности исполнения).
Тебе списочек того что нет в плюсах привести? Именно в плане абстрагирования. Тем паче что к собственно абстракциям имеет отношении только первый пункт. Остальные это только способ решить проблемы производительности путем усложнения модели. Виртуальные контейнеры понятнее и проще в использовании чем темплейты, единственный их недостаток это производительность. Что же касается инлайнирования, то, если верить VladD2, то VC при включении оптимизации на него просто кладет и сам решает где и что инлайнить.

ГВ>Предлагать назвать что-то, имеющееся в Java, что нельзя сделать в C++ — было бы подставой тебя с моей стороны, поскольку ничего такого нет, за исключением возможности переноса байт-кода.

Рефлекшен я уже приводил. Для дотнета это еще Reflection.Emit, CodeDOM. А самое главное — встроенная в язык компонентная модель. Для того чтобы подгружать на лету объекты не нужно воротить COM.

ГВ>Абсолютно не согласен.

Ну да — при разработке джавы и шарпа во главу угла ставилось прежде всего ускорение разработки и уменьшение количества ошибок. Оказывается и у Sun и у MS нифига не вышло, не удалось переплюнуть даже древний C++.

ГВ>Вопрос в том — что именно называть большой и сложной программой.

Большую и сложную программу. Например ERP.

ГВ>Прикол как раз в том, что когда работаешь со скриптовыми языками, часто даже не задаёшь себе тех вопросов, которые не боишься ставить, используя C++. А C# и Java я как раз и считаю разновидностью скриптовых языков, посольку ИМХО они апеллируют к реализации каких-то элементов системы на других языках.

Глупости это все. Скриптами обычно называют языки в которых невозможно конструировать новые типы(объекты).

ГВ>К примеру, именно отсутствие в Java (и в C#) шаблонов и приведёт либо к разбуханию большой и сложной программы, либо к снижению эффективности её работы, за счёт необходимости run-time-приведения типов (виртуальные функции). Не считая уже того, что в Java невозможно будет перенести на транслятор такую же часть контроля корректности программирования, как и в C++.

В джаве в разы больше контроля над рантаймом. И сопровождение джавовских программ в разы проще. В сях даже стек-трейса нет.

ГВ> Т.е., Java-программы будет сложнее сопровождать, если конечно, не требовать от пользователя поставить 4-х процессорный сервер P4-2200 под 10-пользовательскую CRM. ;)

Через пару лет такой сервер будет считаться минимальной и дешевой конфигурацией :)

AVK>>Чтобы создавать большие проекты на С++ нужно быть совсем не новичком.


ГВ>Хммм... Просто голову не надо забивать "быстрым р-р-результатом" :maniac: и читать соответствующую литературу, тогда и не будет проблем с построением абстракций. И, кстати, результатов получается больше и в целом — быстрее, если учесть необходимое сопровождение. Впрочем, соглашусь, что какой-никакой опыт "шишек" необходим.

Знаешь, мой опыт показывает обратное. При написании программ на плюсах или Дельфи ошибок получается в разы больше чем на джаве или дотнете, особенно если программеры только учаться.
Еще можешь посмотреть средний процент успешных проектов на джаве и плюсах, статистика общедоступна.
AVK Blog
Re[6]: Начинай с C++
От: IT Россия linq2db.com
Дата: 18.08.02 02:06
Оценка: 20 (2)
Здравствуйте Геннадий Васильев, Вы писали:

AVK>>В чем логика отсутствия нормальных property или event? Почему это сложно ввести в состав языка? В чем логика отсутствия нормального рефлекшена?


ГВ>Сразу вопрос. Что такое нормальные property и event? Какая реализация, например, событий, была бы "логичной"? Каким, например, должен быть механизм передачи событий? Должен ли он предусматривать межпроцессную передачу данных? Должна ли принимающая сторона уметь идентифицировать отправителя события? Должна ли создаваться очередь событий? Варианты ответов на эти вопросы прекрасно можно оформить библиотеками классов на C++! Зачем навязывать самим себе "единственно правильную" модель реализации?


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

Мне, кстати, тоже совершенно непонятно, и даже обидно, почему язык, на котором я программирую более 10 лет, остановился в своём развитии. Кто помнит, когда последний раз произошли существенные изменения в языке? Это были шаблоны и RTTI, но это было тоже около 10 лет назад. С тех пор — ничего. Очень жаль. Если в C++ не произойдёт никаких существенных изменений в ближайшие пару лет, то можно будет уверенно заявлять, что этот язык мёртв и давать сабжевые советы просто глупо и даже в какой то степени преступно.

Все основные отличия C++ от других языков на самом деле заключаются лишь в трёх следующих вещах:

1. Шаблоны — которые, будем надеятся, скоро появятся и в C# и в Java.
2. Множественное наследование — которое является синонимом плохого дизайна.
3. Адресной арифметикой — которая наследована от C.

В основном все пальцы C++ программеров в отношении других языков относятся к третьему пункту. Я так крут что знаю как использовать указатели, и я даже знаю, как работает memcpy :super:

Это очень круто, только у меня есть вопрос — а зачем? 95% современных задач требуют умения работы с базами данных, а не с указателями.

ГВ>Для C# и Java эти вопросы решались исходя из целей этих языков. C# — поддержание амбиций Microsoft (т.е., внедрение поддержки модели COM)


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

Аргументы, плиз, в студию. Мы их рассмотрим и может быть согласимся, может просто посмеёмся, но скорее всего поспорим.

AVK>>Как раз реализация определенных концепций на таких языках оказывается зачастую более понятной, простой и красивой. Сравни к примеру COM и объекты дотнета или джавы.


ГВ>Ну, во-первых. Сравнивать COM (в сущности — способ структурирования коммуникаций) с моделью объектов в языках реализации не совсем корректно.


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

[skip]

ГВ>Здесь я имею в виду то, что если Java создана для решения проблемы переносимости (решается виртуально) и популяризации Sun,


Проблемы переносимости не существует, всё это всего лишь маркетинг.

ГВ>а C# + CLR — как противовес Java в той же области,


возмножно это можно включить в список причин...

ГВ>то, естественно, они в этом смысле обладают преимуществами перед C++. Тогда как C++ создан для упрощения решения проблем программирования. Что называется — почувствуйте разницу ;)


Не чувствую ни одой разницы. Что такое в C++ "упрощение решения проблем программирования"?

Я как-то сделал маленький эксперимент. Распечатал все тексты одного COM объекта, включая idl-файлы, h-файлы и всякие разные cpp. Получилось 14 листов печатного текста. Затем я переписал тот же COM объект на C#. Результат — 4 страницы печатного текста. Причем, если убрать бизнес логику, то размер заготовки будет 1 к 7. Где тут нафиг C++ упрощает проблемы? Не смешите мои тапочки (c) Один из посетителей RSDN.

ГВ>И здесь я действительно согласен с тем, что на C# проще реализовать что-то на базе модели COM. Но, ёлки-палки, COM — это не способ построения абстракций уровня реализации, он слишком ограничен для этого!

ГВ>:crash:

Он не ограничен, он — мёртв. COM is dead, that thing is really dead! COM больше не нужнен самой MS, для неё это отработанный шлак. В десктоп программах он возможно ещё может найти своё место, но что касается распределённых приложений, то MS на него забила конкретно. И это правильно!

ГВ>>> Я полагаю, что для таких целей C++ содержит больше выразительных средств, чем Java.

AVK>>Например?

ГВ>Итак, цели: выделение абстракций и их комбинирование.

ГВ>Чего нет в Java: а) множественное наследование; б) шаблоны; в) инлайнирование (как инструмент совмещения структурированных абстракций и эффективности исполнения).

а) в большиестве случаев решается использованием интерфейсов,
б) необходимо по жизни в основном для типизированных контейнеров, и в том же C# многие вещи запросто решаются при помощи foreach + ждем следующей версии языка.
в) интересный термин — инлайнирование . По сути, перекладывание задач оптимизации на плечи программиста. Временные издержки нашего времени, ничего более.

ГВ>Предлагать назвать что-то, имеющееся в Java, что нельзя сделать в C++ — было бы подставой тебя с моей стороны, поскольку ничего такого нет, за исключением возможности переноса байт-кода.


Не надо обольщаться и делать поспешные заявления. Хотите пример, получите — приведите код безапасной работы с файлом на Java, например, открытие файла, запись строки данных и закрытие. При этом мы учитывем возможность возникновения исключительных ситуаций. На C++ это делается в 2 строки кода. Хотелось бы увидеть более простой код на Java.

ГВ>Прикол как раз в том, что когда работаешь со скриптовыми языками, часто даже не задаёшь себе тех вопросов, которые не боишься ставить, используя C++. А C# и Java я как раз и считаю разновидностью скриптовых языков, посольку ИМХО они апеллируют к реализации каких-то элементов системы на других языках.


Кто именно считает? Я слышу такое утверждение первый раз.

ГВ>К примеру, именно отсутствие в Java (и в C#) шаблонов и приведёт либо к разбуханию большой и сложной программы, либо к снижению эффективности её работы, за счёт необходимости run-time-приведения типов (виртуальные функции).


Да нормально пока... Кроме того ждём следующих версий языков. К тому же C#'у всего лишь полгода, C++ уже 20 лет, но мне пока больше не нравяться недостатки последноего.

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

Я пишу на C++ более 10 лет, т.е. мне не надо рассказывать о его достоинствах и недостатках. Я знаю и использую COM примерно 5 лет, соответсвенно знаком не только с базовыми концепциями и основами, но и деталями этой технологии. Я не знаю Java совсем, поэтому всё приму на веру. Я больше года работаю с C# и .NET, соответственно могу, как минимум, рассуждать об их достоинствах и недостатках. Давайте разговаривать по существу. Если .NET в вашем понимании полное фуфло, а C++ is cool forever и для новичка это как раз то что надо, то я бы хотел услышать аргументированные доводы почему. В противном случае, мягко говоря, это введение в заблуждение подрастающего поколения. Что может оказаться непростительным ;)
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Начинай с C++
От: Igor Trofimov  
Дата: 18.08.02 06:02
Оценка:
AVK>Глупости это все. Скриптами обычно называют языки в которых невозможно конструировать новые типы(объекты).

-- Подонок — значит, человек без денег
-- Никогда не слышал такой формулировки. Но если так, можете считать меня подонком
(К.Саймак."Денежное дерево")


Это я к тому, что высшей странности определение скрипта Если так, то можно считать скриптами C и классический Паскаль.

мне казалось, что скриптами обычно назвыают простые программы, используемые с утилитарной целью и интрепретируемые простым интертрепатором. Но, с другой стороны, есть perl. Который и не очень простой и даже не очень интертрепатор, да и программы на нем навороченные иногда пишут. А все-же "скрипт". Поди — разберись
Re[8]: Начинай с C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.08.02 07:38
Оценка:
Здравствуйте Igor Trofimov, Вы писали:

IT>Это я к тому, что высшей странности определение скрипта Если так, то можно считать скриптами C и классический Паскаль.

Это кто тебе сказал что в сях и паскале нельзя конструировать новые типы?

IT>мне казалось, что скриптами обычно назвыают простые программы, используемые с утилитарной целью и интрепретируемые простым интертрепатором. Но, с другой стороны, есть perl. Который и не очень простой и даже не очень интертрепатор, да и программы на нем навороченные иногда пишут. А все-же "скрипт". Поди — разберись

Вот потому я и написал "обычно". Четкого определения скрипта наверное не существует.
AVK Blog
Re[9]: Начинай с C++
От: Igor Trofimov  
Дата: 18.08.02 07:51
Оценка:
IT>>Это я к тому, что высшей странности определение скрипта Если так, то можно считать скриптами C и классический Паскаль.
AVK>Это кто тебе сказал что в сях и паскале нельзя конструировать новые типы?

Хм... если ты имеешь в виду struct и record и другие составные типы, то тогда php — тоже не скрипт и javascript (как ни странно) — тоже не скрипт
Re[2]: Вопрос начинающего программиста на С++
От: Андрей Тарасевич Беларусь  
Дата: 18.08.02 08:32
Оценка: +6
Здравствуйте Mishka.NET, Вы писали:

M.NET>Здравствуйте RSDNer, Вы писали:


RSDN>>Господа! Хочу заняться программированием на С++. Посоветуйте с чего начать: VS6, либо С# (.Net). Последняя версия посовременнее будет, но, возможно, и посложнее. Посоветуйте. Заранее благодарен, спасибо.


M.NET>Изучай С#. Позно уже за С++ браться. Ну уж если очень хочется, то берём Страуструпа, Мейерса, Александреску и пр.


С# не позиционируется как замена C++. Какое может быть "поздно"?
Best regards,
Андрей Тарасевич
Re[7]: Начинай с C++
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 18.08.02 08:37
Оценка:
Здравствуйте IT, Вы писали:

IT>Мне, кстати, тоже совершенно непонятно, и даже обидно, почему язык, на котором я программирую более 10 лет, остановился в своём развитии. Кто помнит, когда последний раз произошли существенные изменения в языке? Это были шаблоны и RTTI, но это было тоже около 10 лет назад.


И с тех пор появился только одимн компилятор который вроде-бы как
полностью удовлетворяет стандарту.

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

Не канает. Я тебе могу точно сказать что C++ не будет меняться
до 2004 года. Пока не кончится immutability time, как записано в
стандарте.

IT>Все основные отличия C++ от других языков на самом деле заключаются лишь в трёх следующих вещах:


IT>1. Шаблоны — которые, будем надеятся, скоро появятся и в C# и в Java.

IT>2. Множественное наследование — которое является синонимом плохого дизайна.

Ты знаешь несколько лет назад все спорили нужно множественное наследование или нет. Поклонники pascal сказали что нет, и не сделали его там, и вроде как всех запинали. Но тут стала популярной микрософтовская технология COM, и все
противники множественного наследования как-то хором заткнулись. И под шумок оно появилось и в Delphi. Правда там оно появилось в слегка обрезаной форме т.е. там в данный момент есть множественное наследование интерфейса, но не реализации.

Я не считаю множественное наследование синонимом плохого дизайна. Есть очень много задач которые с его помощью решаются гораздо красивее чем без него(если кто-то хочет поспорить то welcome). Кончено любое мощное средство может быть использовано неправильно.

IT>3. Адресной арифметикой — которая наследована от C.


IT>В основном все пальцы C++ программеров в отношении других языков относятся к третьему пункту. Я так крут что знаю как использовать указатели, и я даже знаю, как работает memcpy

IT>Это очень круто, только у меня есть вопрос — а зачем? 95% современных задач требуют умения работы с базами данных, а не с указателями.

Адесная арифметика действительно очень удобно, но не более. Например в Delphi ее нет и почти никто не страдает. Но и в Delphi и в C++ есть ручное управление памятью, вот это все-таки рулит. Я понимаю что это же и вызывает некоторые проблемы, как утечка памяти.Но не смотря на все утечки память занимаемая програмами на C++ меньше в десятки раз чем у программ на Java и с .net видимо то же самое.

ГВ>>Здесь я имею в виду то, что если Java создана для решения проблемы переносимости (решается виртуально) и популяризации Sun,


IT>Проблемы переносимости не существует, всё это всего лишь маркетинг.


Да практика порказывает что переносить исходники проще чем саму программу.
Кроссплатформенных библиотек достаточно много.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.