TAO和其他CORBA的基本都是按照OMG的提供的规范2.6来实现。在OMG的标准规范事实已经给出的CORBA的基础原型,基础数据定义,IDL语言语法,以及C++的代码映射等。我们可以在实现代码中经常看到规范的熟悉的方法函数和数据结构定义(可能是底层次和高层次的),例如OMG的CORBA规范的orb,poa这两个重要的规范部分,基本上给出orb核,POA对象适配实现原型框架。要理解一个CORBA整个体系,就必须对CORBA的规范有一个总体的认识,这对实现的CORBA代码理解有极大的帮助,它起到对CORBA实现一个框架认识作用,对理解和看懂代码的实现会提到更高的层次。CORBA的规范可以说是它的骨架,实现则是给它造血和肉。
TAO是在ACE的基础上建立和开发出来的,在其中很多体现了ACE的思想和它的延伸。所以在ACE的熟悉程度上对TAO的理解的好比一个平台作用。实质上ACE的是通讯库,同时也是写通讯程序半成品库,ACE是TAO强有力的平台。事实上正是ACE的通讯库使得TAO的代码容易理解和划分,ACE更多体现在通讯的细节精细的实现和控制封装,在上层的使用上屏蔽容易错误的代码,把硬件平台和实现细节封装在底层代码中(ACE的OS.h代码占了ACE将10%的代码量);所以TAO的更多的是在围绕着CORBA的规范这种远过程调用实现逻辑上面;这样TAO的CORBA代码与ACE通讯库的划分非常清晰,通讯与CORBA实现逻辑一定程度的耦合被弱化,使得TAO的代码比其他的CORBA实现代码要容易理解和掌握。当初看TAO的代码感觉比较头痛,那是对ACE认识不够深,虽然接触的时间也很久,但停留在一个概念和初级应用的层次上,对ACE的库代码并没有在质的基础上深刻体会。随着自己看其他中间的的源代码和动手写自己的通讯库(很多概念来自ACE和另外一个CORBA的实现orbcus)和简单的远过程调用实现,从中遇到的问题和要解决的问题,要考虑的问题,要实现的问题等到深入到更本质的思考,发现最后的回到了CORBA要解决的问题上,自己在做别人已经做过,而且并见得做了更好得事情,实际上CORBA已经提出和解决及实现工业级方法。看了不实际做一些这些从新”发明轮子”的事情,对CORBA一些本质上的理解还真是很懵懂的,做一个自己得”轮子”还是很有帮助的,起码会对一些问题有更深的体会。这也对理解TAO的实现有作用。他们都是远过程调用的实现,简单概念复杂的实现,但基本共同的东西是相似的,但在实现上TAO却有强大和精妙之处,看着就觉的感撼,I can do it?。
以前看orbcus只是源于使用jtc的线程库,后来有时间将orbcus的其他的代码的看了一些,特别是对CORBA CDR流化实现很有兴趣和SOCKET通讯代码,后来看来看去看1/3就晕了,就没精力看;通过个项目自己写了个通讯库用于简单的远过程调用就有更大的体会,就感觉自己写的这么幼稚和别人写的感觉没有一句废话,一次看orbcus的代码注释发现作者提到Apache的代码实现如何如何,说明作者就研究构Apache的代码,人家就有这样的深度和经历。确实在看orbcus的代码和写了些这方面的代码,回来再看TAO代码反而感觉的看TAO的代码好看很多,有顿悟的感觉,以前觉得ACE和TAO的代码不好看,而看orbcus的代码比较干净整洁有一种清纯的感觉;现在完全改观,看TAOACE感觉是顺畅的,这可能对ACE和TAO有更进一步的习惯认识和体会,遇到和解决问题更有感觉和目的性,而不是遇到问题对着代码就发蒙。ACETAO他们代码的注释量是非常大,而且有很多D.C的技术论文论述TAO CORBA实现技术细节和应用的模式理论,它的实现是专业级的,想到了你没有想到的问题解决你没解决的问题,如果自己从头写一个这样的东西简直是要命。运用和学习,再看他们实现的代码,每个星期坚持看一些类实现,好像真能感觉与一个世界级的专家们一起,感受他们的奉献和NB精神,更是令人敬畏的专业水准。