|
|
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
ну... потрачу, наверное... я скачал dev-cpp прикрутил к нему mingw, импортировал проект вижлстудии и попытался скомпилить.... миллионы варнингов и тысячи ошибок... ну и хер с ним, попробую реадми почитать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 02:24 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
to: alex_k www.fox-toolkit.org юзаю уже больше года. удобнее и компактнее пока ничего не нашел, хотя перерыл кучу кросс-платформных гуи. При разработке, даже на мастдае, испроьзуются принципы X-ов (виджиты, мультипоточная обработка событий ...) сорцы - всего 3 метра. но есть все необходимое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 05:56 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
Спасибо за ссылку... посмотрю, пока думаю мне просто не хватает скиллов, для подобного рода работы. Если уж я скомпилить либу не могу :-) разбираюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 06:26 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
Если под компонентным подходом ты подразумеваешь открытые "чисто"-виртуальные интерфейсы, Под компонентным подходом я понимаю именно компонентный подход - это не только интерфейсы( точнее это не абстрактные класса ). Вообще, интерфейс получил такое широкое распространение как точка входа! Это важная деталь - так как изначально у абстрактных классов было иное назначение Сложность - да. Но без некоторой сложности не добиться некоторой выразительности. Слабый аргумент, особенно в эпоху насыщения рынка программистами. Кто не тянет - нафиг из области. Ни капельки не слабый - если что-то можно сделать проще - это надо делать проще! Опять же подчеркну - я не противник C++ - как раз наоборот - но он слишком статичен - особенно в эпоху насыщения рынка К счастью компиляторы "движуться" на встречу друг-другу, вернее навстречу стандартному С++. Не замечал особого движения - они даже ANSI C++ по разному поддерживают - не говоря о всяких расширениях языка, присутсвующие в каждом компиляторе. Чтобы охладить оптимизм стоит пойти на www.boost.org или www.stlport.org и посмотреть таблицы совместимости этих библиотек с наиболее распространенными компиляторами - и это при том что их создатели используют только стандартный C++! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 08:52 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 vdimas: Изучал QT и WxWindows. QT - весьма оторвана от чего бы то ни было, в то время как моя либа обладает общей событийной моделью для всех классов, а не только для GUI. Т.е. у меня событие (не сообщение!) может получить экземпляр какого угодно класса (как в C#) и даже просто CallBack - функция (как только в С++) Не совсем понял это высказывание. Поподробнее можно? В Qt, насколько мне известно, модель слот/сигнал тоже не привязана именно к GUI. Вставил в список базовых классов QObject (он не имеет отношения к GUI), пару макросов в определение и можешь определять свои слоты и сигналы (какие угодно). То что слоты и сигналы отделены от обычных методов мне кажется достоинством, зачем лишняя путаница? Хотя собственно никто не запрещает вызывать слоты как обычные методы. На мой взгляд, недостаток Qt не в этом, а вобщей тормознутости. То же связывание сигналов и слотов. Это что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 09:54 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Геннадий Васильев : Y> Может быть вопрос поставить так : если все пишут неправильно, может Y> что-то не так с языком ? (а что не так - в Java есть общий предок для всех Y> объектов, а в С++ нет, отсюда описанная проблема) ГВ> Однако, если те, кто "пишет правильно" добивается хороших результатов, ГВ> то логично ведь предположить, что те, кто их не добился - пишут неправильно Но те, кто "пишет правильно" на Delphi, Java, OCAML, FORTRANe, тоже добиваются хороших результатов. Следовательно, если соотношение "плохих"/"хороших" программистов не в пользу С++, можно сделать вывод, что этот язык не поощряет хорошие практики программирования. Я бы не настаивал на безусловной справедливости этого вывода, но обратное совершенно точно неверно. 2vdimas >>> Для С++ можно использовать технологию COM для аналогичных целей. >>Для каких ? Для сборки мусора ? Здесь что-то не так. >Все так, и то и другое - подходы к контролю времени жизни объектов. И там и там используется общий смысл - объект уничтожается тогда, когда на него никто больше не ссылается М-да... я даже не знаю, что сказать. Это два совершенно разных алгоритма, даже скажем - два совершенно разных подхода к организации памяти. И говорить что это одно и то же это или передергивание или какое-то чудовищное ламерство. Подход COM мало отличается от общего подхода C++ (насколько я помню, у Страуструпа в книге есть пример класса с подсчетом ссылок). Тогда как сборка мусора - это механизм языка, причем его невозможно реализовать в С++ на уровне кода в общем виде. >>> Языки типа Java и C# изначально по своим возможностям являются подмножествами языка С++ >>Утверждать это - само по себе неграмотно. В строгом смысле слова "подмножество языка" это когда мы можем скомпилировать программу на подмножестве компилятором для надмножества, возможно с косметическими изменениями. >Именно так. Все вполне грамотно. (если, опять же, не иметь ввиду Reflection) Скомпилируйте любую реальную программу на Java любым компилятором С++. Сообщите, пожалуйста о результатах. Я настаиваю на том, чтобы Вы это сделали. Гг. ! Я не против С++, я не за С++. Это один из языков, не лучший и не худший; его надо знать любому серьезному программисту. Также я считаю очень правильной идею создания наборов "правильных" библиотек для С++. Но я категорически против передергивания, подмены понятий и всяческого вранья как "за" так и "против". Поймите, рассуждая на уровне "круто-не круто" или смешивая подсчет ссылок со сборкой мусора вы никогда не освоите программирование. Компьютеру глубоко пофиг ваши переживания и эмоции. Надо объективно подходить к вопросу. Delphi лучше C++ тем-то и тем-то. C++ лучше Delphi тем-то и тем-то. А рассуждения о том, что одни отличия "несущественны", а другие "доказывают превосходство" давайте оставим ламерам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 10:35 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Yossarian Боже, до чего буквальный товарищ... Будем жевать: >>> Для С++ можно использовать технологию COM для аналогичных целей. >>Для каких ? Для сборки мусора ? Здесь что-то не так. >Все так, и то и другое - подходы к контролю времени жизни объектов. И там и там используется общий смысл - объект уничтожается тогда, когда на него никто больше не ссылается М-да... я даже не знаю, что сказать. Это два совершенно разных алгоритма, даже скажем - два совершенно разных подхода к организации памяти. И говорить что это одно и то же это или передергивание или какое-то чудовищное ламерство. Подход COM мало отличается от общего подхода C++ (насколько я помню, у Страуструпа в книге есть пример класса с подсчетом ссылок). Тогда как сборка мусора - это механизм языка, причем его невозможно реализовать в С++ на уровне кода в общем виде. Во-первых, я именно и сказал, что используются разные подходы. Но не о подходах речь, а о самой возможности автоматизировать процесс контроля за временем жизни объектов. Повторить? Какой там нафиг один пример у Страуструпа? Существует масса способов контроля за временем жизни. В том числе и точно такой, какой использован в Java (гарбэдж-коллектор). Слово smart-pointer тебе что-нибудь говорит? А способ ссылаться на объектны по хендлерам тебе известен? Если да, то как понимать твое скоропостижное заявление, что его невозможно реализовать в С++ на уровне кода в общем виде. Не только можно, но и НУЖНО, если хочешь добиться лаконичности своих программ и не желаешь иметь утечки памяти. Скомпилируйте любую реальную программу на Java любым компилятором С++. Сообщите, пожалуйста о результатах. Я настаиваю на том, чтобы Вы это сделали. Мы сегодня плохо спали? Или плохо читали? Можно на С++ писать программу один-в-один (так, кажется, было сказано). Т.е. задаем некое правило ОДНОЗНАЧНОГО отображения типов и конструкций языков, и переводим! Очень даже легко (про рефлекшн я уже оговаривался). Объектные переменные в Java - суть ссылки. Все интерфейсы и классы по умолчанию унаследованы от Object. Вот и делаем в С++ так же: (из моей реальной программы) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. DEF_OBJECT - это макрос, который определяет типы - объектные ссылки. Заметь, new стоит, а delete отсутствует. Это один из языков, не лучший и не худший; его надо знать любому серьезному программисту. Ну писал я одно время на Delphi, потому как пока не вышел VC 5.0 работать толком было не на чем. Этот дельфи по возможностям языка сейчас серьезно отстает даже от VB.NET. Так что, о чем речь? Поймите, рассуждая на уровне "круто-не круто" или смешивая подсчет ссылок со сборкой мусора вы никогда не освоите программирование. Да уж, глубокомысленно... А не приходило в голову узнать, как этот гарбэдж-коллектор работает, чтобы потом чепуху с умным видом не нести? И сколько там подходов используется? Кстати, в одной из реализаций Java VM используется именно грубый подсчет ссылок!!! В более-менее серьезных - обычно используется несколько способов. Гарбадж-коллектор от .NET - вообще чудо современной техники. Никто ничего не путает. С помощью специальных ссылочных типов (смарт-поинтеров), я смогу реализовать ЛЮБОЙ способ контроля за временем жизни. (например, использовать .NET-овский). Выбирай на вкус. И не пугай население. В С++ действительно можно практически все. А вот эти строки: ГВ> Однако, если те, кто "пишет правильно" добивается хороших результатов, то логично ведь предположить, что те, кто их не добился - пишут неправильно пожалуй, повторю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 11:37 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri Под компонентным подходом я понимаю именно компонентный подход - это не только интерфейсы( точнее это не абстрактные класса ). Вообще, интерфейс получил такое широкое распространение как точка входа! Это важная деталь - так как изначально у абстрактных классов было иное назначение Так. С этого места, поподробнее, если можно... Какое иное назначение? Идея компонентов - COM объектов - выросла из чистого C++-ного абстрактного базового класса. Для того, чтобы это действительно стало компонентами, существует OLE/OLE2, набор типов данных интерфейсов, протоколов и поддерживающего фреймворка. Компоненты Java Been - вообще историческое недоразумение. Для того, чтобы свойство объекта стало "компонентным", оно должно "правильно" называться. Умора. Опять же подчеркну - я не противник C++ - как раз наоборот - но он слишком статичен - особенно в эпоху насыщения рынка Java вышел где-то в 1992 (или даже раньше). С тех пор спецификация языка практически не претерпела изменений. С++ с тех пор изменился до неузнаваемости (правда, в лучшую сторону). И продолжает развиваться. Это один из наиболее динамично развивающихся языков. К счастью компиляторы "движуться" на встречу друг-другу, вернее навстречу стандартному С++. Не замечал особого движения - они даже ANSI C++ по разному поддерживают - не говоря о всяких расширениях языка, присутсвующие в каждом компиляторе. Я же не сказал встретились , но ситуация с выходом VS.NET стала весьма обнадеживающей. Я компилю свои проги под VS.NET и под GCC без изменений!!! Категорически протестую против применения расширений языка! :) правда от некоторых, платформенно зависимых (типа __declspec(dllexport) ) не уйти, но эти ситуации легко изолировать макроподстановками. Чтобы охладить оптимизм стоит пойти на www.boost.org или www.stlport.org и посмотреть таблицы совместимости этих библиотек с наиболее распространенными компиляторами - и это при том что их создатели используют только стандартный C++! на этой странице полезно взглянуть в самый конец . Выводы делаем сами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 12:05 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
MetaCommunications Engineering. //boost.sourceforge.net/regression-logs/cs-win32_metacomm.html и что видим - единственный компилятор, прошедший все тесты - VC 7.1!!! //К стати днем раньне у Beman Dawes http://boost.sourceforge.net/regression-logs/cs-win32.html получились немного другие результаты А насчет абстрактных классов... здесь нельзя спорить - но на мой взгляд вначале это был просто класс, а не уровень абстагирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 14:38 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Yossarian ГВ> Однако, если те, кто "пишет правильно" добивается хороших результатов, ГВ> то логично ведь предположить, что те, кто их не добился - пишут неправильно Но те, кто "пишет правильно" на Delphi, Java, OCAML, FORTRANe, тоже добиваются хороших результатов. Следовательно, если соотношение "плохих"/"хороших" программистов не в пользу С++, можно сделать вывод, что этот язык не поощряет хорошие практики программирования. Я бы не настаивал на безусловной справедливости этого вывода, но обратное совершенно точно неверно. :) Ага, те, кто добивается хороших результатов на Java, Delphi (...) - пишут правильно на этих языках (наверное ;) ). Но ведь это никак не влияет на их (и не только их!) умение писать на C++. Весьма спорным представляется также ссылка на "...хорошие практики программирования". Что это такое? И почему факт достижния хорошего результата с использованием Delphi связывается с использованием хороших практик программирования? Рискну предположить, что этим термином обозначается некоторое структурирование кода, архитектура и т.п. Но как раз таки порог, при котором становится критичным применение "хороших практик" (и следовательно, соответвующая мозговая активность ;) ) при использовании здоровущих интегрированных сред типа Delphi отодвигается , т.е., условно говоря, можно написать хорошую программу совсем не применяя этих самых практик. А что? Затолкали в OnClickSuperButton() гору кода, чем нарушили целую гору принципов структурирования и привет: всё работает! Вместо LSP-compliant решения влепили анализ типа входного объекта (Java) и опять всё работает! Где же здесь поощрение хорошей практики? :)) Так что, ИМХО, твоё утверждение не только спорно, но ещё и безосновательно. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 21:58 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Геннадий Васильев > Ага, те, кто добивается хороших результатов на Java, Delphi (...) - пишут правильно на этих языках (наверное ;) ). Но ведь это никак не влияет на их (и не только их!) умение писать на C++. Весьма спорным представляется также ссылка на "...хорошие практики программирования". Что это такое? >Так что, ИМХО, твоё утверждение не только спорно, но ещё и безосновательно. :( Давайте говорить о сопостовимых вещах: если сравнивать, то не Delphi с C++, а паскаль с C++. Паскаль искуственно навязывает хороший стиль программирования, он для этого и был придуман - обучать людей программировать, и последнее есть медицинский факт. За это приходится платить удобством: на C/C++ почти все можно сделать более компактно. Но если человек учился программировать на паскале (да при этом еще книжки и читал), то у него скорее всего (но не обязательно) будет то, что называется правильный стиль, в том числе и на C/C++, фортране и басике. А C/C++ хороший стиль не навязывает, но и не запрещает, он создавался из расчета на опытных людей как язык решения прикладных задач. Зато кода получается меньше чем в паскале. Отсюда не следует, что все начинавшие программировать с языка C программируют в неправильном стиле, наверное можно привести контрпримеры в обоих случаях. Но я лично не встречал ни одного хорошего прогограммиста, начинавшего только с C (а плохие встречались), в то же время знаю многих хороших специалистов, начинавших с паскаля. Хотя встречались и плохие. Т.е. умение программировать на паскале влияет на умение программировать на C/C++. Так что утверждение Yossarian -а ИМХО абсолютно обосновано. >"...хорошие практики программирования". Что это такое? В качестве базового пособия по освоению хорошей практики можно предложить: Н.Вирт, Алгоритмы + Структуры Данных = Программы, Москва "МИР", 1985, 404с. Почитай, пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 02:29 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
c127 Давайте говорить о сопостовимых вещах: если сравнивать, то не Delphi с C++, а паскаль с C++. Паскаль искуственно навязывает хороший стиль программирования, он для этого и был придуман - обучать людей программировать, и последнее есть медицинский факт. OK, согласен, логичнее сопоставить C++ и Object Pascal. Но вот с тем, что Паскаль навязывает хороший стиль программирования я не совсем согласен. Да, по сравнению, например с С, он требует более жёсткой типизации, да, на его примере обучают структурированию реализации идей и в сущности, неплохо обучают. Однако остаётся вопрос о средствах структурирования и об их применимости на практике. И здесь, ИМХО, ответ отнюдь не в пользу Pascal/Object Pascal. Как минимум, таких мощных средств как множественное наследование реализаций и шаблоны этот язык лишён (поравьте меня, если я ошибаюсь). Также, как лишена его и Java. Отсюда раньше или позже в реальных условиях возникает проблема эффективности процесса разработки. Я не буду утверждать, что эта проблема всегда принимает критический характер, но всё таки. Дальше, как логичное следствие, возникают нарушения хороших практик, которые сами по себе входят в "нормальную" практику. То же самое приведение типа "сверху вниз" и т.п. С другой стороны, конечно, можно и на Object Pascal не допустить подобных нарушений, например, повсеместно используя интерфейсы (или методы с модификатором abstract, сам когда-то занимался этим ещё на Turbo Pascal 5.5-7.0), но плата за это - потеря эффективности исполнения и увеличение длительности разработки. Т.е., O.Pascal/Java на самом деле при практическом использовании нередко провоцируют нарушения принципов "правильного" проектирования, поскольку опять таки нередко ставят программиста в условия, где сочетание: а) сильной согласованности исходных текстов при их глубокой структурированности; б) эффективности исполнения; в) скорости разработки становится практически недостижимым, тогда как C++ эти задачи блестяще (оговорюсь: на фоне остальных) решает. Но! Решает только при адекватном подходе к разработке, который, ИМХО, является логичным продолжением подхода, каковому обучают на примере Pascal. Т.е. умение программировать на паскале влияет на умение программировать на C/C++. Естественно, согласен, но только когда умение сие развивается до того, что начинает логично применять концепции C++. Развитие же в "обратном направлении", т.е., сознательный переход с C++ на O.Pascal, ИМХО, является свидетельством определённого рода деградации. PS. За ссылку, конечно, спасибо, только я её уж лет десять как прочёл. PPS. Вот, тоже рекомендую: Б. Лисков, Дж. Гатэг, Использование абстракций и спецификаций при разработке программ, М. Мир - 1989, 424 c. ISBN 5-03-000489-0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 06:37 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
Всех, у кого есть нормальный "спортивный" интерес, отсылаю к библиотеке Loki. Поверьте, те кто пишут на С++ в большинстве своем имеют приличную практику на pascal-e (Turbo-Pascal и Delphi наверное никого стороной не обошли :) ), т.е. мы вполне адектватно можем сравнивать эти языки. А сравнивать там практически нечего. На С++ можно писать в pascal-стиле, если ничего "интересного" не использовать. И получим тогда функциональный эквивалент . А вот когда начинаешь использовать именно идиомы языка, то pascal просто остается стоять, где стоял, тогда как С++ уноситься в "заоблачные" дали. (поэт, однако...) :) Просто всем тем, кто любит Delphi, но при этом немного разбирается в С++ советую внимательно рассмотреть библиотеку - она небольшая. Надеюсь, многим будет интересно (а многие так и просто опупеют). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 08:27 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Геннадий Васильев >OK, согласен, логичнее сопоставить C++ и Object Pascal. Но вот с тем, что Паскаль навязывает хороший стиль программирования я не совсем согласен. Я не очень хорошо знаю Object Pascal, по-моему паскаль сильно испортили, пытаясь подогнать под современную тогда ОО концепцию. Но чтоб на классическом (не ОО) паскале писать неправильно, нужно очень стараться. Гораздо проще и компактней писать правильно: с соблюдением структуры, объявлением правильных типов и т.д. >Да, по сравнению, например с С, он требует более жёсткой типизации, да, на его примере обучают структурированию реализации идей и в сущности, неплохо обучают. Некоторое взаимопонимание имеет место: знание паскаля положительно сказывается на общий уровень программиста. Такое знание является побочным эффектом обучения, просто паскаль очень подходящий для обучения общим принципам язык. Абсолютно согласен что писать реальные программы на паскале - небольшое удовольствие, сам не люблю и не пишу. Да он и не предназначен для этого: паскаль по определению проверяет типы и потому медленный (проверки можно выключить, но это уже будет не паскаль), эти begin end задолбешься везде ставить. Потому в качестве языка для прикладной системы (дельфи) он выбран ИМХО неудачно, я бы лично предпочел C++. Но если вдуматься эти различия - только константа, ничего существенного. Также согласен, что недостача чего-то паскале может привести к тому, что программисты начнут халтурить и нарушать принципы правильного программирования. Вопрос только в том, насколько часто это встречается. Так вот я этого не встречал ни разу, хотя вполне допускаю такую возможность. Множественное наследование. Я никогда не сталкивался с необходимостью использования и не очень представляю, какие существенные преимущества оно дает. Существенные это те, которые перевешивают проблемы, порожденные введением в язык множественного наследования. Объясните если есть возможность. Наболевший вопрос. У кого-нибудь есть каие-нибудь данные по сравнению C++ и C на аналогичных проектах в смысле размеров исходников, затраченного труда? То, что я знаю почему-то явно не в пользу C++. Но я специальных исследований не проводил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 07:04 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 c127 Множественное наследование. Я никогда не сталкивался с необходимостью использования и не очень представляю, какие существенные преимущества оно дает. Существенные это те, которые перевешивают проблемы, порожденные введением в язык множественного наследования. Объясните если есть возможность. Никогда не может быть необходимости использовать какие-то определенные идиомы (т.к. любая задача решается множеством способов). Мы их можем только удачно выбирать. Правильно выбранная идиома может сэкономить трудозатраты в разы. Все проблемы с множественным наследованием давно решены, нет таких проблем. Можно пользоваться. :)) Наболевший вопрос. У кого-нибудь есть каие-нибудь данные по сравнению C++ и C на аналогичных проектах в смысле размеров исходников, затраченного труда? То, что я знаю почему-то явно не в пользу C++. Но я специальных исследований не проводил. Рискну предположить, что АНАЛОГИЧНЫЕ проекты на С и C++ не решают. Можно на С++ писать чисто сишный код! Почему нет. Если отключить при компиляции механизм исключений и run-time type information, то полученный двоичный код будет аналогичен написанному на С. Если интересует вопрос, что лучше, С или С++, то его надо задавать так: Что лучше, структурный подход или ООП. В некоторых случаях (автоматные модели) структурный подход лучше! Чем мы занимаемся? Надо знать, чтобы ответить адекватно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 07:40 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 c127 Да он и не предназначен для этого: паскаль по определению проверяет типы и потому медленный (проверки можно выключить, но это уже будет не паскаль), Ээээ..., по-моему, ты ошибаешься. Паскаль проверяет типы только во время компиляции, хотя в нём и есть приведение чего хошь к чему хошь. ИМХО, через промежуточное преобразование к pointer. эти begin end задолбешься везде ставить. :) ну, я думаю, по этому поводу спорить не будем. :) Потому в качестве языка для прикладной системы (дельфи) он выбран ИМХО неудачно, я бы лично предпочел C++. Но если вдуматься эти различия - только константа, ничего существенного. Delphi стала логичным развитием вполне себе успешного Turbo Pascal, а С++ тогда ещё не развился до нынешнего состояния. Но собственно, речь не об этом. Множественное наследование. Я никогда не сталкивался с необходимостью использования и не очень представляю, какие существенные преимущества оно дает. Существенные это те, которые перевешивают проблемы, порожденные введением в язык множественного наследования. Объясните если есть возможность. Хммм... если обобщённо, то МН здорово экономит силы на реализации подмешиваемых интерфейсов. Иначе приходится писать гору дополнительного кода для связи методов, унаследованных от подмешанных интерфейсов с какими-то объектами, реализующими методы интерфейсов. Посмотри ATL - она в немалой степени построена на МН. Иными словами, существенное преимущество МН перед одиночным наследованием в экономии сил, затрачиваемых на реализацию. Соответственно, проще отладка, тестирование и т.п. Кстати, здесь присоединюсь к vdimas, поскольку необходимости использования МН на самом деле нет. Его всегда можно эмулировать одиночным наследованием реализации и множественным наследованием интерфейсов. Просто его использование позволяет обойтись без этой эмуляции. :) Из недостатков можно отметить то, что использование МН требует более вдумчивого проектирования. Наболевший вопрос. У кого-нибудь есть каие-нибудь данные по сравнению C++ и C на аналогичных проектах в смысле размеров исходников, затраченного труда? То, что я знаю почему-то явно не в пользу C++. Но я специальных исследований не проводил. Поищи в сети, где-то есть. На RSDN (www.rsdn.ru) в форуме, кажется "философия программироваия" проскакивало что-то из этой серии. От себя рискну предположить, что скорее всего ты и будешь обнаруживать сравнения совсем не в пользу C++ по целому ряду причин. Смотри, если кто-то пишет на C++, то аналогичную программу он скорее всего не будет писать на чистом C, т.е., ему объективную оценку просто не из чего получать. Обратный случай: некий C-шный продукт переписывается "по-объектному". Следовательно, скорее всего, в нём блокируются какие-то трюки C (вроде использования void*), добавляются новые уровни абстракции и т.п., т.е., это уже не тот же самый продукт . Ну и кроме того, когда осваивают C++, на первых порах разработчики клепают горы ошибок в проектировании. Результат получается не ахти... Вот тебе и отрицательное сравнение. Третий вариант - когда в последнем случае среди C-шников попадается хороший C++-ник. Вот здесь есть основания для получения сравнения "в пользу" C++. Ну вот. И как ты думаешь, каких случаев (и следовательно - фактов оценок ) больше? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 02:57 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Геннадий Васильев >Ээээ..., по-моему, ты ошибаешься. Паскаль проверяет типы только во время компиляции, хотя в нём и есть приведение чего хошь к чему хошь. ИМХО, через промежуточное преобразование к pointer. Нет, например в случае объявления: type t=1..333; var y: t; тип должен проверяться в случае каждого присваивания вида y:=что_то;. Есть и более сложные случаи т.е. тормозит сильно. У классического паскаля очень строго с типами, целая наука. >Delphi стала логичным развитием вполне себе успешного Turbo Pascal, а С++ тогда ещё не развился до нынешнего состояния В то время (начало девяностых) C++ был уже на уровне, по крайней мере на уровне тогдашнего объектного паскаля. Не было в C++ темплейтов, какого-нибудь множественного наследование, так их objectpascal и сейчас нет и никому они в дельфях не нужны. А потом, как долго все ждали сишного варианта, а когда через несколько лет вышел CBuilder все вдруг стали его сильно ругать, так до сих пор и ругают. Хотя казалось бы, с точки зрения производителя нет никакой разницы, какой язык использовать, и тот и другой компилятор у борланда был. Это еще один аргумент против C++. >Кстати, здесь присоединюсь к vdimas, поскольку необходимости использования МН на самом деле нет. Его всегда можно эмулировать одиночным наследованием реализации и множественным наследованием интерфейсов. Просто его использование позволяет обойтись без этой эмуляции. :) Так и я о том же: сэмулировать множественное наследование в большинстве случаев ничего не стоит. Так нужно ли усложнять язык и вносить в него проблемы ради небольшого выигрыша. Я попробую посмотреть на RDSN, спасибо. Мне в самом деле интересно разобраться. >Следовательно, скорее всего, в нём блокируются какие-то трюки C (вроде использования void*), добавляются новые уровни абстракции и т.п., т.е., это уже не тот же самый продукт Но ведь задача решается та же. В конечном счете ведь нас интересует решение задачи. C++ гораздо богаче чем C, вроде бы должен приводить к значительному упрощению кода и ускорению процесса разработки. А в действительности в тех двух-трех случаях когда велась параллельная разработка и которые мне удалось понаблюдать, выигрыша не наблюдалось. И потом, если C++ такой супер-пупер и имеет такие неоспоримые преимущества, то уже должен был бы уже вытеснить C, по крайней мере на больших проектах. На C бы писались драйвера и все. А ведь этого не происходит, до сих пор многие крупные проекты пишутся на сях. Только консерватизмом такую ситуацию объяснить по-моему нельзя. Например паскаль в промышленности практически умер и кое-как держится только из-за дельфи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 06:44 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 c127 Мне очень импонирует желание с127 спокойно разобраться, без скатывания на религиозные войны. К сожалению, здесь в форуме, нет возможности выложить реальные интересные материалы по тому же множественному наследованию. Если с127 кинет мне письмо, я в ответ вышлю вполне законченную иерархию классов (из реального проекта) с документацией и диаграммами наследования. Очень небольшой объем исходного кода при немалой функциональности, думаю, сможет послужить аргументом. Да, и строгая типизация далеко не последнюю роль играет, но тут надо смотреть и обсуждать конкретные моменты (что это? почему именно так? и что это нам дает?). Согласен, что переписанная "в лоб" на С++ С-шная задача в общем случае не даст выигрыша (напр. некий несложный алгоритм). На С++ задачи решаются ПРИНЦИПИАЛЬНО ПО-ДРУГОМУ. Реальный выигрыш от ООП можно получить там, где моделируется большая система взаимодействующих сущностей. До определенной сложности подобные системы можно разрабатывать с применением процедурного подхода, но потом начинаются трудности. На С++, при правильном подходе, трудности не начинаются НИКОГДА! Сколь большой бы не была система, если ее удается представить в иерархическом виде, то на каждом уровне происходит оперирование вполне счетным числом понятий. Пиши. После освоения множественного наследования перейдем к шаблонам и стратегиям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 09:30 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 c127 Нет, например в случае объявления: type t=1..333; var y: t; тип должен проверяться в случае каждого присваивания вида y:=что_то;. Есть и более сложные случаи т.е. тормозит сильно. У классического паскаля очень строго с типами, целая наука. Да, верно, я и забыл о паскалевской строгости с enumeration. Так и я о том же: сэмулировать множественное наследование в большинстве случаев ничего не стоит. Так нужно ли усложнять язык и вносить в него проблемы ради небольшого выигрыша. ИМХО, стОит, поскольку множественное наследование реализаций позволяет в ряде случаев сэкономить ручной труд и вобщем-то, является логичным развитием концепции наследования. Но ведь задача решается та же. В конечном счете ведь нас интересует решение задачи. Да, именно так. Но после решения задачи всегда остаётся период сопровождения, который нельзя игнорировать при начальной разработке программы. Кстати, вспомнилось, если не читал, то советую посмотреть книжку Алана Голуба "Правила програмирования на C & C++". Хоть сама по себе она содержит довольно много устаревших и просто спорных вещей, но там есть интересное в контексте нашей беседы высказывание по поводу "гибридных" проектов - когда в рамках одного проекта сочетаются подходы C и C++. Дословно не помню, но суть сводилась к следующему: хоть менеджеры и утверждают, что "раз такие проекты эксплуатируются, то этот подход работает", но его сопровождение превращается в один непрерывный кошмар. Я, в принципе, двумя руками поддерживаю подобную оценку. Беда в том, что немалая часть проектов на C++ выполнена как раз по "гибридной" схеме. Можно даже правило определённое вывести: если активно используется MFC, то это - гибридный проект. Почему? Потому что MFC в целом представляет собой всё что угодно, только не объектную C++-библиотеку. Ну не объектная она и всё тут. Для того, чтобы ей пользоваться "объектно" и получить пряники, обещаемые ОО-подходом нужно сделать ещё гору врапперов, надстроек и т.п. Готов принять поток критики, но я до сих пор уверен, что факт наличия работающего продукта ещё не означает, что этот продукт работает хорошо, уж тем более, это не является критерием того, что подходы, использованные в реализации проекта можно смело переносить на другие продукты. Никода не доводилось ужасаться по поводу своего кода, помещённого в выпущенный продукт? Мне - приходилось. :) Так что, факт "сданности" продукта сам по себе ничего не означает. Он может служить подтверждением работоспособности тех или иных методик, но для того, чтобы сравнивать методики сами по себе, нужно как очень детальное сравнение двух или более готовых продуктов, и, что не менее важно - сравнение характеристик цикла разработки и сопровождения. А их и считать-то толком не всегда умеют... А ведь этого [С++ не вытесняет C] не происходит, до сих пор многие крупные проекты пишутся на сях. Только консерватизмом такую ситуацию объяснить по-моему нельзя. Например паскаль в промышленности практически умер и кое-как держится только из-за дельфи. Ты не учитываешь фактора определённой стереотипичности мышления, присущей программстам. Кроме сугубо рациональных аспектов использования тех или иных языклв есть ещё и... Бытовала такая шутка: "Для чего предназначены языки программирования? Pascal - для студентов, APL - для марсиан, Lisp - для учёных, Smalltalk - для домохозяек, C - для программистов ". Там было перечислено много языков, остальных не помню, но суть, надеюсь, ясна. Потом опять же - "настоящие программисты пишут на Fortran"... :) Потом, фактор того, что масса ПО уже написана на C (те же операционные системы). Есть ещё и фактор, который можно сформулировать так: "я всегда писал на C и у меня всё получалось". Воздействие такого соображения очень трудно преодолеть. Приходится "тыкать носом" в очевидные проколы, которых удалось бы избежать, не будь там преобразования к void* и т.п. Наконец, есть ещё фактор наличия инструментальных средств. Например, компиляторы C++ только сейчас начали подтягиваться к реализации стандарта ANSI. Соответственно, перенос разработок с платформы на платформу был затруднителен. С другой стороны, реализации C отличались по большому счёту только набором библиотек. Да и станарт C был принят, если не ошибаюсь, аж в 90 году. И наконец, ИМХО, один из самых серъёзных, если не самый серьёзный фактор. "Правильная", т.е., "объектная" разработка на C++ требует бОльших вложений на начальной фазе развития проекта, чем разработка на C, особенно это заметно при переходе с C на C++ (проверял на себе). Различия проявляются позже - когда начинается эволюция/сопровождение. Это, кстати, неоднократно отмечалось апологетами ОО-подхода, цитат сейчас привести, к сожалению, не могу, но по-моему, такие высказывания есть у Буча, Шлеера, Голуба... В середине 90-х на эту тему только и жужжали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:09 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2vdimas\r /topic/27708&pg=1\r здесь как-то я просил привести пример из реального проекта с использованием шаблонов и мн. \r (ну не дорос видимо я до использования шаблонов в своих проектах. очевидно потому что \r задачи стоят проще. нет, например, необходимости лепить свои GUI.)\r был бы багодарен за разьяснения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 09:33 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 Геннадий Васильев Спасибо, разбираюсь. Попробую почитать Голуба. Может быть действительно проблема в гибридности проектов. Звучит правдоподобно. Все-таки консерватизмом относительная непопулярность C++ в сравнении с C по-моему не объясняется. По-видимому есть другие серьезные причины. >"Для чего предназначены языки программирования? Pascal - для студентов, APL - для марсиан, Lisp - для учёных, Smalltalk - для домохозяек, C - для программистов" Это не те ли домохозяйки, у которых кухоннй UNIX-компьютер управляет работой моющей машины? Smalltalk для этого подходит. Скорее там речь шла о васике для домохозяек, а для ученых - о фортране. Шутка. 2 vdimas Отправляй чингизу, он разрешил, к тому же его этот вопрос тоже интересует: tchingiz@ukrpost.net Попробуем разобраться. Согласен с тем, что в C++ задача должна решаться по другому, чем в C, уж на этапе кодирования - наверняка. Но не понимаю, почему же мало кто в реальности ее решает по-другому. Я пока вижу 3 варианта. При этом я пока принимаю за аксиому полезность ООП. 1) ООП в при кодировании в C++ счень сложен, по крайней мере для среднего разработчика, человек быстро скатывается к более простому сишному стилю. 2) Сишный стиль настолько прост и удобен, что от него нельзя отказаться. 3) Имеются серьезные скрытые проблемы, отличные от п.1, в практическом использовании C++ в кодировании ОО приложений, которые вынуждают программистов использовать более простой C-стиль, выдерживают только самые стойкие. В полезности шаблонов я не сомневаюсь. Идея мне очень нравится, но вот похоже Степанов недоволен ее реализацией в C++. Я не очень понимаю почему, но ему виднее. Насколько я понимаю, к OOP-у шаблоны не имют отношения. Хотя я не большой знаток основ ООП и готов выслушать другие мнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2003, 00:15 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
Непопулярность C++ еще можно объяснить "техническими" причинами. У меня было очень много знакомых, которые еще в студенчестве, в 1993-5 гг подавали неплохие надежды как С++-ники. Однако, вдруг вышел Delphi, а под С++ ничего такого не вышло :((. Большая часть народу просто "прыгнула" на него и на прочие визуальные редакторы. До сих пор не понимаю, почему они так задержали с ВСВ. BC++ 5.0 - это был просто кошмар (не путать с BCB), очевидно этот проект они забросили. (а OWL гораздо лучше была, чем MFC - практически "чисто" объектно-ориентирована). Да, в среде *никсов C++ - сверхпопулярен. А виндовая платформа эмэфцой изгажена. Когда-то Майкрософт запретила поставщикам других С++-компиляторов поставлять в одной коробке собственные наработки (тот же OWL) и MFC. Так что, мы просто не имеем альтернативы мелкомягким поделкам (MFC/ATL/WTL). А альтернативы просятся давно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2003, 10:19 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
2 c127 ...При этом я пока принимаю за аксиому полезность ООП. :) Ты путаешь наблюдение следствий и идентификацию причин. Т.е., в принципе, мне перечисленные пункты понравились, но, ИМХО, в качестве определения причины они "бьют мимо цели". Вот почему: 1) ООП в при кодировании в C++ счень сложен, по крайней мере для среднего разработчика, человек быстро скатывается к более простому сишному стилю. Проблема не в этом. Проблема в том, что разработчики часто поставлены в условия, когда им необходимо писать так, чтобы это было понятно даже... ммм... скажем так, не очень опытному коллеге. При этом упор делается не на то, что этому самому неопытному коллеге было бы очень полезно поковыряться в сложной программе, сделанной хорошим C++-ником, а на исключение фактора непредсказуемости времени, которое новичок потратит на саморазвите в этом случае. Т.е., не "низы поднимаем", а "опускаем" тех, кто более развит. И квалификация при этом всё чаще связывается не с умением мыслить, а с запоминанием API, технологий и прочим бредом. А само по себе кодирование ООП-ной программы на C++ ничуть не сложнее, чем, например, на том же Java. 2) Сишный стиль настолько прост и удобен, что от него нельзя отказаться. Неверная оценка. Сишный (процедурный) стиль прост и удобен для определённой категории разработчиков, безотносительно их "хорошести" или "плохости". Кроме того, сишный стиль всегда будет присутствовать на компьютерах с фон-неймановской архитектурой. 3) Имеются серьезные скрытые проблемы, отличные от п.1, в практическом использовании C++ в кодировании ОО приложений, которые вынуждают программистов использовать более простой C-стиль, выдерживают только самые стойкие. Ну всё, обливаю себя бальзамом. Я стойкий. :) По моим наблюдениям, ни в коем случае не претендующим на полноту, самым большим откровением для "сишников" становится гораздо более мелкая объектная структуризация программы, чем это кажется им на первый взгляд. Ну, например, мне неоднократно задавали вопросы типа: "для чего эти смарт-пойнтеры-то нужны? Программу лучше тестировать надо!". Понимаешь, достаточно трудно используя, например, стандартные UML-диаграммы показать реализацию, например, массива указателей. Для сишника со стажем это просто массив указателей, для C++-ника же - инстанцирование шаблона vector<>. Так что, вынуждают переходить на "стиль C" нередко конкретные люди, а не "скрытые проблемы" языка. Основное, что я хочу сказать, наверное, можно выразить кратко: причины эффективного применения C++ ищи в конкретных людях , причины провалов - в командах и менеджменте. Почему? Потому что эффективное использование C++ одним разработчиком в ряде случаев (я не хочу сказать - всегда) сводит на нет необходимость команды, менеджеров, промежуточной документации и прочих ритуальных плясок, тогда как неэффективность обусловлена коммуникационными барьерами между людьми. Вот уж действительно - пляски так пляски. Другая сторона медали, ИМХО, в том, что процедурный стиль ближе "паковщикам" по терминологии А.Картера, кои составляют бОльшую часть людей. Отсюда и бОльшая популярность языков вроде C, а вернее - процедурного подхода. Отвлечённое наблюдение, возможно не совсем точное. C++ как и куча языков-сверстников развивался с прицелом, в частности, на повышение эффективности индивидуала , и перекладывание работы по верификации программы на компилятор. Сильная типизация - как раз игрища из этой области, поскольку понятие "тип" определяется как набор допустимых операций. А современные нам языки, такие как Java и C# направлены на поддержку команд, менеджмента... На что угодно, только не на то, чтобы дать программисту в руки инструмент воплощения видения картины мира. Чувствуешь "изменение" вектора? Вместо развития, как повышения уровня абстракции и систематизации получается деградация. В полезности шаблонов я не сомневаюсь. Идея мне очень нравится, но вот похоже Степанов недоволен ее реализацией в C++. Я не очень понимаю почему, но ему виднее. Насколько я понимаю, к OOP-у шаблоны не имют отношения. Хотя я не большой знаток основ ООП и готов выслушать другие мнения. Как минимум, он недоволен отсутсвием consraints в шаблонах, насколько я помню. Ещё у него в интервью (где-то в сети есть) были замечательные слова (не дословно): "мне говорят, что надо идти туда, где большие деньги, но по-моему это дурно пахнет". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2003, 07:27 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
Геннадий Васильев >Проблема в том, что разработчики часто поставлены в условия, когда им необходимо писать так, чтобы это было понятно даже... ммм... скажем так, не очень опытному коллеге. Я такого не встречал, хотя наверное где-то есть и такое. То что я видел - каждый программирует как хочет. В лучшем случае оговаривается система именования переменных, функций, файлов, классов и пр. >Так что, вынуждают переходить на "стиль C" нередко конкретные люди, а не "скрытые проблемы" языка. Очень хорошо, но причины-то в чем? Почему конкретные люди, для облегчения жизни которых придуман и C++, не используют его преимущества в полной мере. Ситуация ведь интересная: люди придумали вроде бы удобный и правильный язык, защищают его от нападок несознательных элементов, а сами же в большинстве не используют его удобство. Всякая C++ программа, по крайней мере на этапе разработки, это постоянные проблемы с памятью, путанье типов и прочие прелести, свойственные C, от них же и пытались избавиться. Да и если посмотреть функции (методы), то там скорее всего будет последовательность new в начале и delete в конце. По большому счету оно ничем не лучше, чем malloc-free? Взял книжку "C++ programming with CORBA" ISBN 0-471-28306-1. Книга по практическому применению C++. Открыл наугад на 239 странице. Вижу: char **print_command; char **queue_command; CORBA::String_var printer_name; .... //constructor PrinterImp::printerImpl(const char *p_command, const char *q_command, const char *name, CORBA::typeCode_ptr dp_eval_ret_type) { print_command = new char *[ 4 ]; print_command=new char[256]; ...... } Это основной конструктор, других конструкторов нет. стр. 240: void PrinterImp::print_file(const char *fn) { strcpy(print_command," "); strcat(print_command,fn); .... } Чистый C, от C++ одно название. Книгу я специально не выбирал, это первая попавшаяся под руку. >Отвлечённое наблюдение, возможно не совсем точное. C++ как и куча языков-сверстников развивался с прицелом, в частности, на повышение эффективности индивидуала, и перекладывание работы по верификации программы на компилятор..... >А современные нам языки, такие как Java и C# направлены на поддержку команд, менеджмента... Нет, при создании C++ говорились те же самые слова насчет командной работы. Причем упор делался именно на большие проекты и большие команды разработчиков. Это одна из причин введения инкапсуляции - закрыть доступ внутрь класса, чтоб пользователи библиотек не лазили куда не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2003, 05:39 |
|
||
|
Не дадим C++ в обиду
|
|||
|---|---|---|---|
|
#18+
а вот пример свежий хочу привести. в час носи ко мне пришли и говорят(на работе я был, случайно типа) надо сделать секвенцию кадров с цифровыми часами от 0 до 20 минут на синем фоне в правом нижнем углу. незнаю зачем, и почему нет таких плагинов в том же премьере. В общем, надо. Я взял gcc из mingw и dev-c++ и сделал за два часа. на основе нескольких простых классов которые раньше делал сам для себя(пригодились таки). на делфи я бы это сделал за пол часа. ну так я же только начинаю. Но интуиция мне уже говорит, с++ это крутая тема. нужен только опыт. Опыт работы в делфи у меня 5 лет. до этого паскаль. до этого ассемблер(ну, сами понимаете, какие времена были). так вот. с++ это действительно мощная штука для меня. в общем, для меня с++ живее всех живых. за ним и *никс платформами я вижу будущее. по крайней мере свое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2003, 06:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32249443&tid=2034114]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 441ms |

| 0 / 0 |
