Здравствуйте, IT, Вы писали:
IT>Неужели один прочитанный учебник может сделать из вчерашнего студента закоренелого профи?
Нет но начальные знания дать может, а у них и этого нет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
AVK>>Не хами. WH>Простите погорячился. Просто мне надоело что вы с Владом орете на каждом шагу о примитивности С++ при этом имея весьма отдаленные представления о нем.
Нормальные мы имеем представления, не переживай. А о применимости не зря говорим, поскольку наболело. Мы вот вчера с retalik на эту тему общались, у него мнение такое же, хотя до недавнего времени, как я понимаю, он писал на С++. Он тоже наверное весьма отдаленные представления имеет?
AVK>>Я точно так же могу сказать что пока ты не напишешь проект размером больше 1М на шарпе я с тобой на тему C++ vs C# разговаривать не буду. WH>Не боись напишу.
Вот когда напишешь тогда и поговорим. А пока что это, извини за резкость, просто треп.
Здравствуйте, WolfHound, Вы писали:
WH>Хочешь знать что можно сделать на шаблонах?
Вопрос не в том что можно, вопрос в том что нужно. На асме к примеру можно так извратнуться что народ будет кипятком писать, вот только в практическом плане пользы от этого ноль. Главное отличие моего и твоего отношения к С++ в том что мне не шашечки, мне ехать. А вот ехать на С++ не очень удобно, вне зависимости от того читал ты Александреску, или не читал. В полезности шаблонов никто не сомневается, но очень большой кусок их применения в С++ это не столько какой то особенный функционал, сколько залатывание дыр самого языка. Раньше, до шаблонов, подобным образом применяли макросы.
Здравствуйте, WolfHound, Вы писали:
PE>>Значит у тебя аргумент — Александруску и своей головой думать не надо ? WH>Хочешь знать что можно сделать на шаблонах? WH>Без проблем попробуй разберись
1. Сам факт, что книга такого масштаба появилась только сейчас говорит о том, что C++ многогранен.
2. Этот же факт говорит о том, что мало кто понимает всю мощь этого языка.
3. Это же означает, что не только новичек, но и середнячек не потянет все рулезы концентрированного С++.
Такая техника сродни уровню гросстмейстера мирового класса в шахматах — их очень мало.
4. Я не вижу отражения существующих тенденций — компонентное программирование и тд.
__declspec(__dllexport) — это далеко не то, что надо сейчас.
В тех примерах, что ты привел, много интересного. Но все те же вещи можно сделать настолько просто, что любой новичек сразу подхватит проект. В примере про виртуальные конструкторы ты(или не ты) изобрел моникеры и интерфейсы, которые есть в COM, которые есть в других средах под такими же или другими именами, например локаторы.
Я не вижу реальной неоходимости внедрять это. Невозможно заставить людей выучить все.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, alexkro, Вы писали:
AVK>>>Вот о том и речь что ты пытаешься мерять дотнет плюсовым аршином. В отличие от С++ рассматривать C# отдельно от его рантайма не имеет смысла, обычный язык почти без изысков.
A>>Да, я сравниваю языки программирования. Среда исполнения мне не особенно важна.
AVK>В дотнете крайне важна. Без нее языки не имеют смысла. В дотнете по сути все сделано наоборот — шарп разрабатывался под рантайм, а не рантайм под шарп. Собственно это в той или иной степени имеет отношение ко всем языкам дотнета.
A>>Нехороший сайт попался. Нужно поискать "policy basic_string" на www.cuj.com. Первая ссылка — это она и есть.
AVK>Чего то там много, нет времени все это читать. Объясни на пальцах что это такое и какие у него бенефиты.
AVK>>>Языки как раз отличаются не очень сильно, сильно отличается рантайм.
A>>На C++ тоже можно для .NET программировать
AVK>Ну и что? Если укладываться в рамки CLR то от С++ остануться рожки да ножки.
A>>и при этом использовать большинство его (C++) идиом.
AVK>Большинство идиом в managed коде? Не получится.
A>>Кстати, этот подход (C++ для .NET) будет еще более сильно развит в следующей версии VC++.
AVK>Откуда дровишки?
А нужны ли они тебе?
PS: на остальное тоже нет желания отвечать. Только время зря терять, если честно.
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Здравствуйте, alexkro, Вы писали:
DG>>>К тому, что C++ выбирать в качестве языка разработки не удобно(не выгодно и т.д.) DG>>>Одна из основных проблем, что C++ стал слишком тяжелым и слишком уж с тяжелым наследием прошлого. A>>Это твое личное мнение.
PE>С++ — это профессиональный инструмент.
А нам значит нужны какие-то другие инструменты.
PE> Новичку в нем тяжело.
Как и везде.
PE>Нынче хороший С++ программист сродни хорошему шахматисту — и тех и других мало. Разница лишь в том, что программисты на С++ зарабатывают деньги этим самым С++, а шахматисты зарабатывают чаще всего не шахматами.
PE>С одной стороны это хорошо — мощь потрясающая. С другой — изучать этот язык надо долго. PE>Новичку нельзя доверить суппорт проекта на С++ — дохлый номер.
Чистая дискриминация. Ты подразумеваешь, что остальные C++ не поймут?
PE>Такие чудеса, что демонстрирует Александреску, нельзя, к сожалению, внедрять повсюду.
Это не чудеса, а просто новая парадигма дизайна и программирования. Можно ее принять и использовать, а можно программировать как раньше. C++ все поддерживает, недаром его называют multi-paradigm.
Здравствуйте, alexkro, Вы писали:
PE>> Новичку в нем тяжело. A>Как и везде.
Нет. Не везде. На шарп я перепрыгнул езо всяких книг, мануалов и тд. Просто нача писать. Потом были курсы, которые я проспал. В жаве тож самое. Парень ушел от нас и пересел без проблем на жаву. В вот на С++ так не перепрыгнешь.
PE>>Нынче хороший С++ программист сродни хорошему шахматисту — и тех и других мало. Разница лишь в том, что программисты на С++ зарабатывают деньги этим самым С++, а шахматисты зарабатывают чаще всего не шахматами. PE>>С одной стороны это хорошо — мощь потрясающая. С другой — изучать этот язык надо долго. PE>>Новичку нельзя доверить суппорт проекта на С++ — дохлый номер.
A>Чистая дискриминация. Ты подразумеваешь, что остальные C++ не поймут?
Это не дискриминация. Больше всего рядовых игроков, рядовых программистов.
Даеко не всякий сможет подойти к помосту и выжать 300 кг. Хотя теоретически это по плечу каждому.
С шахматами и С++ тоже самое.
PE>>Такие чудеса, что демонстрирует Александреску, нельзя, к сожалению, внедрять повсюду.
A>Это не чудеса, а просто новая парадигма дизайна и программирования. Можно ее принять и использовать, а можно программировать как раньше. C++ все поддерживает, недаром его называют multi-paradigm.
В дизайне я не увидел ничего нового. Все это было, только реализовывалось более громоздко, но более наглядно.
Я называю подход Александреску — концентрированный С++
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Несколько гвоздей в гроб подхода Александруску.
PE>1. Сам факт, что книга такого масштаба появилась только сейчас говорит о том, что C++ многогранен.
Многогранен — это точно. Но что значит "только сейчас"? Книга написана в 2001-м, некоторые идеи (например, static_checker<> — так его раньше Александреску называл) были у него уже опубликованы в 1999-м. Про Typelist он тоже в 1999-м проговорился. Все это — почти сразу после принятия стандарта.
PE>2. Этот же факт говорит о том, что мало кто понимает всю мощь этого языка.
Что-ж, многие еще до сих пор не знают, что такое "using namespace std". Разве это о чем-либо говорит? Просто люди когда-то научились программировать на C++ (на самом деле на C with classes), и с тех пор им было пофиг свои знания обновить.
Здравствуйте, alexkro, Вы писали:
PE>>1. Сам факт, что книга такого масштаба появилась только сейчас говорит о том, что C++ многогранен.
A>Многогранен — это точно. Но что значит "только сейчас"? Книга написана в 2001-м, некоторые идеи (например, static_checker<> — так его раньше Александреску называл) были у него уже опубликованы в 1999-м. Про Typelist он тоже в 1999-м проговорился. Все это — почти сразу после принятия стандарта.
Все равно поздно. Как ни крути. Уже 2003 год.
PE>>2. Этот же факт говорит о том, что мало кто понимает всю мощь этого языка.
A>Что-ж, многие еще до сих пор не знают, что такое "using namespace std". Разве это о чем-либо говорит? Просто люди когда-то научились программировать на C++ (на самом деле на C with classes), и с тех пор им было пофиг свои знания обновить.
Таких, к сожалению, большинство. Новозможно всем сразу стать профессионалами уровня Александреску.
Здравствуйте, AndrewVK, Вы писали:
AVK>Вопрос не в том что можно, вопрос в том что нужно. хъ
Былабы возможность,а применение найдется. Нука изобрази на C#
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AndrewVK, Вы писали:
AVK>>Вопрос не в том что можно, вопрос в том что нужно. хъ WH>Былабы возможность,а применение найдется. Нука изобрази на C#
Изоразить можно.Но мне волм разбирать по коду, какая цель твоих примеров.
Если цель — показать крутой полиморфизм, то пиши сам.
Если конкретная задача для пользователя — можно попробовать.
Мне вот не нгадо выписывать чудеса всякие. Заказчик пришел и сказал — напиши аппликацию для специфического HTMLа, что можно было легко расширять ее плагинами, скриптами и тд.
Этим следует заняться.
А если — напиши мне это
// --------------------------------------------------------------------
// A little helper class for setting a boolean flag and clearing it
// on destruction.class BoolLock
{
bool* _pFlag;
public:
BoolLock(bool* pFlag)
{
_pFlag = pFlag;
*pFlag = true;
}
~BoolLock()
{
*_pFlag = false;
}
};
Здравствуйте, WolfHound, Вы писали:
AVK>>Вопрос не в том что можно, вопрос в том что нужно. хъ WH>Былабы возможность,а применение найдется. Нука изобрази на C#
Мне чего, заняться нечем разбираться в коде, да потом еще и реализовывать на шарпе. Нужно будет, реализую.
Здравствуйте, Plutonia Experiment, Вы писали:
PE>3. Это же означает, что не только новичек, но и середнячек не потянет все рулезы концентрированного С++.
Если человек хочет его можно дотяуть до этого уровня очень быстро.
PE>Такая техника сродни уровню гросстмейстера мирового класса в шахматах — их очень мало.
Лесть тебя не спасет.
PE>4. Я не вижу отражения существующих тенденций — компонентное программирование и тд. PE>__declspec(__dllexport) — это далеко не то, что надо сейчас.
Согласен. Но во первых и на этом можно очень много, во вторых есть много задачь где это не актуально.
PE>В тех примерах, что ты привел, много интересного. Но все те же вещи можно сделать настолько просто, что любой новичек сразу подхватит проект.
Ты бы лучше смотрел интерфейс, а не реализацию. Например тотже boost может легко использовать любой новичек однако понять как именно он работает довольно не просто.
PE>В примере про виртуальные конструкторы ты(или не ты) изобрел моникеры и интерфейсы, которые есть в COM, которые есть в других средах под такими же или другими именами, например локаторы.
Это я сделал на спор. Один дельфист не верил что такое возможно.
PE>Я не вижу реальной неоходимости внедрять это. Невозможно заставить людей выучить все.
Ну сериализация очень практична, SWL это потенциально очень мощьная, гибкая и лаконичная оконная библиотека только надо комуто ее написать.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, AndrewVK, Вы писали:
AVK>Мне чего, заняться нечем разбираться в коде, да потом еще и реализовывать на шарпе. Нужно будет, реализую.
А что тут разбираться это просто пример того как можно написать несколько стандартных кирпичиков, а потом из них собирать классы.
А как на C# можно из стандартных кирпичиков собирать классы?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
PE>>Таких, к сожалению, большинство. Новозможно всем сразу стать профессионалами уровня Александреску.
WH>Это проще чем кажется. Стоит только захотеть.
В том то и проблема, что далеко не все смогут захотеть.
Очень сложно собрать хотябы пять человек, у которых будет абсолютно одинаковые цели, хобби, интересы и тд.
У нас работает над проектом примерно 40 человек в 4 городах в разных странах.
У каждого свое хобби, своя семья или отсутвие оной. Свои интересы. Своя жизнь.
Где нам взять 40 профессионалов уровня Александреску ?
WH>А если не хочешь то по крайней мере не надо орать что С++ примитивин. Именно это меня раздражает.
Я такого не говорил. Я сказал, что это профессинальный инструмент, многогранный, мощный и тд.
В этом его недостаток.
Здравствуйте, WolfHound, Вы писали:
AVK>>Мне чего, заняться нечем разбираться в коде, да потом еще и реализовывать на шарпе. Нужно будет, реализую. WH>А что тут разбираться это просто пример того как можно написать несколько стандартных кирпичиков, а потом из них собирать классы.
Просто чтобы прочитать такой объем исходников нужно немалое время. Я тебе могу тоже сейчас из януса кинуть кусок исходников большого объема и попросить реализовать это на С++.
WH>А как на C# можно из стандартных кирпичиков собирать классы?
Что значит из стандартных кирпичиков? Ты имеешь ввиду подключение реализаций? Пример того как это реализовать я приводил в форуме по дотнету.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, AndrewVK, Вы писали:
AVK>>Мне чего, заняться нечем разбираться в коде, да потом еще и реализовывать на шарпе. Нужно будет, реализую. WH>А что тут разбираться это просто пример того как можно написать несколько стандартных кирпичиков, а потом из них собирать классы. WH>А как на C# можно из стандартных кирпичиков собирать классы?
И ты столько кода нагнал, чтобы показать всю прелесть множественного наследования ?
Посмотри мои примеры на ATL — для этого не нужен Александреску.
Теперь по существу. Дизайн C# сделан специально для того, что бы такое конструирование запретить.
1. Разные компилеры далеко не 100% совместимы.
2. В компонентном программирования такие навороты не дают преимущества.
3. Сложность обнаружения и исправления ошибки. Пока не узнаешь стандарт и особенности компилера, не знаешь даже, где твоя ошибка, что это за ошибка, и твояли это ошика.
4. Сложность внесения изменений.
5. Ненаглядный дизайн.
Конструирование необходимо для быстрого решения прикладной проблемы.
В Шарпе это делается несколько другими средствами.
class ATL_NO_VTABLE CLayer :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CLayer, &CLSID_Layer>,
public ISupportErrorInfo,
public IDispatchImpl<IObjectImpl<ILayer>, &IID_ILayer, &LIBID_VPISCRIPTINGLib>,
public IProvideClassInfo2Impl<&CLSID_Layer, &IID_ILayer, &LIBID_VPISCRIPTINGLib>,
public CLeakHelper
class ATL_NO_VTABLE CNpNode :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CNpNode, &CLSID_NpNode>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CNpNode>,
public IConnectionPointImpl<CNpNode, &IID_IAdviseSink>,
public IConnectionPointImpl<CNpNode, &IID_IVPIAdviseSink>,
public IConnectionPointImpl<CNpNode, &IID_IVPIObjectAdviseSink>,
public IPropertyNotifySinkCP<CNpNode>,
public IDispatchImpl<INpNode, &IID_INpNode, &LIBID_NPDATALib>,
public CNpDataBinder<CNpNode, t_nod>,
public INpDataObject,
public IPerPropertyBrowsing
Здравствуйте, AndrewVK, Вы писали:
AVK>Просто чтобы прочитать такой объем исходников нужно немалое время. Я тебе могу тоже сейчас из януса кинуть кусок исходников большого объема и попросить реализовать это на С++.
Если бы ты потратил хотябы минуту то понял бы что там все повторяется и разобрался бы за следующие 2 мнуты.
AVK>Что значит из стандартных кирпичиков? Ты имеешь ввиду подключение реализаций? Пример того как это реализовать я приводил в форуме по дотнету.
Вобщем да. А ссылку можно? Хотя у меня функциональность по больше в моем варианте один кирпичик может изменять дугой причем только с использованием полиморфизма времени компиляции те без ущерба производительности.
... << RSDN@Home 1.1 alpha 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, alexkro, Вы писали:
A>Здравствуйте, VladD2, Вы писали:
VD>>Да конечно появление шаблонов откроет пути к совершенству.
A>Спорный вопрос. C# generics ничего общего с шаблонами не имеют.
Да? Ты хоть гуру CLI-gyro (проект МС-ресерча добавляющий generics к SSCLI)? Один к одному шаблоны. Только слегка упрощенные, ну, и идея шаблонов развита так что шаблонными можно делать даже интерфейсы.
A> Пока что я для них одно применение вижу — типизированные контейнеры.
Почему только контейнеры? Любые алгоритмы толерантные к типам можно будет выражать с их помощью. Хотя бесспорно, что коллекции — это самое важное место где можно применять шаблоны.
A> Никакой новой парадигмы программирования они не откроют.
А новой парадигмы и не нужно. Нужно расширение дотнета позволяющее писать более эффективные и безопастные приложения. Парадигмы же достаточно и той что есть.
A> Даже такая простая вещь как policy-based programming не станет возможна в C#.
Что ты под этим понимаешь?
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.