Подтвердить что ты не робот

Существует ли эквивалент COM на системах * nix? Если нет, то какой был подход nix для повторного использования?

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Ближайшим, вероятно, будет 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, целью которой является создание стандартов cros-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.

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

Ответ 3

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