2007年3月17日星期六

书评:Inside C++ Object Model

这本书一直被传为经典读物,只是刚开始老听人说写得比较深,难以读懂,一直心存敬畏,不敢去碰。上学期期末偶从图书馆发现此书,顺手借了出来,当时看了几篇,觉得写得很是精彩,c++的一些细节通过编译器设计大师Stanley B.Lippman的实际经验一一道来,很有味道,也很有说服力,因为正是他当初设计了第一个c++编译器cfront,也正是他,目前是MS编译器设计者,VS2005便出自于他之手。权威之语,不敢不信,不得不从。
这本书写得最精彩的部分莫过于对c++对象布局和虚函数机制的阐述。山高月小,水落石出。从编译器实现方案来阐述这些底层的结构,无疑是最清楚,最有说服力的了。读过以后,以前一些模棱两可的概念豁然开朗了,更重要的是,清楚对象结构以及函数调用的底层机制后,有助于指导你写出更高效的代码,比如如何避免不必要的临时对象,如何提高函数调用的效率,还有就是如何写出更安全的代码,避免与c的ABI不兼容问题等等。
在此之前,也看过很多其它c++的经典之作,其中比较有影响力的是scott meyer的effective系列,herb sutter的exceptional c++系列,以及mattew wilson的imperfect c++。但这些书只是从语言层面或是c++标准层面来阐述为什么要这么做,为什么这么做比较有效,却不能触及本质。这对于彻底理解c++的一些问题还是不够的。而Lipppman的这本书正是补充了前面的不足。因此结合着看,相得益彰,真相了然于胸也~
当然,此书也有它的不足,因为完成时间比较早,大致是95年左右写出的,参考的也都是一些比较老的资料。从95~07,c++标准已经改变了许多,编译器水平也大有提高,因此书中的有些观点可能已经不适用了,比如书是提到的c++对象布局也很有可能与现在流行的编译器实现方法不一致,不能完全参考。但书中对一系列问题深入地剖析和思考,是很有价值的,启发我们从某些角度来思考为什么需要这么做,这很有意思。
直到今天才把这本书读完,其实所用时间也不多,有些章节回味了几遍,越读越有收获。这本书其实还是比较好读的,不像传说中那么吓人,那么晦涩,原因在于作者深入浅出的解释,以及清晰的代码和图表注释。
最后一点体会:书非借不能读也~(引自袁枚的<随园诗话>)

没有评论: