這一陣在看CORBA,想找一個優(yōu)秀的開源實現并不容易。MICO性能太差,沒有考慮,omniORB還好,只是配置著有點麻煩,
Naming Service那部分用了好長時間也沒讓程序成功運行。orbit差不多是所有的實現里面最為高效的一個,因為它是
用C實現的,主要的綁定語言是C和perl。GNOME項目組正在用它。至少從實用性角度看,它要比omniORB好的多。
在看其中的例子時,發(fā)現了在一些問題的處理上,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類。優(yōu)點自不待言,缺點卻也不少,效率損失,程序結構的混亂。
在C的大部分函數中,我們可以看到另一種解決方法——額外的參數。
通過附加一個額外的參數來表明錯誤,然后檢測錯誤,這樣的開銷比用throw....catch小的多,而且沒有破壞程序
結構。
C雖然只是一種面向過程的語言,沒有那么多的“高級特性”,但通過各種封裝,在不損失語言的簡潔和高效的同時,
C的實現也是有很多優(yōu)點的。這也是為什么C總能穩(wěn)居語言排行榜的第二位的原因。