这一阵在看CORBA,想找一个优秀的开源实现并不容易。MICO性能太差,没有考虑,omniORB还好,只是配置着有点麻烦,
Naming Service那部分用了好长时间也没让程序成功运行。orbit差不多是所有的实现里面最为高效的一个,因为它是
用C实现的,主要的绑定语言是C和perl。GNOME项目组正在用它。至少从实用性角度看,它要比omniORB好的多。
在看其中的例子时,发现了在一些问题的处理上,C的实现非常高效,而且并不复杂。相比之下,
C++则显得有点臃肿,效率低下。
第一个问题:类的实现。
C语言里没有类的概念,而IDL定义的接口则需要实现类似于对象的概念。C中的方法是将类作为方法的前缀,因为我们
最终调用的还是方法,而将类作为函数名的前缀之后,就能保证方法名字的唯一,因为类名是不同的,一个类中的函数
名也是不同的。这样就大大降低了开销,所有的一切都是通过函数调用来完成的。
比如
CORBA_ORB类中的resolve_initial_references方法,若参数是“RootPOA”
则C中的实现是
CORBA_ORB_resolve_initial_references(*orb,"RootPOA",ev);
其中第一个参数就是调用此方法(resolve_initial_references)的类,第三个参数就是我所说的第二个问题:异常处理。
C++中引入了throw...catch控制接口和exception类。优点自不待言,缺点却也不少,效率损失,程序结构的混乱。
在C的大部分函数中,我们可以看到另一种解决方法——额外的参数。
通过附加一个额外的参数来表明错误,然后检测错误,这样的开销比用throw....catch小的多,而且没有破坏程序
结构。
C虽然只是一种面向过程的语言,没有那么多的“高级特性”,但通过各种封装,在不损失语言的简洁和高效的同时,
C的实现也是有很多优点的。这也是为什么C总能稳居语言排行榜的第二位的原因。