我对windows COM及其背后的理念有一定的了解.我试图理解*nix系统是否有一个类似功能,或者为什么没有?
我对windows COM及其背后的理念有一定的了解.我试图理解*nix系统是否有一个类似功能,或者为什么没有?
Unix模型基于轻量级进程的思想构建,这些进程通过套接字、管道、信号和命令行相互通信.从历史上看,Unix没有线程(POSIX线程模型只有大约10年历史的IIRC),但Unix上的进程总是比Windows上的进程便宜得多,因此将功能分解到单独的可执行文件中比允许单个程序变大和单一更有效.
在COM中,定义允许共享内存通信的二进制接口.COM与object-oriented个范例相关联.在classic 的Unix模型中,您定义了面向流的接口,允许通过管道进行通信,而无需共享内存.从概念上讲,这更接近functional编程范例.
Unix模型鼓励生成可通过轻量级"shell"轻松耦合在一起的小程序,而COM模型鼓励生成可供其他大型程序重用的公开"组件"的大型程序.这实际上是一个苹果和橙子的比较,因为这两种模型都为不同的场景提供了优点和缺点.
当然,现代Unix系统可以有类似COM的功能.Mozilla拥有XPCOM,这是一个基于与COM相同的原则构建的跨平台框架.GNOME很长一段时间都使用Bonobo,这在概念上与微软的OLE非常相似,后者是COM的先驱.但GNOME的最新版本已经从倭黑猩猩转向D-Bus,D-Bus更像是一种事件/消息传递模式.