Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Kluev, Вы писали:
K>>Вы просто их готовить не умеете, монолиты на С++. Разбить на части можно грамотно и на С++ не добавляя лишний уровень виртуализации.
VD>Не будь стольк категоричным. Я их очень долго и успешно готовил. От того и пришел к компонентному подоходу. МС тоже их ооочень долго готовил и тоже пришел к тому же.
Да ничего МС не готовил. Возьми ту же МФЦ, где там успешное приготовление? Так прикрыли помойку вынь апи газеткой, и не более. То же самое и с остальными прогами.
P/S А насчет компонентного подхода, так в своих прогах я от него отказался, а почему? Да потому что компонентность реально требуется только в плагинах, да и то это можно сделать только наполовину компонентным. Т.е. компонентный только плагин. Щас разьясню подробнее.
Допустим есть интерфейс плагина IPlugin. плагинов может быть много поэтому это оправданно. В каждом плагине есть своя реализация IPlugin. Теперь есть интерфейс IApplication который необходим плагинам. Но ежу понятно, что две реализации IApplication быть не может. т.к. прилоджение-то одно, а IApplication фактичеки воодится только для обеспечения двоичной совместимости. Чтобы старые плагины работали с новыми версиями нашей проги. Теперь спрашивается зачем нам IApplication с дополнительным уровенем виртуаллизации и дополнительным гемором? Совсем он нам ни к чему. Вместо этого огорода, делаем так:
class MY_API Aplication
{
struct App_imp *imp_;
public:
int someValue_get();
};
И таким же макаром все остальные классы необходимые плагинам, и выносим все это в ДЛЛ Т.к все данные вынесены в struct App_imp, то лекго обеспечивается двоичная совместимость с будующими версиями. Т.е. старые плагины будут пахать без перекомпиляции.
Таким образом можно поскипать 80% всех лишних интерфейсов и компонентности.
ИМХО вобще тяга к компонентности это своего рода болезнь начинающих, я в начале работы тоже стремился все как следует изолировать, сделать компонентным, а оказалость что от этого пользы ноль. Теперь компонентность живет только там где это действительно необходимо.
P.S.S: И где кстати ты видел у МС проги написанные в таком стиле? У них либо монолит, либо помйка с ОЛЕ. Которая ни себе ни людям. Наружу торчат какие-то полулевые наполовину реализованные интерфейсы возвращающие E_NOTIMPL, а для себя юзаются закрытые.
Здравствуйте, <Аноним>, Вы писали:
А> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ?
А что за проект, точнее можно узнать? COM хорош ради того, чтобы обеспечить интерфейс к VB/VBS/etc. И только. Как средство обеспечения компонентности для C++ модулей, ИМХО, избыточен и слишком ограничен для C++.
Насчёт устаревания — нет, не устарел.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
VD>Смотря что в замен. Если монолит на С++, то лучше уж КОМ. А если тоже самое но на Яве или дотнете и без скриптов, то конечно КОМ прошлый век.
Вы просто их готовить не умеете, монолиты на С++. Разбить на части можно грамотно и на С++ не добавляя лишний уровень виртуализации.
VladD2:
> По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
А по-моему подобные огульные высказывания — признак недостаточно глубокого знакомства с проблемой. В частности, выбор между микроядерной архитектурой и монолитным ядром вовсе не очевиден. И у того, и у другого решения есть как достоинства, так и недостатки. И хотя при написании "больших" операционок чаще выбирают как раз архитектуру с монолитным ядром, оба подхода имеют право на жизнь.
Monolithic kernels are often preferred over microkernels due to the lower level of complexity of dealing with all system control code in one address space. For example, XNU, the Mac OS X kernel, is based on Mach 3.0 + BSD in the same address space in order to cut down on the latency incurred by the traditional microkernel design.
In the early 1990s, monolithic kernels were considered obsolete. The design of Linux as a monolithic kernel rather than a microkernel was the topic of a famous flame war (or what then passed for flaming) between Linus Torvalds and Andrew Tanenbaum; a summary is available online.
There is merit in both sides of the arguments presented in the Tanenbaum/Torvalds debate.
Monolithic kernels tend to be easier to design correctly, and therefore may grow more quickly than a microkernel-based system. There are success stories in both camps. Microkernels are often used in embedded robotic or medical computers because most of the OS components reside in their own private, protected memory space. This is not possible with monolithic kernels, even with modern module-loading ones.
Although Mach is the best known general-purpose microkernel, several other microkernels have been developed with more specific aims. L3 was created to demonstrate that microkernels are not necessarily slow. L4 is a successor to L3 and a popular implementation called Fiasco is able to run Linux next to other L4 processes in separate address spaces. There are screenshots available on freshmeat.net showing this feat. A newer version called Pistachio also has this capability.
QNX is an operating system that has been around since the early 1980s and has a very minimalistic microkernel design. This system has been far more successful than Mach in achieving the goals of the microkernel paradigm. It is used in situations where software is not allowed to fail. This includes the robotic arms on the space shuttle to machines that grind glass where a tiny mistake may cost hundreds of thousands of dollars.
Many believe that since Mach basically failed to address the sum of the issues that microkernels were meant to solve, that all microkernel technology is useless. Mach enthusiasts state that this is a closed-minded attitude which has become popular enough that people just accept it as truth.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Kluev, Вы писали:
K>>Да ничего МС не готовил. Возьми ту же МФЦ, где там успешное приготовление?
VD>Ты Ворд возьми на С писанный. Эксель плюсовый. Саму виндовс. Все они прошли эволюцию от огромного монолита до компонентных продуктов. А МФЦ — это левая библиотечка котору в МС используют раз в код для написания продуктов вроде Вордпэда.
В итоге програмировать под эту компонентную кучу мусора стало настолько неудобно, что даже в МС решили кровь сменить дотнетом. И кстати дотнетный АПИ это как раз откат от чистой компонентности в стиле СОМ к статичекому связыванию. Ты же классы напрямую юзаешь, а не через интерфейсы.
K>>P/S А насчет компонентного подхода, так в своих прогах я от него отказался, а почему? VD>Потому что у тебя нет команды из сотни разработчиков.
Ерунда. Во первых не поэтому, а потому, что я старый и мудрый А во вторых к примеру линкусовое ядро монолит и пишется целой толпой и ничего. Была еще такая чудная прога автокад, так там тоже весь API был ввиде библиотек С++ классов, очень удобно было юзать.
K>> Да потому что компонентность реально требуется только в плагинах, да и то это можно сделать только наполовину компонентным. Т.е. компонентный только плагин. Щас разьясню подробнее.
VD>Это потому что вы не умете ее готовить.
Умею, поверь мне. Юзал и СОМ и сам несколько фреймворков своих написал. Чистая компонентность не нужна и неудобна. Удобно когда сама прога имеет статический апи, а вокруг уже куча динамических компонентов.
Здравствуйте, Kluev, Вы писали:
K>Вы просто их готовить не умеете, монолиты на С++. Разбить на части можно грамотно и на С++ не добавляя лишний уровень виртуализации.
Не будь стольк категоричным. Я их очень долго и успешно готовил. От того и пришел к компонентному подоходу. МС тоже их ооочень долго готовил и тоже пришел к тому же.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
K>>Вы просто их готовить не умеете, монолиты на С++. Разбить на части можно грамотно и на С++ не добавляя лишний уровень виртуализации. VD>Не будь стольк категоричным. Я их очень долго и успешно готовил. От того и пришел к компонентному подоходу. МС тоже их ооочень долго готовил и тоже пришел к тому же.
MS пришла к тому, что неплохо бы Java потеснить.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Kluev, Вы писали:
AVK>>И в чем разница?
K>Хм. А ты отличий не нашел?
K>Тогда попробую обьяснить. Во первых от CreateObject("Foo") не занаследуешься. Т.к. класс реализации не известен.
Это хорошо или плохо?
K> Во вторых когда все через интерфейсы это просто неудобно и не быстро: лишний уровень виртаулизации.
Зависит от конкретной задачи.
K> В третих создание обьектов либо через фабрику либо в интерфейсе должны быть производящие функции, тоже не гуд.
K>Т.е. когда все компонентно и через интерфейсы, программирование становится геморойным. Мудрые мужи стремятся минимизировать геморой и посему минимзация компонентности в программе это верное решение.
Мудрые мужи стараются не придерживаться замшелых принципов и позволяют от компонентов наследоваться.
K>Монолит надо разбивать не на компоненты, а на модули (dll-библиотеки классов с устойчивым апи и обратной двоичной совместимостью).
А компонент это и есть модуль с ОО-интерфейсом доступа, чтобы там не говорили некоторые товарищи. Главная фишка компонента — динамическое связывание, все остальное это особенности конкретных реализаций.
Здравствуйте, Kluev, Вы писали:
AVK>>Но весьма часто. Design-time вобще без этого невозможен. K>design time как правило нужен только для UI,
Отнюдь. Просто для UI без него вобще жить очень сложно.
K> а возьми к примеру АПИ какой нить системы типа PRO/E, acad или solidworks.
Не имею честь быть знакомым.
AVK>>Грабли в том что несоответствие форматов VMT порушит твое приложение. Причем причину ты будешь искать долго.
K>Не порушит т.к. компилер-то один юзается, о чем и сказано в доках.
Ты можешь в доках что угодно указывать — это тебя не спасет.
K> А кто не понял, я не виноват.
Вот вот.
AVK>>А если удалить? K>А зачем?
А вот идиот какой код попортил.
K> Даже если и удалишь то обнаружишь очень быстро.
Вот это вряд ли.
K> Системы выплюнет сообщение что функция в DLL не найдена.
Или из-за несовпадения размеров VMT будет проход по памяти.
K>>> А в классах где есть наследование можно про запас обьявить штук пять-десять виртуальных функций про запас, на редкий случай расширения. AVK>>Самому не смешно?
K>А чего смеятся, все так и делают.
K> Посмотри например GTK, там честенько резервируют.
Их проблемы.
K> Мудрые мужи знают что живут в мире где не может быть идеальных решений.
Мудрые мужи при наличии более надежных и удобных решений используют их, а не продолжают жрать кактус.
Здравствуйте, Павел Кузнецов, Вы писали:
>> По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
ПК>А по-моему подобные огульные высказывания — признак недостаточно глубокого знакомства с проблемой.
А, по-моему, применение ярлыков вроде "огульные высказывания" является некрасивым приемом в дисскусии. Я высказал свое мнение. Никаким огульным оно не может являеться по определению. Я не обязан подтверждать свое мнение.
ПК> В частности, выбор между микроядерной архитектурой
Ну, так и думал, что все это свалится на мач. вс. линукс.
В общем, спорить по этому вопросу не буду, так как считаю этот спор бесполезным и глупым. Это вопрос жизненных принципов. Подобные осбуждения тут затевались и ни к чему не привили.
ПК> и монолитным ядром вовсе не очевиден. И у того, и у другого решения есть как достоинства, так и недостатки.
Мля, очевиден, не очевиден. Мне совершенно фиолетово, что там тебе не очевидно. Мне все очевидно. Я всказал, свое мнение. Имею право? Ну, и все. Точка. Закрыли тему.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
ЗХ>>Кстати, Влад. За последнюю неделю я уже раз 5 видел такой стиль сворачивания дискуссии: ЗХ>>Твой оппонент утверждает нечто. Ты требуешь это немедленно и убедительно доказать. Оппонент приводит доказательства и просит их опровергнуть, на что следует неизбежное: "тебе надо, ты и дискутируй; я в своем мнении уверен и никому ничего доказывать не собираюсь."
VD>Если человек говорит: "по-моему" или "имхо", то требовать доказательтв от него глупо. Максимум попросить более детального объясниния. Иначе свое мнение вообще будет нвеозможно иметь, так как ты будешь постоянно оправдваться и находить аргументы.
VD>Ну, а если человек навязывает свое мнение другим, то грех не попросить обоснований.
VD>Заметь, я не утверждаю, а просто высказываю свою точку зрения. К тому же воросы бывают разные. Это как раз из тех на которые можно убить несколько месяцев и ничего не добиться. А я и так слишком много времени на Интернет трачу.
Ну, дело твое конечно
Но местами это правда выглядит так, что — сказать нечего, поэтому вместо следующего шага в дискуссии начинаем посылать (например: Влад: — Приведи доказательства; ПК: — Погугли по терминам таким-то; Влад: — Пошел нафик, тебе надо — ты и гугли.)
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>"Огульное" по определению означает, что высказывание недостаточно обоснованно.
Думаю, ти применяя этот термин перкрасно понимал, что он имеет резко негативную окраску. И именно по этому его и пременил.
ПК>Ты видишь в своем сообщении обоснования своего высказывания? Раз обоснования ты не приводишь, таковым оно и останется.
Я уже сказал, что я не обязан давать обоснование каждуму своему высказыванию. Я же не требую, чтобы все вокруг имели такое же мнение по этому вопросу? Если бы я этого захотел, то начал бы доказывать свою точку зрения. Но мне этого не нужно. Я высказал свое мнение и нехочу его обсуждать.
От того, что ты скажешь, что моя точка зрения не обоснована, она таковой не станет.
И вообще, это очень удобная позиция прицепиться к человеку и на каждое его слово заставлять давать обоснование. Причем если такое обоснование будет, дано, то сразу заявить, что это все фигня и потребовать обоснования чего-то еще. Эдакое заматываение. Мол проще отдаться чем спорить. Ты лично этим и занимался. Зная то что лично ты не принял еще ни одного моего утверждения, и зная то что тема заведомо флэймовая мне проще послать на три веселых буквы нежели тратить время на никчемнийшие сопоры. Нистоит оно того.
>> Мля, очевиден, не очевиден. Мне совершенно фиолетово, что там тебе не очевидно. Мне все очевидно. Я всказал, свое мнение. Имею право? Ну, и все. Точка. Закрыли тему.
ПК>Когда участие в дискуссии сводится к высказыванию своего мнения,
Мля, я не открывал дискусси по этому поводу. Более того сразу сказал, что это бессмысленное занятие. Прочти Вынь вс. Линь там этому воросу добрая треть посвящена. А толку чуть.
ПК> да еще в категоричной форме,
Что значит в категоричной форме? Как можно высказать свое мнение в не категоричной форме? Ну, зачем сразу клеить ярлыки. Короче, мне уже надоело терпеть и после следующего выпада я буду действовать твоими средствами. Начну задалбывать требованиями доказательств по любому вопросу, использовать исключительно оскорбительные эпитеты и применять другую демагогию. Хочешь этого?
ПК> с отказом это мнение обосновать, а подчас с переходом на личности,
Переходя на осбуждение моей личности ПК не забыл упомянуть о переходах на личности своего оппонента.
ПК> это называется "война мнений", также известное как "флейм".
То есть высказывание своего мнения — это флэйм? ОК, тогда я ужасный флэймогон, так как буду делать это и дальше. И доказывать буду только то что посчитаю нужным. Андестынд?
ПК>А право ты, естественно, имеешь.
Ну, спасибо родной! Тогда впредь потрудись не лепить ярлыки и не заниматься другой демагогией, если увидишь, что кто-то высказал свое мнение, с которым ты не согласен. Есть только три корректных пути поведения в такой ситуации:
1. Сказать, что ты с ним не согласен и думаешь по-другому.
2. Сказать, что не согласен и привести аргументацию.
3. Промолчать.
Если тебе интересно, на каком основании возникло то или иное мнение, то вежливо попроси поделиться предпосылками, а не начинай разговор с оскорбительных эпитетов, унижения и других некрасивых действий. Тогда глядишь и ответ получишь. В противно же случае не удивляйся, что тебя послали куда подальше.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VladD2,
> ЗХ> Но местами это правда выглядит так, что — сказать нечего, поэтому вместо следующего шага в дискуссии начинаем посылать (например: Влад: — Приведи доказательства; ПК: — Погугли по терминам таким-то; Влад: — Пошел нафик, тебе надо — ты и гугли.)
> Есть такая штука — презумпция невиновности.
Которая сюда совершенно никакого отношения не имеет. Тут ситуация совершенно обратная. Тебя ни в чем не обвиняют, просто утверждают, что в дискуссии никакие утверждения изначально верными не считаются. Соответственно, если ты выдвинул какой-либо аргумент, с верностью которого твой оппонент не согласен, и этот аргумент ты не обосновываешь, то этот аргумент в дискуссии просто не учитывается.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
VladD2:
> То есть высказывание своего мнения — это флэйм?
Если соблюдаются остальные условия, обозначенные выше, — да.
> ОК, тогда я ужасный флэймогон, так как буду делать это и дальше. И доказывать буду только то что посчитаю нужным. Андестынд?
Дык, последние сомнения уже давно рассеялись.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, WFrag, Вы писали:
WF>Без всяких перекомпиляций я выгрузил из ядра практически все — видео, звук, модем, сеть, USB-устройства, BlueTooth stack, NTFS, FAT32, и.т.д. Вполне модульно
Такое можно делать относительно недавно, и то, если указать на выгружаемость этих модулей при компиляции ядра.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>А по-моему подобные огульные высказывания — признак недостаточно глубокого знакомства с проблемой. В частности, выбор между микроядерной архитектурой и монолитным ядром вовсе не очевиден. И у того, и у другого решения есть как достоинства, так и недостатки. И хотя при написании "больших" операционок чаще выбирают как раз архитектуру с монолитным ядром, оба подхода имеют право на жизнь.
Уж не знаю. специально ты или просто не сообразил, но архитектура микроядра подразумевает изоляцию аппаратными средствами критичного кода. К динамической подгрузке частей ядра это имеет отдаленное отношение. К примеру в теперешней NT внутри ядра выполняется довольно много кода, при этом ядро весьма модульное. В Линуксе же, особенно в старых версиях, ядро линковалось в один большой модуль, даже вместе с драйверами. Об этом Влад собственно и говорил.
Здравствуйте, Аноним, Вы писали:
А> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ?
А ты не спрашивал, в каком году начинался проект, и какие сист. требования приходили от клиентов или маркетинга?
Здравствуйте, AndrewVK, Вы писали:
V>>Запускал дотнет на вынь-СЕ?
AVK>Запускал. Ничего сверхужасного. А учитывая тенденции скоро на КПК будет 1Ггц и 256М памяти, а этого уже достаточно с большим запасом.
Во-первых, не так скоро,
Во-вторых, не на всех.
Для меня ужас в том, что как системный программист, я прекрасно знаю, какие возможности дает 200МГц проц, офигенные, скажем, возможности при правильной их утилизации. То, что показывает этот дотнет на вынь СЕ — это именно сверхужасно.
По крайней мере, было принято решение еще долго не использовать дотнет на всевозможных планшетах, хотя ОЧЕНЬ хотелось, для одной немаленькой системы.
Здравствуйте, Зверёк Харьковский, Вы писали:
VD>>Если монолит на С++, то лучше уж ... А если тоже самое но на Яве или дотнете и без скриптов... ЗХ>Ну Влааааад!
Чё Влад? Влад этим (КОМ-ом) 7 лет занимался. И забил на него полсе появления дотнета. Дотнет лучий на сегодня вариант компонентного фрэймворка. Компоненты в нем встроены очень гладко.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Aviator, Вы писали:
A>Здравствуйте, GlebZ, Вы писали:
A>Боюсь что теперь это уже не имеет для них значения .... И что теперь всем делать делать с этой куой написанного кода на MFC, COM, и т.д. и т.п....
Считать деньги, ессесно. Если система правильно написана, то и ведение ее не дороже чем на Net. Если вся эта шняга, начала тянуть огромное кол-во ресурсов (а такое рано или поздно случается), то можно переписать на Net. Но при этом провести маркетинговое исследование — не все пользователи согласны иметь компы по 256-512 мб и в нынешнее время. А если не могут, то переписывать на том же уровне COM+VBScript (кстати, не очень плохой выбор для определенных задач). Бизнес — есть бизнес.
Когда-то и я принимал участие в проекте на COM+VBScript. Жить можно, и местами даже неплохо.
Здравствуйте, Kluev, Вы писали:
K>Да ничего МС не готовил. Возьми ту же МФЦ, где там успешное приготовление?
Ты Ворд возьми на С писанный. Эксель плюсовый. Саму виндовс. Все они прошли эволюцию от огромного монолита до компонентных продуктов. А МФЦ — это левая библиотечка котору в МС используют раз в код для написания продуктов вроде Вордпэда.
K> Так прикрыли помойку вынь апи газеткой, и не более. То же самое и с остальными прогами.
И тем не менее ты в жизни не создашь продуктов с таким же объемом исходного кода.
K>P/S А насчет компонентного подхода, так в своих прогах я от него отказался, а почему?
Потому что у тебя нет команды из сотни разработчиков.
K> Да потому что компонентность реально требуется только в плагинах, да и то это можно сделать только наполовину компонентным. Т.е. компонентный только плагин. Щас разьясню подробнее.
Это потому что вы не умете ее готовить.
K>ИМХО вобще тяга к компонентности это своего рода болезнь начинающих, я в начале работы тоже стремился все как следует изолировать, сделать компонентным, а оказалость что от этого пользы ноль.
Ну, значит ты матерый проффесионал, а я, ребята из МС, Сана, IBM-а, Apple-а и т.п. начинающие или вовсе ламеры.
Конечно не чето не должно переростать в навязчивую идею. Компонентный подход нужнен безусловно только там где нужен. Причем нужно очено хорошо уметь выделять те места где он нужен. Однако у тебя я вижу обратную болезнь — борьбу с КОП.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>У них 70% кода на С написано. Еще 25% на С++. Сейчас вот на Шарпе пытаются переписывать. Так что проблем с языком у них никогда не было.
Да, но заметь, что и с офисом, и с эксплорером и с другими пакетами можно свободно работать используя делфи, VB6, теперь вот .NET, либо ЛЮБОЙ ДРУГОЙ язык, который понимает бинарный стандарт СОМ. То есть, когда МС разрабатывала эти продукты, она расчитывала на использование их из вне. Как ты думаешь, возможно бы это было, если бы экспорт классов шел напрямую из С++? То-то же!
VD>Дык придумали именно потому что по другому уже нельзя было.
Совершенно верно! Если бы виндовс была операционной системой ОДНОГО ЯЗЫКА (С++), то никакой СОМ нафиг бы не был нужен!!! Но, это не так, а потому СОМ действительно был вынужденной мерой.
Здравствуйте, Kluev, Вы писали:
K>Имеется ввиду связывание с реализацией. K>Ты же пишешь: K>Foo f = new new Foo(); — конкретный класс реализация
K>а не: K>а не IFoo а = CreateObject("Foo") — неизвестный класс реализации
Здравствуйте, AndrewVK, Вы писали:
AVK>А компонент это и есть модуль с ОО-интерфейсом доступа, чтобы там не говорили некоторые товарищи. Главная фишка компонента — динамическое связывание, все остальное это особенности конкретных реализаций.
Ну что ж такое определение меня вполне устраивает. Просто если вернутся к мысли которую я толкал в начале ветки, то для большинства (80-90%) компонентов, вполне достаточно обычного С++ плюс DLL плюс паттерн P-Impl (обеспечивающий двоичную совместмость). Будет обеспечена компонентность и при этом исключается лишний уровень виртуализации. И при этом не надо городить огород типа СОМ и т.п.
Здравствуйте, Aviator, Вы писали:
A>>>Да и потом при таком подходе придётся всё на одном компиляторе компилить, K>>А на двух зачем компилить?
A>Да потому что нету например желания возится со старыми отлаженными исходниками, писавшимися людьми которых давно уже нет в обозримом пространстве и о принципах работы которых можно только догадываться . В том же COM'е сделал кмпонент, прицепил к основной программе и забыл о нём...
Это типичные заблуждения начинающего, об исходниках, удобстве и "сделал и забыл".
A> А с Вашим подходом придётся периодически например перекомпилить исходные коды, авозиться с кодом и т.п... ну не удобно это ...
С моим подходом не прийдется.
A> Тогда я ьы уж лучше предложил деать что — то типа своего простенького комоподобного подхода на С++
Ты мне сейчас предлагаешь связатся с гемороем от которого я уже пару лет как отказался.
A>К основной программе цепляем MyClass.h и загружаем класс A> IMyClass pMyClass = (IMyClass*) loadClass();
A> Ну что — то типа этого...
Здравствуйте, Kluev, Вы писали:
AVK>>Я тебе уже сказал — самое страшное если из-за каких либо несовместимостей компиляторов, версий хидеров и прочая у тенбя будет проход по памяти. Это тот же самый dll hell, только намного хуже. K>Я не понимаю откуда ему взятся проходу по памяти?
Из-за несовпадения размеров и форматов dll.
K> и кстаи что ты имеешь ввиду под этим словом?
А что, это выражение допускает разные трактовки?
AVK>>Вот только в дотнете я получу внятную ошибку и нетронутое ядро, а в твоем случае проход по памяти и ядро рухнет. K>Опять же что-такое проход по памяти? И потом плагин может испортить данные ядра просто неумелым вызовом функций ядра. Не хочешь же ты сказать, что ты все ходы предусмотрел? В этом случае либо ядро упадет из-за внутренней ошибки, либо данные будут испорчены.
Вот поэтому мудрые мужи пользуют технологии, позволяющие гарантированно избежать подобных ситуаций
Здравствуйте, Kluev, Вы писали:
K>Об этом и речь. Именно такой стиль я и использую. Некомпонентное ядро (со статическим апи) + плагины (сделаные как компоненты).
По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Kluev, Вы писали:
K>Имеется ввиду связывание с реализацией. K>Ты же пишешь: K>Foo f = new new Foo(); — конкретный класс реализация
А не че что я в VB тоже так пишу, хотя класс на самом деле в COM-сервере сидит?
Set oFoo = new Foo
Здравствуйте, VladD2, Вы писали:
VD>Мля, очевиден, не очевиден. Мне совершенно фиолетово, что там тебе не очевидно. Мне все очевидно. Я всказал, свое мнение. Имею право? Ну, и все. Точка. Закрыли тему.
Кстати, Влад. За последнюю неделю я уже раз 5 видел такой стиль сворачивания дискуссии:
Твой оппонент утверждает нечто. Ты требуешь это немедленно и убедительно доказать. Оппонент приводит доказательства и просит их опровергнуть, на что следует неизбежное: "тебе надо, ты и дискутируй; я в своем мнении уверен и никому ничего доказывать не собираюсь."
AndrewVK:
> ПК>А по-моему подобные огульные высказывания — признак недостаточно глубокого знакомства с проблемой. В частности, выбор между микроядерной архитектурой и монолитным ядром вовсе не очевиден. И у того, и у другого решения есть как достоинства, так и недостатки. И хотя при написании "больших" операционок чаще выбирают как раз архитектуру с монолитным ядром, оба подхода имеют право на жизнь.
> Уж не знаю. специально ты или просто не сообразил, но архитектура микроядра подразумевает изоляцию аппаратными средствами критичного кода. К динамической подгрузке частей ядра это имеет отдаленное отношение.
Гм... Я просто обратил внимание на то, что квалификация монолитности ядра как грубого недостатка дизайна далеко не так бесспорна, как это звучало из сообщения Влада...
> К примеру в теперешней NT внутри ядра выполняется довольно много кода, при этом ядро весьма модульное.
Насколько я помню архитектура ядра NT относится к гибридным. Впрочем, это не суть важно.
> В Линуксе же, особенно в старых версиях, ядро линковалось в один большой модуль, даже вместе с драйверами. Об этом Влад собственно и говорил.
Гут, спасибо за помощь в понимании Влада — у меня с этим очевидные проблемы Но даже с учетом этих поправок полагать такую архитектуру бесспорным недостатком дизайна операционной системы, имхо, тоже неверно. А уж обобщать подобные рассуждения на все системы, имхо, еще менее уместно.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Гм... Я просто обратил внимание на то, что квалификация монолитности ядра как грубого недостатка дизайна далеко не так бесспорна, как это звучало из сообщения Влада...
Тут вопрос терминологии — монолитность в плане модульности действительно суровый недостаток, поэтому в современном линуксе кое что уже подгружаемое. Ну а изоляция ядра это действительно религиозный вопрос, только к КОП она имеет отдаленное отношение.
>> К примеру в теперешней NT внутри ядра выполняется довольно много кода, при этом ядро весьма модульное.
ПК>Насколько я помню архитектура ядра NT относится к гибридным. Впрочем, это не суть важно.
Она была микроядерной, но по причинам производительности мигрировала к монолиту. Например в 4.0 видеодрайверы стали работать в ядре. Но модульность при этом только повышалась.
ПК>Гут, спасибо за помощь в понимании Влада — у меня с этим очевидные проблемы Но даже с учетом этих поправок полагать такую архитектуру бесспорным недостатком дизайна операционной системы, имхо, тоже неверно.
Не знаю. По мне так современная ОС без модульности просто немыслима.
Здравствуйте, VladD2, Вы писали:
ЗХ>>ЗЫ: а вообще JustForFun меня разочаровал. Нудотина.
VD>Ну, весь РСДН фофаны, так чтаа... В общем, еще одна вселенская тема.
Да я не о том, что фофан — это плохо.
Просто это книжка не о том, как создавался Линукс, а о том, как Линус пил пиво с разными знаменитыми людьми.
На мой вкус, лучшая книжка о том, как нечто было создано, должна на 9/10 быть "Дизайном и Эволюцией" и только на 1/10 JustForFun'ом (разбавить научные рассуждения житейскими байками)
Здравствуйте, AndrewVK, Вы писали:
AVK>Мудрые мужи при наличии более надежных и удобных решений используют их, а не продолжают жрать кактус.
Слишком громко сказано. Дотнет и Ява вообще возможны только лишь по той причине, что 150 метров на диске и 30-80 метров в памяти — это плевое дело нынче. Да и процы шустрые ноне.
Однако линух активно переползает на всевозможные устройства, и GTK с ним
Запускал дотнет на вынь-СЕ? вот и я о том же
-------
всему своя ниша, спорить в отрыве от требований ниши бесполезно
Здравствуйте, AndrewVK, Вы писали:
AVK>В Линуксе же, особенно в старых версиях, ядро линковалось в один большой модуль, даже вместе с драйверами. Об этом Влад собственно и говорил.
И сейчас можно выбранные дрова слинковать в ядро.
Очень удобно, если линух сидит на устройстве. (юзаем как embedded linux)
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>VladD2:
>> То есть высказывание своего мнения — это флэйм?
ПК>Если соблюдаются остальные условия, обозначенные выше, — да.
Какие условия? Я высказал своем мнение. Это флэйм?
>> ОК, тогда я ужасный флэймогон, так как буду делать это и дальше. И доказывать буду только то что посчитаю нужным. Андестынд?
ПК>Дык, последние сомнения уже давно рассеялись.
Скрытое оскорбление? Что же. Этого и следовало ожидать. Именно это явно и было целью данного докапывания.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
AndrewVK,
> ПК> А применительно к прикладной программе, о которой, собственно, и шла речь изначально? Снова-таки, это относится ко всем мыслимым прикладным программам, или только к некоторым?
> Речь вроде бы об ОС шла.
от Влада отповедь, что это признак плохого дизайна, где в качестве дополнения было сказано о том, что Линукс по поводу использования монолитного ядра является "флагом кривого дизайна".
В общем, имхо, это все уже мало интересно стало...
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, vdimas, Вы писали:
V>>>Слишком громко сказано. Дотнет и Ява вообще возможны только лишь по той причине, что 150 метров на диске и 30-80 метров в памяти — это плевое дело нынче. Да и процы шустрые ноне.
AVK>>Ну и какой из этого вывод?
V>Вывод был в той строке, которую ты опустил.
Здравствуйте, AndrewJD, Вы писали:
AJD>Здравствуйте, vdimas, Вы писали:
V>>Да, за MFC им надо руки оторвать. Вернее не за MFC (для конца 80-х это было нормально), а за агрессивное его продвижение в начале 90-х.
AJD>Какой-такой конец 80-х? Что-то неприпоминаю MFC под DOS
Здравствуйте, AndrewVK, Вы писали:
V>>Мы имеем protected члены, которые НЕ являются интерфейсом класса для внешнего мира,
AVK>Почему?
?
V>>Я понимаю твой ход рассуждений насчет своеобразного интерфейса для наследников, однако мы ПРИНЦИПИАЛЬНО можем иметь доступ не только к методам, инкапсулирующим алгоритмы изменения состояний объекта, но и просто к полям, т.е. "сырым" данным.
AVK>Если их объявить доступными наследникам. Но ровно так же мы можем объявить поля и публичными.
V>> И в этом смысле нам открывается нечто более, чем самодостаточный интерфейс базового класса. Мы обязаны выступить не как "пользователь" интерфейса класса, но как его разработчик, соблюдая внутреннюю задумку нашего базового типа, ибо элементарно можем ее поломать.
AVK>Всего лишь вопрос проектирования класса. Грамотно спроектированный класс ты не сможешь поломать и в наследнике, а неграмотно спроектированный можно сломать и через публичный интерфейс.
Весьма расплывчато понятие грамотности. Объявлять поля публичными, если это опасно для класса — не грамотно, по крайней мере это распространенное мнение, спорить с которым бесполезно.
Однако, полностью перекрыть доступ для потенциальных наследников может сказаться на эффективности, и повлиять на чашу весов "грамотности" подхода. Общественное мнение не высказывается категорично по этому вопросу, и это разумно. Наличие серьезных аргументов "за" и "против" способно лишь породить бесполезную дискуссию. Очевидно, что все зависит от конкретных условий.
V>>Не всякий класс дотнета является компонентом.
AVK>Всякий.
Абстракный — не компонент.
Не наследующий IComponent не может визуально обрабатываться студией, т.е. не выполняет задачи компонента: бинарное распространение и автоматизированное использование (ручками я могу равнотрудоемко и сорсы использовать).
Если принять твой взгляд на компонент, то ДДЛ-ка писанная на С++ впридачу с h-файлом тоже вполне компонент.
Широкое использование COM
От:
Аноним
Дата:
01.11.04 12:06
Оценка:
Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ?
01.11.04 15:10: Перенесено модератором из 'Прочее' — _MarlboroMan_
15.11.04 20:36: Перенесено из 'Философия программирования'
Здравствуйте, Аноним, Вы писали:
А> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ?
Microsoft на COM забил, так что можно сказать, что устарел. И, откровенно говоря, слава богу, поскольку более замуженную технологию еще поискать.
Здравствуйте, Аноним, Вы писали:
А> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ?
Бррр...
Как правило, применение СОМ не оправданно и не нужно. В больших ситсемах СОМ пытаются юзать чтобы отделить интерефейс от реализации и чтобы можно было править реализацию отдельных компонентов не ломая и не пересобирая всего остального. В С++ для отделения интерфейса от реализации (и сохранения двоичной совместимости) лучше всего воспользоваться паттерном P-Impl. Это лучше во всех отношениях и не требует введения дополнительного как правило не нужного уровня виртуализации.
Здравствуйте, <Аноним>, Вы писали:
А> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход?
Смотря что в замен. Если монолит на С++, то лучше уж КОМ. А если тоже самое но на Яве или дотнете и без скриптов, то конечно КОМ прошлый век.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Аноним, Вы писали:
А>> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ? GZ>А ты не спрашивал, в каком году начинался проект, и какие сист. требования приходили от клиентов или маркетинга?
GZ>С уважением, Gleb.
Боюсь что теперь это уже не имеет для них значения .... И что теперь всем делать делать с этой куой написанного кода на MFC, COM, и т.д. и т.п....
Здравствуйте, VladD2, Вы писали:
VD>МС тоже их ооочень долго готовил и тоже пришел к тому же.
У МС задачи были другими. Они платформы делали. А потому и не могли привязываться ни к какому конкретному языку (или реализации языка). Вот СОМ и придумали. Как вынужденую меру... Ну а логичным продолжением этого, как ты верно подметил, стал дотнет.
Здравствуйте, prVovik, Вы писали:
V>У МС задачи были другими. Они платформы делали.
МС делает (сейчас) сотни продуктов. От игр для ХБокса, до Ворда с Экселем. И везде компонетный подход применяется на всю катушку. И это именно от того что МС большая команию в которой понимают что можно выжать из этого подхода.
V> А потому и не могли привязываться ни к какому конкретному языку (или реализации языка).
У них 70% кода на С написано. Еще 25% на С++. Сейчас вот на Шарпе пытаются переписывать. Так что проблем с языком у них никогда не было.
V> Вот СОМ и придумали. Как вынужденую меру... Ну а логичным продолжением этого, как ты верно подметил, стал дотнет.
Дык придумали именно потому что по другому уже нельзя было.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
ГВ>>MS пришла к тому, что неплохо бы Java потеснить. VD>А Ява думешь что такое? У нее компонентный подход в сердцевине идеологии. Каждый класс — компенент.
Угумс, потому и подрались
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Kluev, Вы писали:
K>В итоге програмировать под эту компонентную кучу мусора стало настолько неудобно, что даже в МС решили кровь сменить дотнетом. И кстати дотнетный АПИ это как раз откат от чистой компонентности в стиле СОМ к статичекому связыванию. Ты же классы напрямую юзаешь, а не через интерфейсы.
Ну спорить с тобой о дотнете я не буду. Просто потому, что не интересно. Ты ведь и в этой области больше меня знаешь.
VD>>Потому что у тебя нет команды из сотни разработчиков.
K>Ерунда.
А что есть? Ну, а раз нет, то от чего же ерунда?
K> Во первых не поэтому, а потому, что я старый и мудрый
Да. Действительно. Старость не радость.
K> А во вторых к примеру линкусовое ядро монолит и пишется целой толпой и ничего.
Оно не такое уж большое. А все остальное точно так же на компонентной основе реализовано. Драйвер тоже своего рода компонент.
VD>>Это потому что вы не умете ее готовить.
K>Умею, поверь мне.
Рад бы, да не выходит.
K> Юзал и СОМ и сам несколько фреймворков своих написал. Чистая компонентность не нужна и неудобна. Удобно когда сама прога имеет статический апи, а вокруг уже куча динамических компонентов.
Ну, тебе виднее. Ты же старый и оптыный.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
K>>Ты же классы напрямую юзаешь, а не через интерфейсы.
AVK>С чего ты взял что связывание при этом статическое?
Имеется ввиду связывание с реализацией.
Ты же пишешь:
Foo f = new new Foo(); — конкретный класс реализация
а не:
а не IFoo а = CreateObject("Foo") — неизвестный класс реализации
Здравствуйте, VladD2, Вы писали:
VD>Оно не такое уж большое. А все остальное точно так же на компонентной основе реализовано. Драйвер тоже своего рода компонент.
Об этом и речь. Именно такой стиль я и использую. Некомпонентное ядро (со статическим апи) + плагины (сделаные как компоненты).
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
K>>Имеется ввиду связывание с реализацией. K>>Ты же пишешь: K>>Foo f = new new Foo(); — конкретный класс реализация
K>>а не: K>>а не IFoo а = CreateObject("Foo") — неизвестный класс реализации
AVK>И в чем разница?
Хм. А ты отличий не нашел?
Тогда попробую обьяснить. Во первых от CreateObject("Foo") не занаследуешься. Т.к. класс реализации не известен. Во вторых когда все через интерфейсы это просто неудобно и не быстро: лишний уровень виртаулизации. В третих создание обьектов либо через фабрику либо в интерфейсе должны быть производящие функции, тоже не гуд.
Особенно когда есть такой код:
void node_doWork( DataNode &node )
{
DataNode child( node, "relative/path/to/child/node" );
int x = child.someVal_get();
}
// а когда все через интерфейсы:void node_doWork( IDataNode &node )
{
IDataNode *child = node.child_open("relative/path/to/child/node");
int x = child->someVal_get();
child->close();
}
// казалось бы все тоже самое, а когда есть сборка мусора, тогда еще и не надо заботится о child->close()
// Однако вот еще другой пример:void node_doWork( DataNode &node )
{
MyCoolDataNode child( node, "relative/path/to/child/node" );
int x = child.someVal_get();
child.myWork();
}
Т.е. когда все компонентно и через интерфейсы, программирование становится геморойным. Мудрые мужи стремятся минимизировать геморой и посему минимзация компонентности в программе это верное решение.
Монолит надо разбивать не на компоненты, а на модули (dll-библиотеки классов с устойчивым апи и обратной двоичной совместимостью). А вот модули уже можно обвешивать разного рода плагинами и компонентами. При этом плагины связываются с модулями (dll) статически и юзают АПИ напрямую а не через интерфейсы.
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, AndrewVK, Вы писали:
AVK>>А компонент это и есть модуль с ОО-интерфейсом доступа, чтобы там не говорили некоторые товарищи. Главная фишка компонента — динамическое связывание, все остальное это особенности конкретных реализаций.
K>Ну что ж такое определение меня вполне устраивает. Просто если вернутся к мысли которую я толкал в начале ветки, то для большинства (80-90%) компонентов, вполне достаточно обычного С++ плюс DLL плюс паттерн P-Impl (обеспечивающий двоичную совместмость). Будет обеспечена компонентность и при этом исключается лишний уровень виртуализации. И при этом не надо городить огород типа СОМ и т.п.
Что понимаеися под паттерном P-IMPL + двоичная совместимость ? Не совсем вас понимаю ...
Здравствуйте, Kluev, Вы писали:
K>Ну что ж такое определение меня вполне устраивает. Просто если вернутся к мысли которую я толкал в начале ветки, то для большинства (80-90%) компонентов, вполне достаточно обычного С++ плюс DLL плюс паттерн P-Impl (обеспечивающий двоичную совместмость). Будет обеспечена компонентность и при этом исключается лишний уровень виртуализации.
Увы нет. Как показывает практика — без мощной RTTI такая компонетность оказывается неполноценной. Да и надежность подобного решения оставляет желать лучшего.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
K>>Ну что ж такое определение меня вполне устраивает. Просто если вернутся к мысли которую я толкал в начале ветки, то для большинства (80-90%) компонентов, вполне достаточно обычного С++ плюс DLL плюс паттерн P-Impl (обеспечивающий двоичную совместмость). Будет обеспечена компонентность и при этом исключается лишний уровень виртуализации.
AVK>Увы нет. Как показывает практика — без мощной RTTI такая компонетность оказывается неполноценной. Да и надежность подобного решения оставляет желать лучшего.
Это далеко не всегда нужно. Даже поддержку динамического создания и то приходится делать в редких случаях. Мне этого хватает. А насчет надежности несовсем понял, где здесь грабли? Не удалять методов из класса и не менять порядок обьявления виртуальных функций. И все будет ок. А в классах где есть наследование можно про запас обьявить штук пять-десять виртуальных функций про запас, на редкий случай расширения.
class MY_API MyClass
{
struct MyClass_imp *imp_; // это реализация, можно менять как угодноpublic:
void foo(); // а это интерфейсvoid bar(); // руками не трогать!
};
// где MY_API - это __declspec(dllexport/dllimport)
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Aviator, Вы писали:
K>Это вкратце вот так: K>
K>class MY_API MyClass
K>{
K> struct MyClass_imp *imp_; // это реализация, можно менять как угодно
K>public:
K> void foo(); // а это интерфейс
K> void bar(); // руками не трогать!
K>};
K>// где MY_API - это __declspec(dllexport/dllimport)
K>
Не совсем понимаю — и причём тут двоичная совместимость ???
Да и потом при таком подходе придётся всё на одном компиляторе компилить, то есть про написал, скомпили в ДЛЛ и забыл можно забыть...
Здравствуйте, Aviator, Вы писали:
A>Не совсем понимаю — и причём тут двоичная совместимость ???
Было написано "обратная двоичная совместимость". Т.е. старые модули будут работать с новыми dll без перекомпиляции.
A>Да и потом при таком подходе придётся всё на одном компиляторе компилить,
А на двух зачем компилить?
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Aviator, Вы писали:
A>>Не совсем понимаю — и причём тут двоичная совместимость ??? K>Было написано "обратная двоичная совместимость". Т.е. старые модули будут работать с новыми dll без перекомпиляции.
A>>Да и потом при таком подходе придётся всё на одном компиляторе компилить, K>А на двух зачем компилить?
Да потому что нету например желания возится со старыми отлаженными исходниками, писавшимися людьми которых давно уже нет в обозримом пространстве и о принципах работы которых можно только догадываться . В том же COM'е сделал кмпонент, прицепил к основной программе и забыл о нём...
А с Вашим подходом придётся периодически например перекомпилить исходные коды, авозиться с кодом и т.п... ну не удобно это ...
Тогда я ьы уж лучше предложил деать что — то типа своего простенького комоподобного подхода на С++
в длл:
// отдельный MuClass.hclass IMyClass {
public:
virtual void f1() = 0;
virtual void f2() = 0;
};
// проект DLLclass MyClass : public IMyClass {
public:
virtual void f1() {
// your implementation
}
virtual void f2() {
// your implementation
}
};
void* loadClass() {
return new MyClass();
}
К основной программе цепляем MyClass.h и загружаем класс
IMyClass pMyClass = (IMyClass*) loadClass();
Здравствуйте, Kluev, Вы писали:
K>Это далеко не всегда нужно.
Но весьма часто. Design-time вобще без этого невозможен.
K> Даже поддержку динамического создания и то приходится делать в редких случаях. Мне этого хватает. А насчет надежности несовсем понял, где здесь грабли?
Грабли в том что несоответствие форматов VMT порушит твое приложение. Причем причину ты будешь искать долго.
K> Не удалять методов из класса и не менять порядок обьявления виртуальных функций. И все будет ок.
А если удалить?
K> А в классах где есть наследование можно про запас обьявить штук пять-десять виртуальных функций про запас, на редкий случай расширения.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
K>>Это далеко не всегда нужно.
AVK>Но весьма часто. Design-time вобще без этого невозможен.
design time как правило нужен только для UI, а возьми к примеру АПИ какой нить системы типа PRO/E, acad или solidworks. К чему там дезигн-тайм? там его и применить то негде.
K>> Даже поддержку динамического создания и то приходится делать в редких случаях. Мне этого хватает. А насчет надежности несовсем понял, где здесь грабли?
AVK>Грабли в том что несоответствие форматов VMT порушит твое приложение. Причем причину ты будешь искать долго.
Не порушит т.к. компилер-то один юзается, о чем и сказано в доках. А кто не понял, я не виноват.
K>> Не удалять методов из класса и не менять порядок обьявления виртуальных функций. И все будет ок.
AVK>А если удалить?
А зачем? Даже если и удалишь то обнаружишь очень быстро. Системы выплюнет сообщение что функция в DLL не найдена.
K>> А в классах где есть наследование можно про запас обьявить штук пять-десять виртуальных функций про запас, на редкий случай расширения. AVK>Самому не смешно?
А чего смеятся, все так и делают. Посмотри например GTK, там честенько резервируют. Мудрые мужи знают что живут в мире где не может быть идеальных решений. Такой подход работает хорошо и с минимумом усилий.
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Aviator, Вы писали:
A>>>>Да и потом при таком подходе придётся всё на одном компиляторе компилить, K>>>А на двух зачем компилить?
A>>Да потому что нету например желания возится со старыми отлаженными исходниками, писавшимися людьми которых давно уже нет в обозримом пространстве и о принципах работы которых можно только догадываться . В том же COM'е сделал кмпонент, прицепил к основной программе и забыл о нём...
K>Это типичные заблуждения начинающего, об исходниках, удобстве и "сделал и забыл".
Даааааааа ?? Да что вы говорите ... Лично знаю контору где сделал компоненту, сгенерил длл-ку, свалил в общее хранилище и всё, с чужим кодом вообще никто не работает почти, то что сделано то рабоает, что работает плохо переписывается полностью, вся система состоит из кучи небольших длл-лек.
K>Полный отстой. Это даже хуже чем СОМ
Ну если руки кривые то всё полный отстой . Вот экспорт классов — это уж точняк редкостный изврат и в принципе не может быть хорошим решением, хотя бы потому что жёстко привязано к конкретному компилятору.
... Кстати, чем же полный отстой фабрика классов, можно узнать ?
ЗЫ Разумные люди пытаются использовать то хорошее что есть в каждом подходе и находить компоромиссные решения, а не придумывать принципы на пустом месте.
Здравствуйте, Aviator, Вы писали:
K>>Это типичные заблуждения начинающего, об исходниках, удобстве и "сделал и забыл". A> Даааааааа ?? Да что вы говорите ... Лично знаю контору где сделал компоненту, сгенерил длл-ку, свалил в общее хранилище и всё, с чужим кодом вообще никто не работает почти, то что сделано то рабоает, что работает плохо переписывается полностью, вся система состоит из кучи небольших длл-лек.
Ты лично сколько таких длл-лек написал? Что они делали? И как вообще удобно писалось?
K>>Полный отстой. Это даже хуже чем СОМ A> Ну если руки кривые то всё полный отстой . Вот экспорт классов — это уж точняк редкостный изврат и в принципе не может быть хорошим решением, хотя бы потому что жёстко привязано к конкретному компилятору.
А то что ты написал тоже привязано к конкретному компилятору т.к. нет гарантии что формат VFT совпадет. Более того даже если он случайно совпадет, то dynamic_cast, typeid и exceptions точно не совпадут, так что толку от такого подхода ноль. Никаких преимуществ по стравнению с экспортом классов, только лишний слой гемора добавлен.
A>... Кстати, чем же полный отстой фабрика классов, можно узнать ?
Я уже писал.
A>ЗЫ Разумные люди пытаются использовать то хорошее что есть в каждом подходе и находить компоромиссные решения, а не придумывать принципы на пустом месте.
Вот и я о том же. Надо писать просто и грамотно, а не придумывать лишний слой гемороя на пустом месте. Прочитай еще раз мои посты, авось поймешь. А то что ты предлагаешь, это действительно полный гемор, с которым народ сначала связывается, а потом плюется.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
AVK>>>Но весьма часто. Design-time вобще без этого невозможен. K>>design time как правило нужен только для UI,
AVK>Отнюдь. Просто для UI без него вобще жить очень сложно.
K>> а возьми к примеру АПИ какой нить системы типа PRO/E, acad или solidworks.
AVK>Не имею честь быть знакомым.
AVK>>>Грабли в том что несоответствие форматов VMT порушит твое приложение. Причем причину ты будешь искать долго.
K>>Не порушит т.к. компилер-то один юзается, о чем и сказано в доках.
AVK>Ты можешь в доках что угодно указывать — это тебя не спасет.
K>> А кто не понял, я не виноват. AVK>Вот вот.
Почему же вот-вот? Насколько я знаю Борланд к примеру в микросовтовских либах только extern "С" понимает. Так что даже скомпилить не получится. А у кого получилось, тот наверное знает что делает.
AVK>>>А если удалить? K>>А зачем?
AVK>А вот идиот какой код попортил.
Когда идиот портит код тогда уже мало что поможет. Идиотов только на разработку плагинов надо бросать, core — это для мудрых мужей.
K>> Даже если и удалишь то обнаружишь очень быстро. AVK>Вот это вряд ли.
Намек понят?
AVK>Или из-за несовпадения размеров VMT будет проход по памяти.
Не будет. Размер VMT не меняется. Т.к. виртуальными при использовании P-Impl нужно делать только колбеки типа onMessage которые в дочерних классах переопределяются и как правило число таких функций не увеличивается, есть и заглушки для расширения, и одна универсальная на случай ядерной войны. А входящие можно обьявлять не виртуальными, а виртуальность обеспечивается уже в реализации P-Impl
K>> Посмотри например GTK, там честенько резервируют. AVK>Их проблемы.
Проблемы там есть толко в другом. С этом как раз проблем нет.
AVK>Мудрые мужи при наличии более надежных и удобных решений используют их, а не продолжают жрать кактус.
Ага, только эти надежные и удобные решения не применимы в проектах где 800 мегов памяти требуется для расчета. Только законченный дурак будет писать тяжелые CAD/CAM/САЕ системы на яве или шарпе.
Здравствуйте, Kluev, Вы писали:
K>>>А зачем? AVK>>А вот идиот какой код попортил. K>Когда идиот портит код тогда уже мало что поможет. Идиотов только на разработку плагинов надо бросать, core — это для мудрых мужей.
Вот в плагине и попортит . Точнее сервер твой попортит, когда в плагине будет совсем не тот VMT что ожидается.
K>>> Даже если и удалишь то обнаружишь очень быстро. AVK>>Вот это вряд ли. K> K>Намек понят?
Нет. Несоответствия разные могут быть.
AVK>>Или из-за несовпадения размеров VMT будет проход по памяти. K>Не будет. Размер VMT не меняется. Т.к. виртуальными при использовании P-Impl нужно делать только колбеки типа onMessage которые в дочерних классах переопределяются и как правило число таких функций не увеличивается, есть и заглушки для расширения, и одна универсальная на случай ядерной войны.
Все это здорово до тех пор пока чудик из плагина не передаст тебе на вход какой нибудь совершенно левый класс.
AVK>>Их проблемы. K>Проблемы там есть толко в другом. С этом как раз проблем нет.
Наличие мусора это признак несовершеннности технологии.
AVK>>Мудрые мужи при наличии более надежных и удобных решений используют их, а не продолжают жрать кактус.
K>Ага, только эти надежные и удобные решения не применимы в проектах где 800 мегов памяти требуется для расчета. Только законченный дурак будет писать тяжелые CAD/CAM/САЕ системы на яве или шарпе.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
AVK>Вот в плагине и попортит . Точнее сервер твой попортит, когда в плагине будет совсем не тот VMT что ожидается.
Ну, такое возможно только если человек отредактирует мои хидеры. Тогда VMT будет другой. Но это уже не мои проблеммы.
K>>>> Даже если и удалишь то обнаружишь очень быстро. AVK>>>Вот это вряд ли. K>> K>>Намек понят?
AVK>Нет. Несоответствия разные могут быть.
Тем не менее сразу видно имя функции и класса. Остально можно depends-ом посмотреть. Он еще и имена функций раздекорирует. Тоже самое с плагином. Если сбойнул LoadLibrary идем в депендс и смотрим. Вообщем не та ошибка котороую ищут неделями. Пара минут не больше.
AVK>>>Или из-за несовпадения размеров VMT будет проход по памяти. K>>Не будет. Размер VMT не меняется. Т.к. виртуальными при использовании P-Impl нужно делать только колбеки типа onMessage которые в дочерних классах переопределяются и как правило число таких функций не увеличивается, есть и заглушки для расширения, и одна универсальная на случай ядерной войны.
AVK>Все это здорово до тех пор пока чудик из плагина не передаст тебе на вход какой нибудь совершенно левый класс.
От этого никто не застрахован. Если сидишь в одном адресном пространстве то испортить можно все что угодно.
AVK>Наличие мусора это признак несовершеннности технологии.
Да нет здесь совершенных технологий. Все несовершенны. Болое того сейчас мы пытаемся искать какую-то красоту среди нулей и едениц. Ну не тщетно ли?
K>>Ага, только эти надежные и удобные решения не применимы в проектах где 800 мегов памяти требуется для расчета. Только законченный дурак будет писать тяжелые CAD/CAM/САЕ системы на яве или шарпе.
AVK>Тут вот уже про Autocad 2005 кто то писал .
И что же он писал? Акад сидит на ядре ACIS, а это С++ библиотека. Альтернатива ему только parasolid — C библиотека. А писать свое собственное — это примерно 600 человеко-лет работы (цифра взята из рекламы parasolida). Скорее всего на шарпе будет только UI. Да и то я не вижу особых преимуществ юзать дотнет в такой системе.
Здравствуйте, Kluev, Вы писали:
AVK>>Нет. Несоответствия разные могут быть. K>Тем не менее сразу видно имя функции и класса. Остально можно depends-ом посмотреть. Он еще и имена функций раздекорирует. Тоже самое с плагином. Если сбойнул LoadLibrary идем в депендс и смотрим. Вообщем не та ошибка котороую ищут неделями. Пара минут не больше.
Я тебе уже сказал — самое страшное если из-за каких либо несовместимостей компиляторов, версий хидеров и прочая у тенбя будет проход по памяти. Это тот же самый dll hell, только намного хуже.
AVK>>Все это здорово до тех пор пока чудик из плагина не передаст тебе на вход какой нибудь совершенно левый класс. K>От этого никто не застрахован. Если сидишь в одном адресном пространстве то испортить можно все что угодно.
Вот только в дотнете я получу внятную ошибку и нетронутое ядро, а в твоем случае проход по памяти и ядро рухнет.
AVK>>Наличие мусора это признак несовершеннности технологии. K>Да нет здесь совершенных технологий. Все несовершенны.
Только одна больше другой.
K> Болое того сейчас мы пытаемся искать какую-то красоту среди нулей и едениц. Ну не тщетно ли?
Здравствуйте, AndrewVK, Вы писали:
AVK>>>Нет. Несоответствия разные могут быть. K>>Тем не менее сразу видно имя функции и класса. Остально можно depends-ом посмотреть. Он еще и имена функций раздекорирует. Тоже самое с плагином. Если сбойнул LoadLibrary идем в депендс и смотрим. Вообщем не та ошибка котороую ищут неделями. Пара минут не больше.
AVK>Я тебе уже сказал — самое страшное если из-за каких либо несовместимостей компиляторов, версий хидеров и прочая у тенбя будет проход по памяти. Это тот же самый dll hell, только намного хуже.
Я не понимаю откуда ему взятся проходу по памяти? и кстаи что ты имеешь ввиду под этим словом?
AVK>>>Все это здорово до тех пор пока чудик из плагина не передаст тебе на вход какой нибудь совершенно левый класс. K>>От этого никто не застрахован. Если сидишь в одном адресном пространстве то испортить можно все что угодно.
AVK>Вот только в дотнете я получу внятную ошибку и нетронутое ядро, а в твоем случае проход по памяти и ядро рухнет.
Опять же что-такое проход по памяти? И потом плагин может испортить данные ядра просто неумелым вызовом функций ядра. Не хочешь же ты сказать, что ты все ходы предусмотрел? В этом случае либо ядро упадет из-за внутренней ошибки, либо данные будут испорчены.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
AVK>>>Я тебе уже сказал — самое страшное если из-за каких либо несовместимостей компиляторов, версий хидеров и прочая у тенбя будет проход по памяти. Это тот же самый dll hell, только намного хуже. K>>Я не понимаю откуда ему взятся проходу по памяти?
AVK>Из-за несовпадения размеров и форматов dll.
Это наверное шутка была? Формат один PE32.
K>> и кстаи что ты имеешь ввиду под этим словом? AVK>А что, это выражение допускает разные трактовки?
А я так и не понял. Что за проход? куда проход?
AVK>>>Вот только в дотнете я получу внятную ошибку и нетронутое ядро, а в твоем случае проход по памяти и ядро рухнет. K>>Опять же что-такое проход по памяти? И потом плагин может испортить данные ядра просто неумелым вызовом функций ядра. Не хочешь же ты сказать, что ты все ходы предусмотрел? В этом случае либо ядро упадет из-за внутренней ошибки, либо данные будут испорчены.
AVK>Вот поэтому мудрые мужи пользуют технологии, позволяющие гарантированно избежать подобных ситуаций
Мудрые мужи не вводятся в заблуждение гарантированными технологиями. Если плагины вызвает фунекции в последовательности которая не предусмотрена ядром, то оно может упасть очень легко. Хотя плагин будет живее всех живых. Оно не упадет только если все вызовы ядра атомарные. А это отнюдь не всегда возможно, и не всегда удобно. Все равно всего не предусмотришь. Либо будешь пахать 100 лет ради обесчпечения надежности которая может и не понадобится никому.
A>>Да потому что нету например желания возится со старыми отлаженными исходниками, писавшимися людьми которых давно уже нет в обозримом пространстве и о принципах работы которых можно только догадываться . В том же COM'е сделал кмпонент, прицепил к основной программе и забыл о нём...
K>Это типичные заблуждения начинающего, об исходниках, удобстве и "сделал и забыл".
Ну эт ты зря... Я вот щас с прожектом работаю — так в нем порядка 70 СОМ-компонентов. И половина пасаны 3-5 лет назад. Реально все что требуется для работы с ними — это idl ну и документация, че компонент делает. Никакого гемора нету. Конечно да, тормоза с виртуальностью никуда не деваются, но это уже другая песня.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Kluev, Вы писали:
K>>Об этом и речь. Именно такой стиль я и использую. Некомпонентное ядро (со статическим апи) + плагины (сделаные как компоненты).
VD>По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
Вот тут поподробнее. Можно даже в отдельной ветке.
ЗЫ: я (пока) не собираюсь оспаривать это утверждение. Мне просто интересно, чем оно обосновано.
Здравствуйте, Kluev, Вы писали:
AVK>>Из-за несовпадения размеров и форматов dll. K>Это наверное шутка была? Формат один PE32.
Описка, отвелкали. Имелась ввиду конечно VMT.
AVK>>А что, это выражение допускает разные трактовки? K>А я так и не понял. Что за проход? куда проход?
Порча памяти программы из-за неверного определения адресов.
AVK>>Вот поэтому мудрые мужи пользуют технологии, позволяющие гарантированно избежать подобных ситуаций K>Мудрые мужи не вводятся в заблуждение гарантированными технологиями. Если плагины вызвает фунекции в последовательности которая не предусмотрена ядром, то оно может упасть очень легко.
Это уже ошибка другого рода, причем ошибка ядра. Опять же в грамотном ядре грохнется максимум обслуживающий клиента поток. Впрочем это я уже о серверах, а у тебя задачи другие.
K> Хотя плагин будет живее всех живых. Оно не упадет только если все вызовы ядра атомарные.
Оно не упадет если любое внещнее воздействие не приведет ядро в неожиданное состояние. Это не так сложно обеспечить. Впрочем неважно — эта ошибка общая для любой технологии.
K> А это отнюдь не всегда возможно, и не всегда удобно. Все равно всего не предусмотришь. Либо будешь пахать 100 лет ради обесчпечения надежности которая может и не понадобится никому.
Практика показывает что и надежность очень нужна и пахать для этого 100 лет не надо. Ладно, не будем о серверах, возьмем десктопный янус — практически все ошибки им переносятся без падения, а ведь его никто специально для этого никто не затачивал.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Kluev, Вы писали:
K>>Об этом и речь. Именно такой стиль я и использую. Некомпонентное ядро (со статическим апи) + плагины (сделаные как компоненты).
VD>По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
Вот тут поподробнее. Можно даже в отдельной ветке.
ЗЫ: я (пока) не собираюсь оспаривать это утверждение. Мне просто интересно, чем оно обосновано.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ> Вот тут поподробнее. Можно даже в отдельной ветке. ЗХ> ЗЫ: я (пока) не собираюсь оспаривать это утверждение. Мне просто интересно, чем оно обосновано.
Ой, это старый и довольно безнадежный флэйм. Мач вс. монолит. Тут его уже не раз поднимали. А я что-то подустал в этих баталиях.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
ЗХ>> Вот тут поподробнее. Можно даже в отдельной ветке. ЗХ>> ЗЫ: я (пока) не собираюсь оспаривать это утверждение. Мне просто интересно, чем оно обосновано.
VD>Ой, это старый и довольно безнадежный флэйм. Мач вс. монолит. Тут его уже не раз поднимали. А я что-то подустал в этих баталиях.
Не, это все мне более-менее понятно (по ночам занимаюсь созданием своей платформы. на С++ )
Мне стало интересно вот это:
VD>А Линукс — это просто флаг кривого дизайна.
Кой-чего конечно и в JustForFun'е можно вычитать. Но все же? Поделись, а? (без ыронии)
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Кой-чего конечно и в JustForFun'е можно вычитать. Но все же? Поделись, а? (без ыронии)
Еще раз повторяю можем породить еще один Вынь. вс. Линь. А за это меня уже порвут.
А Линукс просто является ярчайшим представителем дизайна "все в одном". Ядро собирается в одну большую махину без намеков на компоненты. Например, драйвер можно выдрать из ядра только если поставить дефан в исходниках и перекомпилировать ядро. Есть старонники такого подхода. Но спорить с ними я катигорически отказываюсь.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>>Кой-чего конечно и в JustForFun'е можно вычитать. Но все же? Поделись, а? (без ыронии)
VD>Еще раз повторяю можем породить еще один Вынь. вс. Линь. А за это меня уже порвут.
VD>А Линукс просто является ярчайшим представителем дизайна "все в одном". Ядро собирается в одну большую махину без намеков на компоненты. Например, драйвер можно выдрать из ядра только если поставить дефан в исходниках и перекомпилировать ядро. Есть старонники такого подхода. Но спорить с ними я катигорически отказываюсь.
Понял. Кстати, Линус это дело пытался оправдывать... И даже приводил свою переписку с Танненбаумом на повышенных тонах.
ЗЫ: а вообще JustForFun меня разочаровал. Нудотина.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Кстати, Влад. За последнюю неделю я уже раз 5 видел такой стиль сворачивания дискуссии: ЗХ>Твой оппонент утверждает нечто. Ты требуешь это немедленно и убедительно доказать. Оппонент приводит доказательства и просит их опровергнуть, на что следует неизбежное: "тебе надо, ты и дискутируй; я в своем мнении уверен и никому ничего доказывать не собираюсь."
Если человек говорит: "по-моему" или "имхо", то требовать доказательтв от него глупо. Максимум попросить более детального объясниния. Иначе свое мнение вообще будет нвеозможно иметь, так как ты будешь постоянно оправдваться и находить аргументы.
Ну, а если человек навязывает свое мнение другим, то грех не попросить обоснований.
Заметь, я не утверждаю, а просто высказываю свою точку зрения. К тому же воросы бывают разные. Это как раз из тех на которые можно убить несколько месяцев и ничего не добиться. А я и так слишком много времени на Интернет трачу.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Kluev, Вы писали:
K>Мудрые мужи не вводятся в заблуждение гарантированными технологиями. Если плагины вызвает фунекции в последовательности которая не предусмотрена ядром, то оно может упасть очень легко. Хотя плагин будет живее всех живых. Оно не упадет только если все вызовы ядра атомарные. А это отнюдь не всегда возможно, и не всегда удобно. Все равно всего не предусмотришь. Либо будешь пахать 100 лет ради обесчпечения надежности которая может и не понадобится никому.
VladD2:
>>> По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
> ПК> А по-моему подобные огульные высказывания — признак недостаточно глубокого знакомства с проблемой.
> А, по-моему, применение ярлыков вроде "огульные высказывания" является некрасивым приемом в дисскусии. Я высказал свое мнение. Никаким огульным оно не может являеться по определению. Я не обязан подтверждать свое мнение.
"Огульное" по определению означает, что высказывание недостаточно обоснованно. Ты видишь в своем сообщении обоснования своего высказывания? Раз обоснования ты не приводишь, таковым оно и останется.
> ПК> и монолитным ядром вовсе не очевиден. И у того, и у другого решения есть как достоинства, так и недостатки.
> Мля, очевиден, не очевиден. Мне совершенно фиолетово, что там тебе не очевидно. Мне все очевидно. Я всказал, свое мнение. Имею право? Ну, и все. Точка. Закрыли тему.
Когда участие в дискуссии сводится к высказыванию своего мнения, да еще в категоричной форме, с отказом это мнение обосновать, а подчас с переходом на личности, это называется "война мнений", также известное как "флейм". А право ты, естественно, имеешь.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, VladD2, Вы писали:
VD>Еще раз повторяю можем породить еще один Вынь. вс. Линь. А за это меня уже порвут.
VD>А Линукс просто является ярчайшим представителем дизайна "все в одном". Ядро собирается в одну большую махину без намеков на компоненты. Например, драйвер можно выдрать из ядра только если поставить дефан в исходниках и перекомпилировать ядро. Есть старонники такого подхода. Но спорить с ними я катигорически отказываюсь.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Ну, дело твое конечно ЗХ>Но местами это правда выглядит так, что — сказать нечего, поэтому вместо следующего шага в дискуссии начинаем посылать (например: Влад: — Приведи доказательства; ПК: — Погугли по терминам таким-то; Влад: — Пошел нафик, тебе надо — ты и гугли.)
Есть такая штука — презумпция невиновности. Так вот ее основной смысл в том, чтобы человека нельзя было замотать оправданиями. Порой очень просто сказать, например, "а ты найди ссылки, что ты не верблюд". Вроде и так ясно что этот так, но подтвердить это ссылкой?... Если это и возможно то на это можно всю жизнь убить. Или предположим сказать "а ты дай ссылки на все успешные коммерческие проекты написанные на .NET-е", и добавить "а если не найдешь, то будем считать, что на .NET-е писать ничего серьезного нельзя". Понятно, что если этим серьезно заняться и провести исследование, то можно нарыть море софта написанного на .NET. Более того, такие ссылки то и дело пробегают мимо. Но что же теперь чтобы оправдаться, что я не верблюд я должен заняться серьезной исследовательской работой по не интересующему меня вопросу? Или в отсутствии этих ссылок станет верным утверждение о том, что на .NET-е нельзя писать серьезный софт? А как же Хоум? А как же тот же R#? А как работа, ведущаяся тем же АВК в Парусе? А как же наш site? А как же виденная мной 3D-игрушка целиком, написанная на .NET-е? Я ведь прекрасно знаю, что все это успешные проекты, четко доказывающие не только возможность применения .NET-а на практике, но и огромные преимущества его перед другими средствами. Но мне твердят, ах не можешь нарыть ссылки?!! Да не хочу! У меня других проблем полно. Тебе надо, ты и рой.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Понял. Кстати, Линус это дело пытался оправдывать... И даже приводил свою переписку с Танненбаумом на повышенных тонах.
А что ему остается делать? Вопрос тут непростой. Линукс как никак работает. Его опенсорсность дейсвтиетльно позволяет не развалиться даже при чудовищной архитектуре. Мы вот делая Хоум тоже пришли к выводу, что делать к нему плагины бессмысленно. Проще вносить изменения в исходники. Мы прекрасно понимаем, что это плохой дизайн. Но Хоум делается в свободное время и мы идем по пути наименьшего сопративления. А тот спор с Танненбаумом по-моему выглядел просто смешно. Линукс тога был вообще поделкой. Ну, да каждый может усмотреть здесь все что захочет.
Еще раз повторю, что это практически религиозный вопрос. Даже для обоснования своей точки зрения тут нужно вывалить целую теорию многое из которой будет так же зависить от взглядов на жизнь. И так как есть несколько базовых взглядов на жизнь, то такая тема быстро перерастет во вселенский флэйм. Оно нам надо?
ЗХ>ЗЫ: а вообще JustForFun меня разочаровал. Нудотина.
Ну, весь РСДН фофаны, так чтаа... В общем, еще одна вселенская тема.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WFrag, Вы писали:
WF>Ты не прав. Модули там есть.
WF>instmod mydriver.ko // загрузить драйвер WF>rmmod mydriver.ko // выгрузить драйвер
Тогда выгрузи сетевой драйвер. Ну, а меня убеждать в полезности модульности не нужно. Я сам считаю ее очень полезной, если конечно все грамотно спроектировано.
WF>Примерно так. Так что лучше на этом развитие темы и закрыть
Вот с этим нельзя не согласиться.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>На мой вкус, лучшая книжка о том, как нечто было создано, должна на 9/10 быть "Дизайном и Эволюцией" и только на 1/10 JustForFun'ом (разбавить научные рассуждения житейскими байками)
Ясно. Тут я с тобой согласен. Это работать нужно форфан, а проектировать и описывать нужно максимально серьзно, а то потом буду спрашивать дге вы такую дурь для своего фофанства берете.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>>На мой вкус, лучшая книжка о том, как нечто было создано, должна на 9/10 быть "Дизайном и Эволюцией" и только на 1/10 JustForFun'ом (разбавить научные рассуждения житейскими байками)
VD>Ясно. Тут я с тобой согласен. Это работать нужно форфан,
+1
VD>а проектировать и описывать нужно максимально серьзно
бээээ
это ж заснуть можно, если ко всему абсолютно серьезно относиться.
я, к примеру, свою книжку стараюсь писать максимально интересно, но несерьезно. Потому что.
Здравствуйте, VladD2, Вы писали:
VD>Тогда выгрузи сетевой драйвер.
Не выгружаются у меня только драйвера чипсета, USB, unix и ipv6 (может еще что по мелочам). В принципе, частично ты прав — ipv6 все-таки не выгрузился, но зато выгрузились все остальные модули связанные с сетью (в том числе и драйвер сетевой карточки).
VD>Ну, а меня убеждать в полезности модульности не нужно. Я сам считаю ее очень полезной, если конечно все грамотно спроектировано.
Я не пытаюсь тебя убедить. Я пытаюсь тебе сказать, что ты не совсем прав. Конкретно я не согласен с вот этим вот сообщением:
Ядро собирается в одну большую махину без намеков на компоненты. Например, драйвер можно выдрать из ядра только если поставить дефан в исходниках и перекомпилировать ядро.
Без всяких перекомпиляций я выгрузил из ядра практически все — видео, звук, модем, сеть, USB-устройства, BlueTooth stack, NTFS, FAT32, и.т.д. Вполне модульно
Здравствуйте, AndrewVK, Вы писали:
AVK>Мудрые мужи стараются не придерживаться замшелых принципов и позволяют от компонентов наследоваться.
С т.з. зрения наследника — это уже не компонент а класс, иначе никак.
Компонент — это "черный" ящик с парой интерфейсов.
AVK>А компонент это и есть модуль с ОО-интерфейсом доступа, чтобы там не говорили некоторые товарищи. Главная фишка компонента — динамическое связывание, все остальное это особенности конкретных реализаций.
Дудки.
Главная фишка компонента — инкапсуляция сложности внутри себя и обеспечение двоичной совместимости со средой, где работает, и интерфейсами, как своими, так и других компонентов.
Ты все время говоришь о классах, ИМХО.
В Яве ввели бины, и тоже назвали их компонентами. Смешные ребята, право.
В MS они оставили компоненты только как ср-во для визуального накидывания. С т.з. именно среды разработки, упомянутые классы — настоящие компоненты. Студия не собирается их наследовать, но должна с ними единообразно работать, что и делает, через эти пару интерфесов.
Т.е. компоненная сторона этих компонентов используется только в момент работы со студией, и никогда в рантайме (за исключением аналогичных студии задач).
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Kluev, Вы писали:
K>>Ты же классы напрямую юзаешь, а не через интерфейсы.
AVK>С чего ты взял что связывание при этом статическое?
он наверно имел ввиду возможность непосредственного использования классов,
для создания, там, наследования и пр.
Действительно, голый компонентный подход порождает кучу геммора и дополнительных приседаний.
Подход Явы и дотнета — смешанный, и потому успешный.
Здравствуйте, VladD2, Вы писали:
VD>По-моему, огромное монолитное ядро — это признак плохого дизайна. Если продукт пишется одним человеком или группой из 3-5 человек, то может это и нормально. А Линукс — это просто флаг кривого дизайна.
нет там никакого дизайна.
есть posix API, различные части которого сами по себе плохо связаны.
API не объектное, функциональное, и что с того?
для 70-х, очень даже ничего.
AndrewVK,
> Тут вопрос терминологии — монолитность в плане модульности действительно суровый недостаток, поэтому в современном линуксе кое что уже подгружаемое.
ОК, в такой постановке, применительно к Линуксу, возражений нет.
> Ну а изоляция ядра это действительно религиозный вопрос, только к КОП она имеет отдаленное отношение.
Согласен.
> ПК> даже с учетом этих поправок полагать такую архитектуру бесспорным недостатком дизайна операционной системы, имхо, тоже неверно.
> Не знаю. По мне так современная ОС без модульности просто немыслима.
Даже встроенная в часы/микроволновку/истребитель? А применительно к прикладной программе, о которой, собственно, и шла речь изначально? Снова-таки, это относится ко всем мыслимым прикладным программам, или только к некоторым?
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Kluev, Вы писали:
K>P.S.S: И где кстати ты видел у МС проги написанные в таком стиле? У них либо монолит, либо помйка с ОЛЕ. Которая ни себе ни людям. Наружу торчат какие-то полулевые наполовину реализованные интерфейсы возвращающие E_NOTIMPL, а для себя юзаются закрытые.
весь выньапи — p-Impl чистой воды, хендлы — это указатели на сокрытые структуры-имплементаторы.
ранее они это на сях писали, теперь на С++, посмотри на заголовки GdiPlus, они есть у тебя. Там тоже p-Impl,
//---------------------------------------------------------------------------
// GDI+ classes for forward reference
//---------------------------------------------------------------------------class Graphics;
class Pen;
...
//---------------------------------------------------------------------------
// Private GDI+ classes for internal type checking
//---------------------------------------------------------------------------class GpGraphics {};
class GpBrush {};
class GpTexture : public GpBrush {};
...
//--------------------------------------------------------------------------
// Pen class
//--------------------------------------------------------------------------class Pen : public GdiplusBase
{
public:
friend class GraphicsPath;
friend class Graphics;
Pen(IN const Color& color,
IN REAL width = 1.0f)
{
Unit unit = UnitWorld;
nativePen = NULL;
lastResult = DllExports::GdipCreatePen1(color.GetValue(),
width, unit, &nativePen);
}
...
protected:
GpPen* nativePen; // здравствуй пимпл :)mutable Status lastResult;
};
Да, за MFC им надо руки оторвать. Вернее не за MFC (для конца 80-х это было нормально), а за агрессивное его продвижение в начале 90-х. До сих пор многие де-факто на нем пишут (и я тоже частенько), ибо очень много наработок и в мире, да и просто у разработчиков осталось для этой т.н. "технологии".
Более поздние их "велосипеды" не так уж плохи: WTL, GdiPlus,
а по поводу дотнета даже куча ярых приверженцев на RSDN
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Которая сюда совершенно никакого отношения не имеет. Тут ситуация совершенно обратная. Тебя ни в чем не обвиняют, просто утверждают, что в дискуссии никакие утверждения изначально верными не считаются. Соответственно, если ты выдвинул какой-либо аргумент, с верностью которого твой оппонент не согласен, и этот аргумент ты не обосновываешь, то этот аргумент в дискуссии просто не учитывается.
Я высказал свое мнение, а не противопоставил одно утвердение другому, или выдвинул его в качестве аргумента.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, vdimas, Вы писали:
V>Слишком громко сказано. Дотнет и Ява вообще возможны только лишь по той причине, что 150 метров на диске и 30-80 метров в памяти — это плевое дело нынче. Да и процы шустрые ноне.
Ну и какой из этого вывод?
V>Запускал дотнет на вынь-СЕ?
Запускал. Ничего сверхужасного. А учитывая тенденции скоро на КПК будет 1Ггц и 256М памяти, а этого уже достаточно с большим запасом.
Здравствуйте, vdimas, Вы писали:
AVK>>Мудрые мужи стараются не придерживаться замшелых принципов и позволяют от компонентов наследоваться. V>С т.з. зрения наследника — это уже не компонент а класс, иначе никак.
С чего ты взял что не компонент? Вполне компонент.
V>Компонент — это "черный" ящик с парой интерфейсов.
Так наследник точно так же имеет интерфейс к базовому классу, только он несколько расширен по сравнению с публичным.
V>Дудки. V>Главная фишка компонента — инкапсуляция сложности внутри себя и обеспечение двоичной совместимости со средой, где работает, и интерфейсами, как своими, так и других компонентов.
V>Ты все время говоришь о классах, ИМХО.
Здравствуйте, vdimas, Вы писали:
V>Действительно, голый компонентный подход порождает кучу геммора и дополнительных приседаний. V>Подход Явы и дотнета — смешанный, и потому успешный.
Нет такого в КОП чтобы это было запрещено. Ссылку на современное определение компонентного программирования я уже приводил. Да и вобще не понимаю я этого стремления к формализму. Ну назовем мы классы дотнета некомпонентами, что от этого изменится? Дотнет сразу станет некошерным?
Здравствуйте, Павел Кузнецов, Вы писали:
>> Не знаю. По мне так современная ОС без модульности просто немыслима.
ПК>Даже встроенная в часы/микроволновку/истребитель?
В часы и микроволновку не знаю, там вобще ОС нет (не считая отдельных извращений). Что же касается истребителя то безусловно.
ПК> А применительно к прикладной программе, о которой, собственно, и шла речь изначально? Снова-таки, это относится ко всем мыслимым прикладным программам, или только к некоторым?
Здравствуйте, vdimas, Вы писали:
AVK>>В Линуксе же, особенно в старых версиях, ядро линковалось в один большой модуль, даже вместе с драйверами. Об этом Влад собственно и говорил.
V>И сейчас можно выбранные дрова слинковать в ядро.
Здравствуйте, vdimas, Вы писали:
V>Более поздние их "велосипеды" не так уж плохи: WTL, GdiPlus, V>а по поводу дотнета даже куча ярых приверженцев на RSDN
К сожалению в случае гуев в дотнете они недалеко ушли. Винформсы по архитектуре это где то середина 90-х. А Avalon еще неизвестно когда будет.
Здравствуйте, vdimas, Вы писали:
V>Да, за MFC им надо руки оторвать. Вернее не за MFC (для конца 80-х это было нормально), а за агрессивное его продвижение в начале 90-х.
Какой-такой конец 80-х? Что-то неприпоминаю MFC под DOS
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, AndrewVK, Вы писали:
V>>Слишком громко сказано. Дотнет и Ява вообще возможны только лишь по той причине, что 150 метров на диске и 30-80 метров в памяти — это плевое дело нынче. Да и процы шустрые ноне.
AVK>Ну и какой из этого вывод?
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, vdimas, Вы писали:
AVK>>>Мудрые мужи стараются не придерживаться замшелых принципов и позволяют от компонентов наследоваться. V>>С т.з. зрения наследника — это уже не компонент а класс, иначе никак.
AVK>С чего ты взял что не компонент? Вполне компонент.
Вполне не компонент
(и т.д.)
V>>Компонент — это "черный" ящик с парой интерфейсов.
AVK>Так наследник точно так же имеет интерфейс к базовому классу, только он несколько расширен по сравнению с публичным.
Мы имеем protected члены, которые НЕ являются интерфейсом класса для внешнего мира, а служат для использования наследниками. Я понимаю твой ход рассуждений насчет своеобразного интерфейса для наследников, однако мы ПРИНЦИПИАЛЬНО можем иметь доступ не только к методам, инкапсулирующим алгоритмы изменения состояний объекта, но и просто к полям, т.е. "сырым" данным. И в этом смысле нам открывается нечто более, чем самодостаточный интерфейс базового класса. Мы обязаны выступить не как "пользователь" интерфейса класса, но как его разработчик, соблюдая внутреннюю задумку нашего базового типа, ибо элементарно можем ее поломать.
V>>Ты все время говоришь о классах, ИМХО.
AVK>Класс дотнета есть частный случай компонента.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, vdimas, Вы писали:
V>>Более поздние их "велосипеды" не так уж плохи: WTL, GdiPlus, V>>а по поводу дотнета даже куча ярых приверженцев на RSDN
AVK>К сожалению в случае гуев в дотнете они недалеко ушли. Винформсы по архитектуре это где то середина 90-х. А Avalon еще неизвестно когда будет.
Разве MFC — это только ГУИ?
Разве GuiPlus (активно использующийся дотнетом на вынь) — это Windows.Forms?
Windows.Drawing вполне потянет
А насчет Windows.Forms, дык, я думаю им некогда было изобретать еще один велосипед,
они 1-в-1 взяли интерфейсы и алгоритмы из ActiveX Control Host, на этом у них построено все взаимодействие м/у контролами. Т.е. взяли надежную, испытанную десятилетием технологию
Заодно "попутно" получили совместимость с де-факто существующей тонной ActiveX-компонентов, что на начальных этапах "раскрутки" технологии давало немало дополнительных очков...
Здравствуйте, vdimas, Вы писали:
V>>>Да, за MFC им надо руки оторвать. Вернее не за MFC (для конца 80-х это было нормально), а за агрессивное его продвижение в начале 90-х. AJD>>Какой-такой конец 80-х? Что-то неприпоминаю MFC под DOS V>А вот я припоминаю под Win3.1
Да, MSVC 1.5 и MFC примерно такой же версии.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
VD>>А Ява думешь что такое? У нее компонентный подход в сердцевине идеологии. Каждый класс — компенент. ГВ>Угумс, потому и подрались
PS. Вернее, не "потому", а "ради того".
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Kluev, Вы писали:
K>>Скорее всего на шарпе будет только UI. Да и то я не вижу особых преимуществ юзать дотнет в такой системе.
VD>Видимо по этому они не взяли тебя главным архитектором.
Да нет просто перевод акада на дот-нет судя повсему оказался пустым трепом. Можешь глянуть к нему девелоперскую докцументацию. Мелкие макросы в нем можно и на ВБ писать, а для серьезных вещей: ObjectARX — набор плюсовых библиотек.
Здравствуйте, vdimas, Вы писали:
V>Мы имеем protected члены, которые НЕ являются интерфейсом класса для внешнего мира,
Почему?
V>Я понимаю твой ход рассуждений насчет своеобразного интерфейса для наследников, однако мы ПРИНЦИПИАЛЬНО можем иметь доступ не только к методам, инкапсулирующим алгоритмы изменения состояний объекта, но и просто к полям, т.е. "сырым" данным.
Если их объявить доступными наследникам. Но ровно так же мы можем объявить поля и публичными.
V> И в этом смысле нам открывается нечто более, чем самодостаточный интерфейс базового класса. Мы обязаны выступить не как "пользователь" интерфейса класса, но как его разработчик, соблюдая внутреннюю задумку нашего базового типа, ибо элементарно можем ее поломать.
Всего лишь вопрос проектирования класса. Грамотно спроектированный класс ты не сможешь поломать и в наследнике, а неграмотно спроектированный можно сломать и через публичный интерфейс.
AVK>>Класс дотнета есть частный случай компонента.
V>Не всякий класс дотнета является компонентом.
Здравствуйте, vdimas, Вы писали:
AVK>>К сожалению в случае гуев в дотнете они недалеко ушли. Винформсы по архитектуре это где то середина 90-х. А Avalon еще неизвестно когда будет.
V>Разве MFC — это только ГУИ?
Изначально да.
V>Разве GuiPlus (активно использующийся дотнетом на вынь)
GDI+
V> — это Windows.Forms?
Нет. Это даже не дотнет.
V>Windows.Drawing вполне потянет
System.Drawing?
V>А насчет Windows.Forms, дык, я думаю им некогда было изобретать еще один велосипед,
Ну теперь то изобретают.
V>они 1-в-1 взяли интерфейсы и алгоритмы из ActiveX Control Host, на этом у них построено все взаимодействие м/у контролами.
Совсем не похоже. Винформсы это скорее новая реинкарнация VCL.
V>Заодно "попутно" получили совместимость с де-факто существующей тонной ActiveX-компонентов, что на начальных этапах "раскрутки" технологии давало немало дополнительных очков...
Нет там никакой такой совместимости — все взаимодействие через обертки.
Здравствуйте, vdimas, Вы писали:
V>>>Да, за MFC им надо руки оторвать. Вернее не за MFC (для конца 80-х это было нормально), а за агрессивное его продвижение в начале 90-х.
AJD>>Какой-такой конец 80-х? Что-то неприпоминаю MFC под DOS
V>А вот я припоминаю под Win3.1
Может это был где-то 93 год?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Здравствуйте, vdimas, Вы писали:
AVK>>Запускал. Ничего сверхужасного. А учитывая тенденции скоро на КПК будет 1Ггц и 256М памяти, а этого уже достаточно с большим запасом.
V>Во-первых, не так скоро,
Ну сейчас например новый стандарт >600МГц, 128М памяти. Тоже неплохо.
V>Для меня ужас в том, что как системный программист, я прекрасно знаю, какие возможности дает 200МГц проц,
Какой именно? Если ты о КПКшных, то не все там так просто.
Здравствуйте, AndrewVK, Вы писали:
V>>Разве MFC — это только ГУИ?
AVK>Изначально да.
Тогда весь вынь-апи — изначально только ГУИ
(хотя, где-то так и есть, именно ради ГУЯ вынь и была писана)
V>>Разве GuiPlus (активно использующийся дотнетом на вынь)
AVK>GDI+
тогда уж GdiPlus,
GDI+ — маркетинговое название
V>> — это Windows.Forms?
AVK>Нет. Это даже не дотнет.
ну блин, тогда и Windows.Forms не дотнет, ибо стандартные контролы — это роперы над нативными контролами вынь.
AVK>System.Drawing?
угу, разве это не к ГУИ относится?
V>>А насчет Windows.Forms, дык, я думаю им некогда было изобретать еще один велосипед,
AVK>Ну теперь то изобретают.
V>>они 1-в-1 взяли интерфейсы и алгоритмы из ActiveX Control Host, на этом у них построено все взаимодействие м/у контролами.
AVK>Совсем не похоже. Винформсы это скорее новая реинкарнация VCL.
Я не по духу, а по имплементации:
public class Control : Component, UnsafeNativeMethods.IOleControl, UnsafeNativeMethods.IOleObject,
UnsafeNativeMethods.IOleInPlaceObject, UnsafeNativeMethods.IOleInPlaceActiveObject,
UnsafeNativeMethods.IOleWindow, UnsafeNativeMethods.IViewObject, UnsafeNativeMethods.IViewObject2,
UnsafeNativeMethods.IPersist, UnsafeNativeMethods.IPersistStreamInit, UnsafeNativeMethods.IPersistPropertyBag,
UnsafeNativeMethods.IPersistStorage, UnsafeNativeMethods.IQuickActivate, ISupportOleDropSource, IDropTarget,
ISynchronizeInvoke, IEnablable, IWin32Window, IArrangedElement, IBindableComponent, IComponent, IDisposable
это стандартный ActiveX
V>>Заодно "попутно" получили совместимость с де-факто существующей тонной ActiveX-компонентов, что на начальных этапах "раскрутки" технологии давало немало дополнительных очков...
AVK>Нет там никакой такой совместимости — все взаимодействие через обертки.
речь не о декларируемых интерфейсы COM-объекта, а именно про его поднаготную, IOleControl, IOleObject, IViewObject, IOleWindow, и т.д.
С этой штукой Windows.Forms работают так же как и со своими "родными" контролами.
Здравствуйте, vdimas, Вы писали:
V>>>Мы имеем protected члены, которые НЕ являются интерфейсом класса для внешнего мира,
AVK>>Почему? V>?
Почему protected-члены не являются интерфейсом класса?
AVK>>Всего лишь вопрос проектирования класса. Грамотно спроектированный класс ты не сможешь поломать и в наследнике, а неграмотно спроектированный можно сломать и через публичный интерфейс.
V>Весьма расплывчато понятие грамотности. Объявлять поля публичными, если это опасно для класса — не грамотно, по крайней мере это распространенное мнение, спорить с которым бесполезно.
Ровно так же опасно объявлять поля protected.
V>Однако, полностью перекрыть доступ для потенциальных наследников может сказаться на эффективности,
Уж если ты начал корежить архитектуру в угоду эффективности, то ты сам себе злобный буратина, и не надо на наследование пенять. Ровно той же эффективностью некоторые товарищи оправдывают выставление полей в публичный интерфейс.
V>>>Не всякий класс дотнета является компонентом.
AVK>>Всякий. V>Абстракный — не компонент.
Почему?
V>Не наследующий IComponent не может визуально обрабатываться студией,
Блин, ну что за повальное маньячество — IComponent классом реализуется.
Не студией, а конкретной реализацией дизайнера, я тебе даже больше скажу, если ты даже реализуешь его, дизайнер все равно с ним работать не будет. А вот к примеру PropertyGrid с успехом может отображать любой класс. Ровно как я могу написать дизайнер, так же успешно без IComponent обходящийся.
V> т.е. не выполняет задачи компонента: бинарное распространение и автоматизированное использование (ручками я могу равнотрудоемко и сорсы использовать).
Выполняет, тут имхо сказывается твое незнание дотнета.
Здравствуйте, vdimas, Вы писали:
AVK>>GDI+
V>тогда уж GdiPlus, V>GDI+ — маркетинговое название
Нет, это GdiPlus название файла, поскольку значок + в имени файла недопустим. Вот к примеру комментарий из хидера
/**************************************************************************\
*
* Copyright (c) 1998-2001, Microsoft Corp. All Rights Reserved.
*
* Module Name:
*
* Gdiplus.h
*
* Abstract:
*
* GDI+ public header file
*
\**************************************************************************/
AVK>>Нет. Это даже не дотнет. V>ну блин, тогда и Windows.Forms не дотнет, ибо стандартные контролы — это роперы над нативными контролами вынь.
Не совсем. В WinForm есть немало чисто managed функционала, в тоом числе и полностью managed компоненты, да и интерфейс совершенно другой. А вот System.Drawing это практически чистая обертка.
AVK>>System.Drawing? V>угу, разве это не к ГУИ относится?
Относится. И что?
AVK>>Совсем не похоже. Винформсы это скорее новая реинкарнация VCL.
V>Я не по духу, а по имплементации: V>
Это означает что Control реализует ole-интерфейсы. Однако все эти IOleControl реализованы явно, и напрямую, а так же в managed коде не используются. Архитектура у WinForms собственная. Если грохнуть реализацию всех этих интерфейсов все будет прекрасно работать, просто нельзя будет хостить дотнетные контролы в IE или MFC Host.
V>>>Заодно "попутно" получили совместимость с де-факто существующей тонной ActiveX-компонентов, что на начальных этапах "раскрутки" технологии давало немало дополнительных очков...
AVK>>Нет там никакой такой совместимости — все взаимодействие через обертки.
V>речь не о декларируемых интерфейсы COM-объекта, а именно про его поднаготную, IOleControl, IOleObject, IViewObject, IOleWindow, и т.д.
Это не подноготная, это как раз и есть интерфейсы AX контрола.
V>С этой штукой Windows.Forms работают так же как и со своими "родными" контролами.
Нет. Ты бы все таки посмотрел что там происходит при импорте AX, прежде чем подобное утверждать. Создается новый managed-контрол, который транслирует все вызовы в managed-вариант. ВинФормс все эти замечательные СОМовские потроха напрямую не использует.
Здравствуйте, Kluev, Вы писали:
K>Да нет просто перевод акада на дот-нет судя повсему оказался пустым трепом. Можешь глянуть к нему девелоперскую докцументацию. Мелкие макросы в нем можно и на ВБ писать, а для серьезных вещей: ObjectARX — набор плюсовых библиотек.
А что мне смотреть? Они его и обернули на МС++, о чем открыто и написали.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
AVK>>>Вот поэтому мудрые мужи пользуют технологии, позволяющие гарантированно избежать подобных ситуаций K>>Мудрые мужи не вводятся в заблуждение гарантированными технологиями. Если плагины вызвает фунекции в последовательности которая не предусмотрена ядром, то оно может упасть очень легко.
AVK>Это уже ошибка другого рода, причем ошибка ядра. Опять же в грамотном ядре грохнется максимум обслуживающий клиента поток. Впрочем это я уже о серверах, а у тебя задачи другие.
K>> Хотя плагин будет живее всех живых. Оно не упадет только если все вызовы ядра атомарные.
AVK>Оно не упадет если любое внещнее воздействие не приведет ядро в неожиданное состояние. Это не так сложно обеспечить. Впрочем неважно — эта ошибка общая для любой технологии.
Реально в том же SolidWorks ядро вылетает просто на-ура из-за неправильной последовательности вызовов. Которая, кстати, не всегда документирована.
Думай, прежде чем родиться в этой сказочной стране!
(с) Антон Духовской
Здравствуйте, AndrewVK, Вы писали:
V>>Не наследующий IComponent не может визуально обрабатываться студией,
AVK>Блин, ну что за повальное маньячество — IComponent классом реализуется. AVK>Не студией, а конкретной реализацией дизайнера, я тебе даже больше скажу, если ты даже реализуешь его, дизайнер все равно с ним работать не будет. А вот к примеру PropertyGrid с успехом может отображать любой класс.
речь об экземпляре класса, вроде?
Если я наследую Component (реализующий IComponent), то могу кидать экземпляры этого класса на формы и компоненты, и только после этого выставлять значения с помощью PropertyGrid.
AVK>Ровно как я могу написать дизайнер, так же успешно без IComponent обходящийся.
Осталось узнать, как применить подобный дизайнер к независимой переменной на форме.
Здравствуйте, vdimas, Вы писали:
AVK>>Блин, ну что за повальное маньячество — IComponent классом реализуется. AVK>>Не студией, а конкретной реализацией дизайнера, я тебе даже больше скажу, если ты даже реализуешь его, дизайнер все равно с ним работать не будет. А вот к примеру PropertyGrid с успехом может отображать любой класс.
V>речь об экземпляре класса, вроде?
Есть разница?
V>Если я наследую Component (реализующий IComponent), то могу кидать экземпляры этого класса на формы и компоненты, и только после этого выставлять значения с помощью PropertyGrid.
Еще раз — это вполне конкретная реализация дизайнера. Никаких проблем написать свой вариант IComponent или вобще обойтись без каких либо интерфейсов нет.
AVK>>Ровно как я могу написать дизайнер, так же успешно без IComponent обходящийся. V>Осталось узнать, как применить подобный дизайнер к независимой переменной на форме.
Написать свой дизайнер форм и можно хоть обприменяться.
Здравствуйте, WFrag, Вы писали:
WF>Я не пытаюсь тебя убедить. Я пытаюсь тебе сказать, что ты не совсем прав. Конкретно я не согласен с вот этим вот сообщением:
WF>
Ядро собирается в одну большую махину без намеков на компоненты. Например, драйвер можно выдрать из ядра только если поставить дефан в исходниках и перекомпилировать ядро.
WF>Без всяких перекомпиляций я выгрузил из ядра практически все — видео, звук, модем, сеть, USB-устройства, BlueTooth stack, NTFS, FAT32, и.т.д. Вполне модульно
Можно подробности? Даже в отдельной ветке?
Здравствуйте, WFrag, Вы писали:
G>> Можно подробности? Даже в отдельной ветке? WF>А что именно интересует?
Интересует способ выгрузки "лишних" модулей из монолитного ядра без перекомпиляции. Или имеется ввиду
указать на выгружаемость этих модулей при компиляции ядра
Здравствуйте, Аноним, Вы писали:
А> Приятель работает в проекте, где все коспоненты сложной распределённой системы сделаны как COM'ы на С++ и все это хозяйство объединяется через VBScript. Спорили с ним о такой архитектуре ... Многоуважаемый ALL, просьба высказывать что вы думаете о таком способе конструирования сложных систем, не слишком ли сложная получается инфраструктура, не устарел ли сейчас такой подход ?
Если система справляется со своими задачами, а затраты на разработку / поддержку не высоки, значит подход оправдан. А в отрыве от задач / затратности — подход производит скорее негативное впечатление. Плюс подхода — слабая зависимость между частями системы (компонентами); простота модернизации бизнес логики (редактируя скрипты). Минусы — сложность разработки СОМ-компонентов; ограниченность языка VBScript; медленность его же (если это критично); если скрипты не хранятся в одном экземпляре, то необходимость менять скрипты при изменениях.
Здравствуйте, glyph, Вы писали:
G>>> Можно подробности? Даже в отдельной ветке? WF>>А что именно интересует? G> Интересует способ выгрузки "лишних" модулей из монолитного ядра без перекомпиляции. Или имеется ввиду G>
указать на выгружаемость этих модулей при компиляции ядра
?
Да просто при сборке ядра все, что можно, в виде модулей собирается (например, в Debian стандартное ядро примерно так и собрано). Естественно, если собрать ядро одним монолитом, то выгрузить из него ничего не удастся — но, в таком случае, как говорится, что хотели, то и получили.