Здравствуйте, FR, Вы писали:
FR>Не катит сравнивай сравнимое или убирай фреймворк или сравнивай шарповскую сериализацию, с какой-нибудь FR>распрастраненой библиотекой сериализации под C++ например boost::serialization.
А boost::serialization умеет работать с таблицами БД ? Тот фреймворк где я взял код умеет гораздо больше, чем boost::serialization, например не надо мотаться по всем файлам проекта расставля конструкторы, методы serialize и операторы всякие.
И по любому на С# нет тех издержек, какие есть с бустом этим из за наличия рефлексии.
I>>итог — эмуляция интеропа, код модели занимает меньше места чем код для того что бы выставить эту модель наружу.
FR>Для связи со скриптами лучше использовать кодогенератор, можно взять готовый например http://www.swig.org/
скриптами дело не ограничивается. ты, кстати, не предлагаешь ли нагенерить кода на все ЯП как это некоторые делают ради эмуляции COM ?
кроме того, как обстоят дела с использованием внешних компонент ? Ну вот так например — плагины для апп которые могут быть написаны на любом языке что есть на платформе,и что бы могли юзать объектную модель в рантайме.
Как тут свиг поможет ?
кроме того, модель предоставляет гораздо бОльший функционал, нежели выставляется в скрипт, а часто в скрипт нельзя много чего выставить. Вот как мне сообщить свигу, что некоторые параметры некоторых методов надо передавать как VARIANT, некоторые конвертить , а некоторые напрямую пихать туда ? И как сообщить что есть кое какие особенности в этом самом VARIANT ?
т.е. дело не сводится генерации кода.
I>>А что у тебя есть для выполнения таких же задач, как и те что решаются с COM, можешь показать ?
FR>выше дал.
Ссылка на свиг или та строчка с std::cout<< ? Для COM надо чтото более серьёзное. SWIG может только уменьшить количество кода, которое будет набиваться вручную, а С# даёт возможность вообще избавиться от этого кода.
I>>а еще есть сохранение модели например в XML. Здесь тоже Билл виноват ? FR>И какие проблемы с XML?
Проблем никаких, только каждый случае требует особых библиотек, фреймворков и генераторов. На C# все это не нужно, фреймворк мощнее чем десяток свигов и бустов вместе взятых.
I>>Почитай когнитивную психологию, педагогику и методику преподавания.
FR>Это ты к чему?
I>Парадигмы и приёмы программированя обычно далеко не все выпускники понимают, а ты хочешь с этого обучение начинать.
I>А boost::serialization умеет работать с таблицами БД ? Тот фреймворк где я взял код умеет гораздо больше, чем boost::serialization, например не надо мотаться по всем файлам проекта расставля конструкторы, методы serialize и операторы всякие.
I>И по любому на С# нет тех издержек, какие есть с бустом этим из за наличия рефлексии.
Конечно C# лучше это умеет делать. Но даже ручная сериализация твои 50% не даст.
I>>>итог — эмуляция интеропа, код модели занимает меньше места чем код для того что бы выставить эту модель наружу.
FR>>Для связи со скриптами лучше использовать кодогенератор, можно взять готовый например http://www.swig.org/
I>скриптами дело не ограничивается. ты, кстати, не предлагаешь ли нагенерить кода на все ЯП как это некоторые делают ради эмуляции COM ?
Можно и нагенерить, что тут плохого.
I>кроме того, как обстоят дела с использованием внешних компонент ? Ну вот так например — плагины для апп которые могут быть написаны на любом языке что есть на платформе,и что бы могли юзать объектную модель в рантайме. I>Как тут свиг поможет ?
Угу а как тебе NET поможет писать плагины к фотошопу или тотал командеру?
I>кроме того, модель предоставляет гораздо бОльший функционал, нежели выставляется в скрипт, а часто в скрипт нельзя много чего выставить. Вот как мне сообщить свигу, что некоторые параметры некоторых методов надо передавать как VARIANT, некоторые конвертить , а некоторые напрямую пихать туда ? И как сообщить что есть кое какие особенности в этом самом VARIANT ?
Для SWIG'а просто написать отдельны .i файл, положив туда только нужное. Или просто раздельные .h файлы внутрений и внешний. Параметры тоже конвертируются http://www.swig.org/Doc1.1/HTML/Typemaps.html#n6
I>Ссылка на свиг или та строчка с std::cout<< ? Для COM надо чтото более серьёзное. SWIG может только уменьшить количество кода, которое будет набиваться вручную, а С# даёт возможность вообще избавиться от этого кода.
SWIG сведет количество вбиваемого кода к очень малой величине. Плюс SWIG позволяет вообще отказатся от COM'а.
FR>>Это ты к чему?
I>
I>>Парадигмы и приёмы программированя обычно далеко не все выпускники понимают, а ты хочешь с этого обучение начинать.
I>тут ты вспомнил про SICP
I>видишь, опять ты контекст упустил из виду.
Дабы не возникало недорозумений, объясню что я намекнул на то что дело все в текущей локали для не-Юникод программ, а не в операционной системе, компиляторе или языке программирования.
"В данном случае Билли непричем " относилось именно к этому.
Luck in life always exists in the form of an abstract class that cannot be instantiated directly and needs to be inherited by hard work and dedication.
Здравствуйте, FR, Вы писали:
I>>И по любому на С# нет тех издержек, какие есть с бустом этим из за наличия рефлексии.
FR>Конечно C# лучше это умеет делать. Но даже ручная сериализация твои 50% не даст.
разумеется не даст, а вот весь тот хлам, который в С++ отсутствует и есть в С# и даёт эти 50%, как минимум. А в ряде случаев и до 90% (а в твоём с str::cout и вовсе 100%)
И заметь — твоего кода, кроме вывода строчки, здесь не было.
I>>скриптами дело не ограничивается. ты, кстати, не предлагаешь ли нагенерить кода на все ЯП как это некоторые делают ради эмуляции COM ?
FR>Можно и нагенерить, что тут плохого.
на линуксе-юниксе так и делают. А в виндовсе есть IDL, который хранится в TLB, в основном генерится автоматически, хочешь юзать некий новый язык — сгенери себе файлы по этому IDL и пользуй как хочешь, а на стороне сервера никаких изменений не требуется.
I>>кроме того, как обстоят дела с использованием внешних компонент ? Ну вот так например — плагины для апп которые могут быть написаны на любом языке что есть на платформе,и что бы могли юзать объектную модель в рантайме. I>>Как тут свиг поможет ?
FR>Угу а как тебе NET поможет писать плагины к фотошопу или тотал командеру?
И ты решил если интерфейс не менеджед и не ком, то и плагин на дотнет нельзя написать ?
Делается очень просто — пишется длл в том виде, как её понимает прога(тотал, фотошоп, что угодно) и из этого кода делается шаблон. Потом вставляется кастом-билд степ, где по этому шаблону студия будет создавать загрузчик. Так будет работать даже если прога имеет экзотический интерфейс вроде собственного варианта COM.
I>>кроме того, модель предоставляет гораздо бОльший функционал, нежели выставляется в скрипт, а часто в скрипт нельзя много чего выставить. Вот как мне сообщить свигу, что некоторые параметры некоторых методов надо передавать как VARIANT, некоторые конвертить , а некоторые напрямую пихать туда ? И как сообщить что есть кое какие особенности в этом самом VARIANT ?
FR>Для SWIG'а просто написать отдельны .i файл, положив туда только нужное. Или просто раздельные .h файлы внутрений и внешний. Параметры тоже конвертируются http://www.swig.org/Doc1.1/HTML/Typemaps.html#n6
В том то и дело, что по любому нужно писать код, который на дотнете и близко писать не нужно. Как ни крути а SWIG это костыль и COM не заменит.
FR>SWIG сведет количество вбиваемого кода к очень малой величине. Плюс SWIG позволяет вообще отказатся от COM'а.
Не позволяет, в том то и дело. COM требуют кастомеры, например так — хочу что бы прога делала А,В,С ...
Свиг — это эмуляция COM, потому что надо всякий раз линковать. А COM избавляет от этого по дает возможность подключаться к серверу хоть в рантайме, когда сервер ни слухом ни духом не в курсе про клитента. Более того — на стороне сервера вообще никаких телодвижений не надо.
Для полноценной замены надо нагородить вагоны кода уже на этом свиге что бы на все методы нагенерить IPC, RPC и тд. А кроме этого еще кучу подсистем виндовса реализовать.
I>>тут ты вспомнил про SICP
I>>видишь, опять ты контекст упустил из виду.
FR>Повторю почитай SICP.
ну, давай по кругу
I>>>Парадигмы и приёмы программированя обычно далеко не все выпускники понимают, а ты хочешь с этого обучение начинать.
Здравствуйте, Ikemefula, Вы писали:
I>разумеется не даст, а вот весь тот хлам, который в С++ отсутствует и есть в С# и даёт эти 50%, как минимум. А в ряде случаев и до 90% (а в твоём с str::cout и вовсе 100%)
В моем примере разница между C# и С++ равно 0.
Угу а тот же C++ тоже даст и 90% и 200% по сравнению с шарпом на каком нибудь compile-time DSL по типу boost::spirit'а или в программе лазающей в потрохах WinAPI.
I>И заметь — твоего кода, кроме вывода строчки, здесь не было.
Этого кода оказалось более чем достаточно.
FR>>Угу а как тебе NET поможет писать плагины к фотошопу или тотал командеру?
I>И ты решил если интерфейс не менеджед и не ком, то и плагин на дотнет нельзя написать ?
Нет это ты постоянно выдумавыешь себе какого-то виртуального собеседника и разговариваешь с ним
FR>>Для SWIG'а просто написать отдельны .i файл, положив туда только нужное. Или просто раздельные .h файлы внутрений и внешний. Параметры тоже конвертируются http://www.swig.org/Doc1.1/HTML/Typemaps.html#n6
I>В том то и дело, что по любому нужно писать код, который на дотнете и близко писать не нужно. Как ни крути а SWIG это костыль и COM не заменит.
Это COM костыль, притом корявый. Свои задачи SWIG решает вплолне нормально.
А кода писать надо не больше чем расставлять атрибуты на шарпе.
FR>>SWIG сведет количество вбиваемого кода к очень малой величине. Плюс SWIG позволяет вообще отказатся от COM'а.
I>Не позволяет, в том то и дело. COM требуют кастомеры, например так — хочу что бы прога делала А,В,С ...
Это кому как.
Если надо то пожалуйста http://swig.svn.sourceforge.net/viewvc/swig/branches/gsoc2008-jezabek/Doc/Manual/COM.html
I>Свиг — это эмуляция COM, потому что надо всякий раз линковать. А COM избавляет от этого по дает возможность подключаться к серверу хоть в рантайме, когда сервер ни слухом ни духом не в курсе про клитента. Более того — на стороне сервера вообще никаких телодвижений не надо.
SWIG это не эмуляция com'а это другой инструмент позволяющий решать во многом похожие задачи.
Здравствуйте, FR, Вы писали:
FR>В моем примере разница между C# и С++ равно 0.
В твоем примере 0 функционала и даже здесь тебе понадобилась перегрузка операторов сдвига.
FR>Угу а тот же C++ тоже даст и 90% и 200% по сравнению с шарпом на каком нибудь compile-time DSL по типу boost::spirit'а или в программе лазающей в потрохах WinAPI.
Где то С++ обойдет С#, это и ежу ясно. Только не там, где ты хочешь видеть. Java и C# отгрызли у C++ бОльшую часть рынка и продолжают отгрызать.
I>>И заметь — твоего кода, кроме вывода строчки, здесь не было.
FR>Этого кода оказалось более чем достаточно.
Я уже говорил, что вывод строки красной нитью проходит через все рассуждения с++ников.
Строки поглощают всё их внимание на с++ и они ни о чем больше не могут думать.
Это проходит почти без негативных последствий если полностью отказаться от с++.
I>>И ты решил если интерфейс не менеджед и не ком, то и плагин на дотнет нельзя написать ?
FR>Нет это ты постоянно выдумавыешь себе какого-то виртуального собеседника и разговариваешь с ним
Если ты хотел поговорить про плагины, то на дотнет их писать гораздо проще. Даже для тотала.
I>>В том то и дело, что по любому нужно писать код, который на дотнете и близко писать не нужно. Как ни крути а SWIG это костыль и COM не заменит.
FR>Это COM костыль, притом корявый. Свои задачи SWIG решает вплолне нормально.
COM это возможность реюзания кода без перекомпиляции.
В случае со swig и без COM тебе пришлось бы перекомпилировать эксплорер, офис и пол-виндовса всякий раз, когда ктото захотел бы написать плагин какой нибудь.
FR>А кода писать надо не больше чем расставлять атрибуты на шарпе.
Наверно свиг умеет мега-гитлер-маршаллинг всех сортов и видов генерировать ?
Все что может swig — генерировать IDL и оболочки всякие которые надо слинковать.
Количество рукописного кода уменьшает, но swig для С++ это костыль, потому что swig это не с++.
COM это тоже не с++, COM — это, по большому счету, Виндовс.
I>>Не позволяет, в том то и дело. COM требуют кастомеры, например так — хочу что бы прога делала А,В,С ...
FR>Это кому как.
И это набор банальностей. Могу только повторить — это не работает в общем случае.
Задача не просто в том, что бы сгенерировать идл по с++ интерфейсу.
Для интерфейса-COM и с++-интерфейса нужно сделать оболочку, переходник.
Генерация COM-интерфейса это частный случай, наиболее редкий. Я говорил про это, когда речь была про VARIANT.
один и тот же метод в разные интерфейсы выставляется совершенно разными способами
I>>Свиг — это эмуляция COM, потому что надо всякий раз линковать. А COM избавляет от этого по дает возможность подключаться к серверу хоть в рантайме, когда сервер ни слухом ни духом не в курсе про клитента. Более того — на стороне сервера вообще никаких телодвижений не надо.
FR>SWIG это не эмуляция com'а это другой инструмент позволяющий решать во многом похожие задачи.
похожие, но не такие же. для таких же задач тебе придётся использовать COM.
I>>ну, давай по кругу
FR>Запросто
Парадигмы и приёмы программированя обычно далеко не все выпускники понимают, а ты хочешь с этого обучение начинать.
Здравствуйте, Ikemefula, Вы писали:
I>Парадигмы и приёмы программированя обычно далеко не все выпускники понимают, а ты хочешь с этого обучение начинать.
Эта ситуация так же нелепа, как если бы выпускники автошкол не разбирались бы в категориях транспортных средств.
И начинать нужно именно с этого, хотябы при обучении программистов.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, FR, Вы писали:
FR>>В моем примере разница между C# и С++ равно 0.
I>В твоем примере 0 функционала и даже здесь тебе понадобилась перегрузка операторов сдвига.
Всегда интересно спросить: Вы правда верите в то, что говорите? "Понадобилась", "0 функционала". Ну покажите то же на шарпе, а потом я покажу Console::WriteLine(). Если 0 функционала, то это значит, что весь код направлен на решение проблем "с указателями, памятью" и т.п. Список проблем в студию, и те из них, которые решились в данном коде, например, вводом перегрузки.
Т.е. вот если Вы действительно уверены в том, что всё это правда про 0 функционала и "понадобилась перегрузка", о чём можно вообще говорить тогда?
Ладно один раз к этому придрался, можно понять, тянет же прицепиться просто так, не по сути, но вот когда рефреном на протяжении всей дискуссии, этого я уже не понимаю.
Здравствуйте, samius, Вы писали:
S>Эта ситуация так же нелепа, как если бы выпускники автошкол не разбирались бы в категориях транспортных средств. S>И начинать нужно именно с этого, хотябы при обучении программистов.
Факультатив — и не больше. Ты ещё про паттерны вспомни.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Прям как набор заклинаний. Ты специально старался?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VoidEx, Вы писали:
VE>Ладно один раз к этому придрался, можно понять, тянет же прицепиться просто так, не по сути, но вот когда рефреном на протяжении всей дискуссии, этого я уже не понимаю.
Не знаю, как называется этот приём, но контрприём звучит так: "дай определение 'функционалу'".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, samius, Вы писали:
S>>Эта ситуация так же нелепа, как если бы выпускники автошкол не разбирались бы в категориях транспортных средств. S>>И начинать нужно именно с этого, хотябы при обучении программистов.
ГВ>Факультатив — и не больше. Ты ещё про паттерны вспомни.
Я же не утверждаю что обучать надо разным парадигмам (хотя это было бы неплохо). Хотя бы общий курс начать с пары-тройки ознакомительных занятий, а не с x=x+1. Куда уж там факультатив? Для желающих — спецкурс.
Паттерны, кстати, тоже бы неплохо спецкурсом иметь или как часть спецкурса по ООП. А то народ как дорывается до них, начинает их совать куда не надо со страшной силой и обижаться на урезонивание...
Здравствуйте, VoidEx, Вы писали:
VE>Всегда интересно спросить: Вы правда верите в то, что говорите? "Понадобилась", "0 функционала". Ну покажите то же на шарпе, а потом я покажу Console::WriteLine().
Да, Console::WriteLine() это оно и есть.
>Если 0 функционала, то это значит, что весь код направлен на решение проблем "с указателями, памятью" и т.п. Список проблем в студию, и те из них, которые решились в данном коде, например, вводом перегрузки.
Пример был идиотский, на что я и сразу указал.
Если и тебе нечего показать кроме вывода строчки — иди погуляй.
VE>Т.е. вот если Вы действительно уверены в том, что всё это правда про 0 функционала и "понадобилась перегрузка", о чём можно вообще говорить тогда?
Действительно уверен. Можешь не говорить, я стойко переживу этот страшный удар судьбы.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Факультатив — и не больше. Ты ещё про паттерны вспомни.
Ну тот же SICP очень ненавязчиво, притом на практике проводит почти через все пути начиная от простого структурного программирования, функциональщину, объектность и заканчивая логическим и недерминированным.
Здравствуйте, samius, Вы писали:
S>Я же не утверждаю что обучать надо разным парадигмам (хотя это было бы неплохо). Хотя бы общий курс начать с пары-тройки ознакомительных занятий, а не с x=x+1. Куда уж там факультатив? Для желающих — спецкурс.
А с чем ты их знакомить собираешься, если они ничего не знают про программуху ? Знакомить можно не раньше второго-третьего курса, когда год программухи будет и хотя бы ООП сами пощупают.
S>Паттерны, кстати, тоже бы неплохо спецкурсом иметь или как часть спецкурса по ООП. А то народ как дорывается до них, начинает их совать куда не надо со страшной силой и обижаться на урезонивание...
Паттерны это уровнем выше ООП и их не все делевлоперы с опытом понимают, вот в чем загвоздка.
Здравствуйте, FR, Вы писали:
FR>Это COM костыль, притом корявый. Свои задачи SWIG решает вплолне нормально. FR>А кода писать надо не больше чем расставлять атрибуты на шарпе.
У нас с тобой интересная беседа получается.
с++ это очень круто потому что много не может и для компенсации этого надо еще один язык+генератор уметь, что бы лабать код для свига.
И этот второй язык+генератор это не костыль по твоему.
Используй тогда C# вместо свига, будешь говорить что пишешь на с++, а я никому про твой с# не расскажу.
Здравствуйте, FR, Вы писали:
ГВ>>Факультатив — и не больше. Ты ещё про паттерны вспомни.
FR>Ну тот же SICP очень ненавязчиво, притом на практике проводит почти через все пути начиная от простого структурного программирования, функциональщину, объектность и заканчивая логическим и недерминированным.
Все это хорошо, только SICP это по сложности выше чем материал для 5го курса.
ты еще талмуды кнута предложи толкать на первом курсе, шоб усё сильно було.
Здравствуйте, samius, Вы писали:
I>>Парадигмы и приёмы программированя обычно далеко не все выпускники понимают, а ты хочешь с этого обучение начинать.
S>Эта ситуация так же нелепа, как если бы выпускники автошкол не разбирались бы в категориях транспортных средств.
S>И начинать нужно именно с этого, хотябы при обучении программистов.
Я думал мой брат что на первом курсе, польскую запись не мог осилить, деревья всякие потому чо плохо понимает рекурсию, струкрутуры и тд и тд.
Я то думал, раз я могу на раз, значит и он может.
А оказывается ему не хватало приёмов программирования и парадигм.