Naming Service那部分用了好長(zhǎng)時(shí)間也沒(méi)讓程序成功運(yùn)行。orbit差不多是所有的實(shí)現(xiàn)里面最為高效的一個(gè),因?yàn)樗?/div>
用C實(shí)現(xiàn)的,主要的綁定語(yǔ)言是C和perl。GNOME項(xiàng)目組正在用它。至少?gòu)膶?shí)用性角度看,它要比omniORB好的多。
C語(yǔ)言里沒(méi)有類的概念,而IDL定義的接口則需要實(shí)現(xiàn)類似于對(duì)象的概念。C中的方法是將類作為方法的前綴,因?yàn)槲覀?/div>
最終調(diào)用的還是方法,而將類作為函數(shù)名的前綴之后,就能保證方法名字的唯一,因?yàn)轭惷遣煌模粋€(gè)類中的函數(shù)
名也是不同的。這樣就大大降低了開(kāi)銷,所有的一切都是通過(guò)函數(shù)調(diào)用來(lái)完成的。
比如
CORBA_ORB類中的resolve_initial_references方法,若參數(shù)是“RootPOA”
則C中的實(shí)現(xiàn)是
CORBA_ORB_resolve_initial_references(*orb,"RootPOA",ev);
其中第一個(gè)參數(shù)就是調(diào)用此方法(resolve_initial_references)的類,第三個(gè)參數(shù)就是我所說(shuō)的第二個(gè)問(wèn)題:異常處理。
C++中引入了throw...catch控制接口和exception類。優(yōu)點(diǎn)自不待言,缺點(diǎn)卻也不少,效率損失,程序結(jié)構(gòu)的混亂。
在C的大部分函數(shù)中,我們可以看到另一種解決方法——額外的參數(shù)。
通過(guò)附加一個(gè)額外的參數(shù)來(lái)表明錯(cuò)誤,然后檢測(cè)錯(cuò)誤,這樣的開(kāi)銷比用throw....catch小的多,而且沒(méi)有破壞程序
結(jié)構(gòu)。
C雖然只是一種面向過(guò)程的語(yǔ)言,沒(méi)有那么多的“高級(jí)特性”,但通過(guò)各種封裝,在不損失語(yǔ)言的簡(jiǎn)潔和高效的同時(shí),
C的實(shí)現(xiàn)也是有很多優(yōu)點(diǎn)的。這也是為什么C總能穩(wěn)居語(yǔ)言排行榜的第二位的原因。