Re[3]: C+ vs C#
От: kuj  
Дата: 14.02.06 09:10
Оценка:
Здравствуйте, Ellin, Вы писали:

kuj>>Когда-то давно еще во время появления C++, помнится, был примерно аналогичный спор аля Asm vs C++. Потом было C++ vs Java (наиболее близко к данной теме, если подумать).


E>Как все просто. И думать не надо. Asm->C->C++->Java->C#. Правильно я понимаю. Вот только напишите мне, пожалуйста, что именно было привнесенно на каждом из этапов нового в программирование. На Jav'е у меня все заканчивается.

Да нет же конечно все не так просто. Парадигм программирования и языков великое множество, потому и темы что-то vs что-то меня всегда забавляли. Бывает даже что-то новое для себя выносишь. "В споре рождается истина".


kuj>>Очевидным остается факт, что в программирование с каждым годом становится все более экстримальным — сроки сжимаются, а функционал требуют все богаче и удобнее.

E>Так на C# даже иконку в хидер Лист Контрола вынести без апи нельза о каком функционале идет речь?
А в C# вроде и понятий таких нету или я что-то пропустил?

kuj>>Клиентов обычно не волнует как и на чем будет реализована нужная ему функциональность, а главное — сроки на выполнение и качество работы.

E>Сроки да — С# дает приимущество для большениства программистов, а вот качество под сомнением.
О качестве судить сложно, но клиенты вроде довольны. Для нас это главное.

kuj>>P.S. По поводу "серьезных проектов"... вот у нас проектик на 80 с гаком метров C# кода живет и здравствует... Страшно подумать какой монстр получился бы, если бы писали его на C++.

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

E>На мой взгляд С# в нынешнем его состоянии подходит для создания прототипов ПО, быстро накляпал полуработающию прогу, а потом, когда заказчику понравилось — написал нормальную рабочию версию на С++.

Э-э, Вы меня улыбнули.
Re[10]: C++ vs C#
От: WolfHound  
Дата: 14.02.06 09:11
Оценка: +1
Здравствуйте, Ellin, Вы писали:

E>Так это скорее провокация против С++. Сначала запретили множественное наследование, потом начали С++ натягивать. Да и управляемые классы также нельзя в шаблонах использовать. Это МС++ — это пиар С#, если хотели бы сделали правильно, для этого возможности есть.

Да нету возможности. С++ очень сильно перегружен всяким мусором.

E>WM_PRINT, опечатался, извиняюсь.

Всеравно ничего не понял.

E>Допустим есть пару функций, которые надо унаследовать. В C# делаем интерфейс и каждый раз делаем имплиментацию. Java программисты рассказали мне трюк, в котором они выносят эти функции в отдельный класс, мемберы тех классов, которые в С++ были бы наследниками, и с которыми должны работать эти методы делают public, затем "обрабатывают", отдельным классом — им очень нравиться, причем по их признанию можно сделать мемберы private, но завести public ассоциативный массив.

Ничего не понял. Давай конкретную задачу и код которым ее решаеш.

WH>>В том что ты совершенно не понимаешь что такое управляемая ОС, чем она отличается от обычной и почему это качественный скачек по сравнению с тем что есть сейчас.

E>Давай так, в пару словах что же это такое и тут станет все ясно.
В паре слов не получится. Это совершщенно иная философия и для того чтобы ее понять сначала нужно понять для чего сделан .NET. Если ты не поймешь .NET то управляемые ОС ты не поймешь.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: C++ vs C#
От: Ellin Россия www.rsdn.ru
Дата: 14.02.06 09:49
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

WH> С++ очень сильно перегружен всяким мусором.

А где та мера по которой вы определяете? Для кого-то и С# перегружен мусором. Однако я склонен считать, что мусора нет и скорее наоборот, элементов языка всетаки мало.

WH>Ничего не понял. Давай конкретную задачу и код которым ее решаеш.


WH>>>В том что ты совершенно не понимаешь что такое управляемая ОС, чем она отличается от обычной и почему это качественный скачек по сравнению с тем что есть сейчас.

Чувствую что нет понимания что такое Windows 95. Там также существуют виртуальные машины. Этой операционной системой исполняемые файлы рассматриваются как некоторые инструкции к ядру операционки. (грубо говоря). Когда ты стартуешь ОС, то создается виртуальная машина в которой интерпретируются команды, отображаются результаты. Это очень похоже на виртуальные машины джава. Неправда ли? Разница в семантике байт кода и инструкций исполняемого файла. MS сейчас просто напросто придумало новые инструкции и все прибамбасы к ним, не более того. Я говорю, что разумнее было бы расширять уже имеющиеся разработки.
?

E>>Давай так, в пару словах что же это такое и тут станет все ясно.

WH>В паре слов не получится. Это совершщенно иная философия и для того чтобы ее понять сначала нужно понять для чего сделан .NET. Если ты не поймешь .NET то управляемые ОС ты не поймешь.
Тогда мне убогому остается только довериться тебе, отдать кошелек с деньгами, чтобы ты мне среды разработки покупал и делать как скажешь. Так получается? Это твой идеал? К этому стремишься?
Кстати Энштейн говорил вроде: "Если вы не можете объяснить пятилетнему ребёнку чемы занимаетесь — значит вы шарлотан."
Re[12]: C++ vs C#
От: WolfHound  
Дата: 14.02.06 10:06
Оценка: +2 :))) :)
Здравствуйте, Ellin, Вы писали:

E>Кстати Энштейн говорил вроде: "Если вы не можете объяснить пятилетнему ребёнку чемы занимаетесь — значит вы шарлотан."

Пятилетниму ребенку могу. Тролю нет.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[57]: C+ vs C#
От: alexeiz  
Дата: 14.02.06 10:32
Оценка: -2
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, alexeiz, Вы писали:


Д>>>4. Замыканий


A>>Функторы.


Кё>Бред. Вот пара примеров навскидку:

...

Все примены из Nemerle идут лесом. Сравнивать C++ с функциональным языком, это слоны и бегемоты. Подумай тот ли язык программирования ты выбрал, если тебе приходится писать функциональный код. Здесь идет сравнение с C# — основным языком программирования для .NET.

Кё>Ты можешь сказать, что у тебя таких ситуаций не было. А почему не было? Потому что тебе не приходило в голову, что так можно, исключительно из-за того, что на С++ это делать трудно и результат получается непонятным.


Твоё обобщение не имеет смысла. Пока что ты показал, что из C++ трудно сделать функциональный язык. Это так. Но не то, что C++ — не является языком высокого уровня.

Кё>Наличие замыканий — это дополнительный уровень абстракции. Недавно всплывали числа Черча — чем не абстракция? На С++ эта абстракция недоступна.


Опять в том же стиле. Ты не понимаешь о чём речь. Никто не пытается сказать, что всё можно сделать на C++ (легко).

Д>>>5. Уверенности в том, что безобидный на вид код не окажется злостным UB

A>>Не замечено. Давай ты приведёшь пример well-formed C++ кода, использующего высокоуровневые абстракции, в котором тебя ждут упомянутые тобой проблемы.

Кё>Не раз в форуме C++ были темы с безобидной функцией, в которой находили до десятка потенциальных проблем. Проблема как раз в выделенном — трудно сразу сказать, является код ill-formed, или это well-formed с UB, или всё правильно. К примеру:


Кё>
Кё>struct A
Кё>{
Кё>  T* x, y;
Кё>  A() : x (new T), y (new T) {}
Кё>};
Кё>


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

Д>>>2. Необходимость писать килограммы оберток каждый раз, когда тебе нужно использовать чужую библиотеку (см п.1 и п.2)

A>>Проблемы библиотек. Объясни мне, как херовые сторонние библиотеки вдруг стали проблемой языка?

Кё>Всегда были. Я тебе продемонстрировал


Ты еще ничего не продемонстрировал.

> Такие мелочи, когда из-за недостатка фич в языке неожиданно приходится писать какую-то муть, в совокупности заставляют отказаться от некоторых выгодных стилей программирования. Например, мне бы хотелось услышать, как ты объяснишь новичку в С++ (умеющему создать вектор чисел и отсортировать) приведенную реализацию Sort, зачем там ещё класс, почему так? Или может приведёшь более понятную реализацию (отсортировать два двухмерных массива (jagged) по заданному номеру столбца, опционально с инверсией)?


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

Д>>>3. Заботливо разложенные на каждом шагу грабли, в качестве ярких примеров — vector<bool>, auto_ptr в котейнерах, и прочие радости.

A>>Эти грабли хорошо изветсны и никакой опасности не представляют.

Кё>


Кё>Про массив auto_ptr все знают. Везде написано. А вот про это — не везде:


Кё>
Кё>void foo(auto_ptr<T> param)
Кё>{
Кё>}
Кё>


Ха! Ты привёл один из основных способов использования auto_ptr. Я уж не знаю, где ты что читал, если тебе это не было сразу объяснено.

A>>Все твои "аргументы" даже и на йоту не ближе к тому, чтобы показать, что на С++ нельзя программировать на высоком уровне абстракции.


Кё>Насколько высоком? Более высоком, чем на Си? Да. На не менее высоком, чем позволяет любой другой существующий язык? Увы, нет.


Более высоком, чем на C#. См название темы. Я не собираюсь обсуждать здесь функциональные языки программирования.

Кё>Факт в том, что в других языках есть нужные и полезные возможности, которых в С++ нет.


Где?
Re[57]: C+ vs C#
От: alexeiz  
Дата: 14.02.06 10:39
Оценка: -1
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, alexeiz, Вы писали:


A>>Это камень предкновения? Программируй на функциональном языке.


Д>А давай ты не будешь указывать мне, на чем программировать?


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

Д>Ты спрашивал, чего не хватает в С++? Я тебе сказал.


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

A>>Все твои "аргументы" даже и на йоту не ближе к тому, чтобы показать, что на С++ нельзя программировать на высоком уровне абстракции.


Д>я не занимаюсь разведением сферических коней в вакууме.


Я стараюсь направить эту тему в конкретное русло.

> Я пишу конкретные программы для конкретных компиляторов и на конкретных библиотеках. Поэтому проблемы реализации — это проблемы не у них, а проблемы у меня


Если ты, имея выбор компиляторов и библиотек, принял своё решение, то это становится твой проблемой. Однако никто тебя не заставляет выбирать плохие компиляторы и библиотеки. Твой конкретный выбор не делает язык хуже.
Re[58]: C+ vs C#
От: Дарней Россия  
Дата: 14.02.06 12:19
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Ты просто не понял, что здесь обсуждается. Функциональные языки будем обсуждать в отдельной теме.


вот ведь как интересно. Как только я сказал, чего не хватает в плюсах, чтобы называться полноценным языком высокого уровня, ты сразу отправил меня в другую ветку. Не пойму только, по какому принципу ты это определил. По слову "функциональный" в том термине, который я употребил?

A>Ясно дело, есть в C++ вещи, который не хватает. Однако это не делает его языком низкого уровня. Тем более, твои примеры. Они ни каким боком не показывают, что на C++ нельзя программировать на высоком уровне абстракции или что уровень абстракции в C# выше чем в C++.


Вот ведь как интересно. Если в языке не хватает одной из возможностей ЯВУ и ее приходится эмулировать, то он по твоему не становится менее высокоуровневым?

A>Я стараюсь направить эту тему в конкретное русло.


да вижу я, в какое русло ты стараешься ее направить.

A>Если ты, имея выбор компиляторов и библиотек, принял своё решение, то это становится твой проблемой. Однако никто тебя не заставляет выбирать плохие компиляторы и библиотеки. Твой конкретный выбор не делает язык хуже.


Это не "конкретно мой выбор", а "выбор из того, что доступно на данный момент"
Не чувствуешь разницы?
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: C++ vs C#
От: klapaucius  
Дата: 14.02.06 13:16
Оценка:
E>Кстати Энштейн говорил вроде: "Если вы не можете объяснить пятилетнему ребёнку чемы занимаетесь — значит вы шарлотан."

Ну да. А если можете — то вы — Эйнштейн.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re: C++ vs basic
От: Sheridan Россия  
Дата: 15.02.06 05:59
Оценка: +1 -4
Именно так.

[RSDN@Home][1.2.0][alpha][643]
[Hаслаждение бренно — честь бессмертна. [Периандр]]
Matrix has you...
Re[58]: C+ vs C#
От: Vermicious Knid  
Дата: 15.02.06 06:47
Оценка: 10 (4) +2
Здравствуйте, alexeiz, Вы писали:

A>Все примены из Nemerle идут лесом. Сравнивать C++ с функциональным языком, это слоны и бегемоты. Подумай тот ли язык программирования ты выбрал, если тебе приходится писать функциональный код. Здесь идет сравнение с C# — основным языком программирования для .NET.


Эти примеры идут скорее дорогой, ровной и прямой. Во-первых Nemerle это не функциональный язык. Это чистой воды императивный язык, имеющий ряд заимствований из современных функциональных языков(главным образом ML). В дизайне C++ тоже есть заимствования из ML(это не мои слова, это Страуструп сказал), это делает его функциональным?

То, что функции поддерживаются в этом языке на более высоком уровне еще не делает его функциональным(скажем в C# 2.0 тоже есть анонимные функции, замыкания и делегаты). Главные отличительные особенности функциональных языков — программа как композиция функций, значение это функция, ссылочная прозрачность, отсутствие переменных.

В Nemerle программа это не композиция функций, значение это не функция, гарантия ссылочной прозрачности даже в элементарных случаях невозможна, переменные есть. Каким боком это функциональный язык, если ни один из принципов ФЯ не соблюден? Он не более функциональный чем скажем C# или например Javascript.

Раз уж мы разговариваем в священных войнах, то не побоюсь сказать — такой вывод ты сделал "благодаря" очень поверхностному знакомству с функциональными языками. Лично я с ними тоже знаком преимущественно поверхностно и мое отношение к ФП можно охарактеризовать как весьма сложное(мои любимые парадигмы скорее метапрограммирование и логическое программирование), но элементарные принципы функциональных языков даже я знаю.

Кё>>Ты можешь сказать, что у тебя таких ситуаций не было. А почему не было? Потому что тебе не приходило в голову, что так можно, исключительно из-за того, что на С++ это делать трудно и результат получается непонятным.


A>Твоё обобщение не имеет смысла. Пока что ты показал, что из C++ трудно сделать функциональный язык. Это так. Но не то, что C++ — не является языком высокого уровня.


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

В C# есть абстрактные классы, интерфейсы, делегаты, свойства. Что из этого может предложить C++? Правильно, ничего. Вместо всего этого используются костыли на шаблонах. Написание костылей — это наиболее популярное занятие в среде C++. Для многих "С++-героев" это уже давно стало прибыльным бизнесом. В C++ как нигде более был востребован consulting. К сожалению их мир схлопывается на глазах. Один из инструментов самораскрутки(С++ journal) уже закрылся.

A>Опять в том же стиле. Ты не понимаешь о чём речь. Никто не пытается сказать, что всё можно сделать на C++ (легко).


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

От C++ у меня осталось одно яркое воспоминание — книга "C++ Modern Design". В отличие от многих книг по С++ книга написанна хорошим, живым, понятным языком. Код к книге это эталон изящности и читабельности, несмотря на то, что автору постоянно приходится бороться с недостатками и недоработками C++, в том числе и главным — хроническим отсутствием нормальных компиляторов(шутка ли — во время написания книги для Windows не существовало ни одного компилятора кроме весьма специфического Comeau C++, который бы скомпилировал его код). К сожалению ни ему, ни контрибуторам boost так и не удалось окончательно "побороть" С++. У них наверняка другое мнение, но на деле они вышли из этой борьбы проигравшими.

Кё>>Не раз в форуме C++ были темы с безобидной функцией, в которой находили до десятка потенциальных проблем. Проблема как раз в выделенном — трудно сразу сказать, является код ill-formed, или это well-formed с UB, или всё правильно. К примеру:


Кё>>
Кё>>struct A
Кё>>{
Кё>>  T* x, y; 
Кё>>  A() : x (new T), y (new T) {}
Кё>>};
Кё>>


Ну во-первых T * x, * y; Это очередной пример грабель.

A>Никаких проблем. Каждый человек, знакомый с исключениями не по наслышке увидит в этом коде ошибку. Конечно, тот, кто имел дело с C, может такое написать. Но о том и речь. C++ нужно изучать. В изучение входит не только синтаксис языка, но и основные методы программирования на нём.


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

Не знаю интересно ли тебе мое мнение, но мне не хотелось бы постоянно обращать внимание на такие пустяки при написании программы. Хорошие программисты на C++ видимо вообще очень замороченные и параноидальные субъекты.

A>А, вот что ты имел ввиду в своем коде. Абсолютно бредовый код, честно говоря. Но C++ — это язык не для новичка. Про новичков вопрос отдельный. C++ в настоящее время больше ориентирован на профессионалов.


A>Более высоком, чем на C#. См название темы. Я не собираюсь обсуждать здесь функциональные языки программирования.


Полный бред. Во-первых реальных приложениях уровень C++ значительно ниже уровня C# 2.0. Для 90% приложений это так. Ты конечно можешь сколько угодно говорить о "мифических профессионалах" на которых рассчитан С++, но в действительности хороших профессионалов, программирующих на C++ не так уж много. Я бы сказал не более 5% от общего числа. Поздравляю тебя с тем, что ты входишь в это число. Собственно чего уж греха таить, для многих людей это едва ли не основной жизненный приоритет, войти в "элитный клуб" С++-профессионалов. Кстати многие люди посредственно знающие С++ как программисты и архитекторы несоизмеримо лучше даже самых крутых C++-профессионалов. При всем уважении к присутствующим и особенно не присутствующим(видимо boost не оставляет свободного времени на форумы) здесь C++-профессионалам из MetaCommunications, мне бы не хотелось работать над их продуктами, ибо это крайне скучно и вообще неинтересно. А вот посредственным контрибуторам Mozilla как-то удается создать очень качественный и крайне увлекательный программный продукт(есть такие примеры и среди коммерческих продуктов).

Многим вообще наплевать на профессиональный и интеллектуальный рост, они просто ремесленники и элементарно зарабатывают на жизнь. Да и большинство серьезных, часто используемых коммерчески, библиотек реализованны с точки зрения C++ как языка мягко говоря неважно(MFC, Qt например). Ну и скажем игроделанье это одна из незыблемых ниш C++, а там профессионализмом обычно и близко не пахнет.

Во-вторых скорее нужно доказывать, что уровень C++ выше уровня C#. Imho это практически невозможно доказать. Есть несколько областей, в которых C++ далеко позади C#, причем и как язык и как runtime среда. Например модульность, ООП возможности, синтаксический сахар. Те же дженерики в определенных случаях гораздо удобнее шаблонов C++.

А если еще отбросить бред про "функциональные языки программирования" и сравнить таки C++ с Nemerle(который семантически является лишь надстройкой над C#), то C++ остается в глубоком пролете.

Тем не менее я считаю, что C++ это достаточно мощный язык и у него еще очень долгое время будет оставаться своя достаточно широкая ниша. Но лично я предпочту держаться от него как можно подальше, хотя знаю его неплохо(действительно неплохо). Это просто напросто экономически неэффективно. Даже если в денежном выражении результат будет выше, то количество затраченных сил будет несоизмеримо выше.

Мой прогноз — C++ протянет еще лет 15-20. Если бы они поторопились с новым стандартом, то этот срок увеличился бы еще лет на пять. А если бы приняли за правило выпускать новый стандарт, то можно было бы еще лет 10 накинуть. Но очевидно, что этого не произойдет.

Я думаю часть рынка C++ мог бы не без успеха занять D, но пока у него есть принципиальные недоработки и проблемы с "комитетом"(в количестве одного человека). Если к версии 1.0 хотя бы половина из них будет исправленна и появится implicit template instantiation, то срок жизни C++ можно смело сокращать еще на пять лет.

А вообще равнение C# и C++ изначально не совсем корректно. Строго говоря они друг другу не конкуренты. Более того они даже не конкурируют за "умы" программистов. На C# или Java переходят только самые прагматичные, циничные и ленивые профессиональные C++-разработчики. Все романтики, крепкие C++-профессионалы и трудоголики останутся на своих местах. А то, что C# привлекает армию индусов и прочих одноклеточных — это не проблема. На таком фоне гораздо проще выделиться.

A>Где?


Кто здесь? А ты хто?
Re[59]: C+ vs C#
От: Cyberax Марс  
Дата: 15.02.06 07:24
Оценка: 1 (1) +1 -1
Vermicious Knid wrote:
> В C# есть абстрактные классы, интерфейсы, делегаты, свойства. Что из
> этого может предложить C++? Правильно, ничего.
Бред. В С++ есть:
1. Абстрактные классы:
class Base
{
public:
    virtual ~Base(){};
    virtual void squack() = 0;

    void some_method(){squack();}
};


2. Интерфейсы:

class Base
{
public:
    virtual ~Base(){};
    virtual void squack() = 0;
    virtual void another_method() = 0;
};

Base *base=dynamic_cast<Base*>(some_obj);
base->squack();


3. Свойств нет (они к ООП и не относятся). Но при желании:
https://secure.codeproject.com/cpp/cppproperties.asp
http://www.codeproject.com/samples/cppprops.asp
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[52]: C+ vs C#
От: Sheridan Россия  
Дата: 15.02.06 08:22
Оценка:
Здравствуйте, WolfHound, Вы писали:

C>>4. Приложения для систем без .NET Framework.

WH>Надеюсь ты понимаешь что нет никаких теоритических препядствий портированию .NET практически куда угодно.
Только вот на практике MS недаст довести проекты до конца, а сама никогда не возьмется писать под чтонибудь кроме винды.

C>>6. Кросс-платформенные приложения (не надо про Mono).

WH>Почему?
Ты считаеш что комманда разного народу успеет догонять MS на mono в плане совместимости?
Другое дело если возьмется другая довольно крупная контора... Причем возьмется вплотную. И еще пока Qt будет лучше mono, mono пользовать небудут.

[RSDN@Home][1.2.0][alpha][643]
[Люди перестают мыслить, когда перестают читать. [Д. Дидро]]
Matrix has you...
Re[56]: C+ vs C#
От: Sheridan Россия  
Дата: 15.02.06 08:22
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>Я говорю, что в теории .NET Framework _можно_ портировать хоть на тостер

C>>и холодильник, но на _практике_ он полностью есть только в Windows.
VD>Он на прктике есть на куче девайсов. Не надо говорить заведомую неправду.
А назовите операционные системы этих девайсов. ы?

[RSDN@Home][1.2.0][alpha][643]
[Вину предков искупают потомки. [Курций]]
Matrix has you...
Re[60]: C+ vs C#
От: Vermicious Knid  
Дата: 15.02.06 08:29
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>1. Абстрактные классы:

C>
C>class Base
C>{
C>public:
C>    virtual ~Base(){};
C>    virtual void squack() = 0;

C>    void some_method(){squack();}
C>};
C>


Я как бы в курсе, хотя уже где-то год прошел с тех пор как я их последний раз применял(да и вообще C++).Действительно абстрактные классы есть, но ведь ограничений скажем так несколько больше чем в C#. Например в конструкторе Base::Base ты вызвать squaсk не сможешь. Плюс в C# можно объявить еще и абстрактное свойство, не только метод.

Да и объективно говоря C++ даже исходя из синтаксиса объявления "абстрактных" классов не может претендовать на более высокий уровень поддержки этой возможности. Уродство это еще-то, особенно в реальном проекте, а не в тестовом примере. В частности типичным является гора мусорных заголовков и широкомасштабное использование forward-declaration(это я в частности о библиотеках, которые мне приходилось часто использовать).

C>2. Интерфейсы:


Это фикция. Это те же абстрактные классы, а не интерфейсы(только не надо сюда приплетать множественное наследование). Те же самые ограничение плюс совершенно другая смысловая нагрузка. Для интерфейсов в нормальном языке существуют определенные правила, которые не должны нарушаться. В C++ это как всегда исключительно вопрос самодисциплины.

C>3. Свойств нет (они к ООП и не относятся). Но при желании:

C>https://secure.codeproject.com/cpp/cppproperties.asp
C>http://www.codeproject.com/samples/cppprops.asp

Опять фикция. На этот раз еще большая. На практике в C++ такой подход никто не применяет. Если кто-то применяет, могу только посочувствовать.

В .NET свойства это неотъемлемая часть компонентной модели. В разрезе ООП свойства обладают всеми "свойствами" обычных методов(плохо только что использование аксессоров свойств как делагатов напрямую в C# не разрешенно, но это небольшая проблема), а значит все таки имеют отношение к ООП.
Re[60]: C+ vs C#
От: alexeiz  
Дата: 15.02.06 08:34
Оценка: +1 -1
Здравствуйте, Cyberax, Вы писали:

C>1. Абстрактные классы:

C>
C>class Base
C>{
C>public:
C>    virtual ~Base(){};
C>    virtual void squack() = 0;

C>    void some_method(){squack();}
C>};
C>

И даже так:
class Base
{
public:
    virtual ~Base() {}
    void squack() { do_squack(); }
    
private:
    virtual void do_squack() = 0;
};

Может кто попробует изобразить подобное на C#?
Re[52]: C+ vs C#
От: Sheridan Россия  
Дата: 15.02.06 08:42
Оценка:
Здравствуйте, Дарней, Вы писали:

C>>4. Приложения для систем без .NET Framework.

Д>а ты сможешь написать прогу на С++ для системы, в которой нет компилятора С++?
Некорректное сравнение.

C>>6. Кросс-платформенные приложения (не надо про Mono).

Д>а почему это вдруг не надо? Чтобы не разрушать твою стройную систему доказательств?
Нет. Потомучто уродец. Впрочем как и папа...

[RSDN@Home][1.2.0][alpha][643]
[Благочестие, ханжество, суеверие — три разницы. [К. Прутков]]
Matrix has you...
Re[54]: C+ vs C#
От: Sheridan Россия  
Дата: 15.02.06 08:42
Оценка:
Здравствуйте, Дарней, Вы писали:

C>>Пишут. Но не без проблем — там памяти мало и что-то серьезнее

C>>"Ресторанного меню" или "Карты метрополитена" написать сложно.

Д>а ты собрался там сервер приложений запускать?


Про Glan слышал? Glan &mdash; система разработки клиент-серверных приложений
Автор: Sheridan
Дата: 26.08.05

или здесь и продолжение
Все уже есть. На С++ под Qt
Кроссплатформенно...

[RSDN@Home][1.2.0][alpha][643]
[Hичто так не поощряет праздность, как пустые разговоры. [Л. Толстой]]
Matrix has you...
Re[61]: C+ vs C#
От: Vermicious Knid  
Дата: 15.02.06 09:00
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>И даже так:

A>
A>class Base
A>{
A>public:
A>    virtual ~Base() {}
A>    void squack() { do_squack(); }
    
A>private:
A>    virtual void do_squack() = 0;
A>};
A>

A>Может кто попробует изобразить подобное на C#?

Легко. Заодно кое-что добавлю из разряда того, что невозможно изобразить на C++. (точнее можно, но результат будет мягко говоря не тот)

abstract Base
{
    public Base() { do_squack(); }
    public void squack() { do_squack(); }
    abstract protected void do_squack();
}
Re[62]: C+ vs C#
От: alexeiz  
Дата: 15.02.06 09:19
Оценка:
VK>Легко. Заодно кое-что добавлю из разряда того, что невозможно изобразить на C++. (точнее можно, но результат будет мягко говоря не тот)

VK>
VK>abstract Base
VK>{
VK>    public Base() { do_squack(); }
VK>    public void squack() { do_squack(); }
VK>    abstract protected void do_squack();
VK>}
VK>


Не можешь отличить private от protected?
Re[62]: C+ vs C#
От: Cyberax Марс  
Дата: 15.02.06 09:21
Оценка:
Vermicious Knid wrote:
> abstract Base
> {
> public Base() { do_squack(); }
> public void squack() { do_squack(); }
> abstract protected void do_squack();
> }
> SCRAM!
Поздно!

struct Base
{
      Base() { do_squack(); }
      void squack() { do_squack(); }
protected:
      virtual void do_squack()=0;
}

С точностью до синтаксиса.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.