在* nix系统上是否有与COM等价的function? 如果不是,那么nix的可重用性是什么?

我对Windows COM及其背后的想法有所了解。 我想了解* nix系统是否具有相同的function,或者为什么不具备这些function?

Solutions Collecting From Web of "在* nix系统上是否有与COM等价的function? 如果不是,那么nix的可重用性是什么?"

Unix模型是围绕轻量级进程构建的,这些进程通过套接字,管道,信号和命令行相互通信。 从历史上看,Unix没有线程(POSIX线程模型只有10年左右的时间),但Unix上的进程一直比Windows上便宜很多,因此将功能分解为单独的可执行文件比使用单一的程序,以增长和庞然大物。

在COM中,您定义了允许共享内存通信的二进制接口。 COM绑定到一个面向对象的范例。 在传统的Unix模式中,您定义了允许通过管道进行通信而不共享内存的面向流的接口。 从概念上讲,这更接近功能性编程范例。

Unix模式鼓励制作小型程序,通过轻量级的“shell”可以轻松地将它们耦合在一起,而COM模型则鼓励制作大型程序来暴露“组件”,这些程序可以被其他大型程序重用。 这实际上是一个苹果和橙子的比较,因为这两种模式提供不同情况下的好处和缺点。

当然,现代Unix系统可以具有COM类似的功能。 Mozilla拥有XPCOM,这是一个基于与COM相同的原理构建的跨平台框架。 GNOME很长一段时间使用了Bonobo,它在概念上与Microsoft OLE(它是COM的先驱)非常相似。 但是GNOME的最新版本已经从Bonobo转向了D-Bus,而这更多地是一种事件/消息模式。

最近的可能是D-Bus 。 D-Bus是一个轻量级的IPC协议和对象请求代理(ORB),非常类似于COM,受到COM和D-Bus前身DCOP (KDE)和CORBA (GNOME)以及Netlink (Linux coreel)的启发。

在D-Bus之前,两个主要的Unix桌面环境都有自己的组件模型和桌面总线。 GNOME有基于CORBA的Bonobo,KDE有基于DCOP的KParts。 而Linux内核有Netlink,它是内核和用户空间之间的通信协议,每当你配置一个网络接口时, iproute2工具就会使用这个协议。

内核开发人员经常要求将Netlink作为用户空间程序之间通信的一个独立部分发布,但是他们担心这会导致功能膨胀和维护问题。 最后,在以创建跨桌面标准为目标的免费桌面组织的框架下,KDE和GNOME开发人员共同开发了一个基于DCOP和Netlink的最佳部分的IPC消息系统,并且结果是D-Bus。

在GNOME和KDE的当前版本中,D-Bus已经完全取代了CORBA和DCOP,因此可以在KDE中运行GNOME应用程序,反之亦然,保真度更高。 D-Bus也被许多其他桌面环境和应用程序所采用,不仅在Linux上,而且在其他的Unix系统上,还有OSX,甚至是Windows。

至少应该提到的另一个选择是Mozilla的XPCOM ,它是一个跨平台的对象模型,深受CORBA和COM的启发。 (事实上​​,XPCOM是跨平台组件对象模型的缩写)。它使用一个与称为XPIDL的CORBA非常相似的IDL。 然而,据我所知,没有人真正使用XPCOM,Mozilla应用程序的批评者,开发人员以及其他Mozilla应用程序都认为这是Mozilla的一个主要来源,Mozila的开发人员实际上正在努力减少XPCOM特别是像Gecko这样的组件。

不过,正如@Daniel Pryden所指出的那样,Unix中已经有很多东西,比起不需要与桌面紧密集成的情况,它应该比D-Bus更受欢迎。 我正在谈论的东西像管道,命名管道和套接字。

最接近的可能是CORBA