Есть ли эквивалент в COM в * nix системах?Если нет, то каков * nix подход к повторному использованию? - PullRequest
33 голосов
/ 17 июня 2010

У меня есть понимание Windows COM и идеи, лежащие в его основе.Я пытаюсь понять, есть ли у * nix-систем аналог или почему их нет?

Ответы [ 3 ]

37 голосов
/ 17 июня 2010

Модель Unix построена на идее легких процессов, которые взаимодействуют друг с другом через сокеты, каналы, сигналы и командные строки. Исторически в Unix не было потоков (модели потоков POSIX IIRC всего около 10 лет), но процессы в Unix всегда были намного дешевле, чем в Windows, поэтому было удобнее разделять функциональность на отдельные исполняемые файлы, чем разрешать единая программа для роста и монолитности.

В COM вы определяете двоичные интерфейсы, которые разрешают обмен с разделяемой памятью. COM привязан к объектно-ориентированной парадигме . В классической модели Unix вы определяете потоково-ориентированные интерфейсы, которые обеспечивают связь по каналам без разделяемой памяти. Концептуально это намного ближе к функциональной парадигме программирования.

Модель Unix поощряет создание небольших программ, которые могут быть легко объединены с помощью облегченной «оболочки», в то время как модель COM поощряет создание больших программ, которые предоставляют «компоненты», которые могут использоваться другими большими программами. Это действительно сравнение яблок и апельсинов, поскольку обе модели предоставляют преимущества и недостатки для различных сценариев.

Конечно, современные системы Unix могут иметь COM-подобные средства. Mozilla имеет XPCOM, кроссплатформенную инфраструктуру, основанную на тех же принципах, что и COM. В GNOME долгое время использовался Bonobo, который концептуально очень похож на Microsoft OLE, который был предшественником COM. Но последние версии GNOME отошли от Bonobo в пользу D-Bus, который представляет собой скорее шаблон событий / сообщений.

28 голосов
/ 17 июня 2010

Ближайшим, вероятно, будет D-Bus . D-Bus - это легкий протокол IPC и брокер объектных запросов (ORB), очень похожий на COM и вдохновленный предшественниками COM и D-Bus DCOP (KDE) и CORBA (GNOME). ), а также Netlink (ядро Linux).

До D-Bus обе основные среды рабочего стола Unix имели свои собственные модели компонентов и шины рабочего стола. У GNOME был Bonobo, основанный на CORBA, а у KDE был KParts, основанный на DCOP. А в ядре Linux есть Netlink, который является протоколом связи между ядром и пространством пользователя, которое используется, например, инструментом iproute2 всякий раз, когда вы настраиваете сетевой интерфейс.

Разработчики ядра постоянно получали запросы на выпуск Netlink в качестве отдельной части для связи между программами пользовательского пространства, однако они опасались, что это приведет к раздутию функций и проблемам обслуживания. В конце концов, под эгидой организации Free Desktop, целью которой является создание кросс-десктопных стандартов, разработчики KDE и GNOME собрались вместе, чтобы разработать систему обмена сообщениями IPC, основанную на лучших частях DCOP и Netlink, и результат был D-Bus.

В текущих версиях GNOME и KDE D-Bus полностью заменил CORBA и DCOP, что позволяет запускать приложения GNOME в KDE и наоборот с гораздо более высокой точностью. D-Bus также использовался многими другими рабочими средами и приложениями, не только в Linux, но и в других системах Unix, а также в OSX и даже в Windows.

Альтернативой, которую следует хотя бы упомянуть, является Mozilla XPCOM , представляющая собой кроссплатформенную объектную модель, в значительной степени вдохновленную CORBA и COM. (На самом деле XPCOM является аббревиатурой для кроссплатформенной объектной модели компонентов.) Он использует IDL, очень похожий на CORBA, называемый XPIDL. Однако, насколько мне известно, никто на самом деле не использует XPCOM, его признают как критики, так и разработчики Firefox и других приложений Mozilla как один из основных источников вздора, и разработчики Mozila фактически активно работают над сокращением использования XPCOM особенно внутри компонентов, таких как Gecko.

Однако, как отмечает @Daniel Pryden, в Unix есть много вещей, которые уже уже , которые следует отдавать предпочтение D-Bus в случаях, когда тесная интеграция с рабочим столом не требуется. Я говорю о таких вещах, как трубы, именованные трубы и сокеты.

4 голосов
/ 17 июня 2010

Ближайшим, вероятно, будет CORBA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...