深度探索C++對象模型 特色及評論
Inside The C++ Object Model專注於C++對象導向程式設計的底層機制,包括結構式語意、暫時性對象的生成、封裝、繼承,以及虛擬――虛擬函式和虛擬繼承。這本書讓你知道:一旦你能夠了解底層實現模型,你的程式代碼將獲得多么大的效率。Lippman澄清了那些關於C++額外負荷與複雜度的各種錯誤信息和迷思,但也指出其中某些成本和利益交換確實存在。他闡述了各式各樣的實現模型,指出它們的進化之道及其本質因素。本書涵蓋了C++對象模型的語意暗示,並指出這個模型是如何影響你的程式的。本書重點:探索“對象導向程式所支持的C++對象模型”下的程式行為。對於“對象導向性質之基礎實現技術”以及“各種性質背後的隱含利益交換”提供一個清楚的認識。檢驗由程式變形所帶來的效率衝擊。提供豐富的程式範例、圖片,以及對象導向觀念和底層對象模型之間的效率測量。C++成山似海的書籍堆中,這一本不是嬰幼兒奶粉,也不是較大嬰兒奶粉,它是成人專用的低脂高鈣特殊奶粉。對於C++底層機制感興趣的讀者,這本書會給你“漫捲詩書喜欲狂”的感覺。了解C++ Object Model,是學習Component Object Model的最短路線。如果你是一位C++程式設計師,渴望對於底層知識獲得一個完整的了解,那么Inside The C++ Object Model正適合你。深度探索C++對象模型 內容簡介
insidetheC objectmodel專注於C 對象導向程式設計的底層機制,包括結構式語意,暫時性對象的生成,封裝,繼承,以及虛擬――虛擬函式和虛擬繼承。這本書將會告訴您,一但您能夠了解底層實現模型,你的程式代碼將獲得多么大的效率。本書涵蓋了C 對象模型的語意暗示,並指出這個模型是如何影響你的程式的。深度探索C++對象模型 本書前言
前言 差不多有10年之久,我在貝爾實驗室(Bell Laboratories)埋首於C++的實現任務。最初的工作是在cfront上面(Bjarne Stroustrup的第一個C++編譯器),從1986年的1.1版到1991年9月的3.0版,然後移轉到Simplifier(這是我們內部的命名),也就是Found~ion項目中的C++對象模型部分。在Simplifier設計期間,我開始醞釀這本書。 Foundation項目是什麼?在Bjarne的領導下,貝爾實驗室中的一個小組探索著以C++完成大規模程式設計時的種種問題的解決之道。Foundation項目是我們為了構造大系統而努力定義的一個新的開發模型;我們只使用C++,並不提供多重語言的解決方案。這是個令人興奮的工作,一方面是因為工作本身,一方面是因為工作夥伴:Bjarne、Andy Koenig、Rob Murray、Martin Carroll、Judy Ward、Steve Buroff、Peter Juhl,以及我自己。Barbara Moo管理我們這一群人(Bjarne和Andy除外)。Barbara Moo常說管理一個軟體團隊,就像放牧一群驕傲的貓。 我們把Foundation想像成一個核心,在那上面,其它人可以為使用者鋪設一層真正的開發環境,把它整修為他們所期望的UNIX或Smalltalk模型。私底下我們把它稱為Grail(傳說中耶穌最後的晚餐所用的聖杯),人人都想要,但是從來沒人找到過! Grail使用一個由Rob Murray發展出來並命名為ALF的面向對象層次結構,提供一個永久的、以語意為基礎的表現法。在Grail中,傳統編譯器被分解為數個各自分離的執行檔。parser負責建立程式的ALF表現法。其它每一個組件(比如type checking、simplification,code generation)以及工具(比如browser)都在程式的一個ALF表現體上操作(並可能加以擴展)。Simplifier是編譯器的一部分,處於typechecking和codegeneration之間。Simplifier這個名稱是由Bjarne所倡議的,它原本是cfront的一個階段(phase)。 在type checking和code generation之間,Simplifier做什麼事呢?它用來轉換內部的程式表現。有三種轉換風味是任何對象模型都需要的: 1.與編譯器息息相關的轉換(Implementation,dependent transformations) 這是與特定編譯器有關的轉換。在ALF之下,這意味著我們所謂的“tentative”nodes。例如,當parser看到這個表達式: fct(); 它並不知道是否(a)這是一個函式調用操作,或者(b)這是overloaded call operator在class object fct上的一種套用。默認情況下,這個式子所代表的是一個函式調用,但是當(b)的情況出現時,Simplifier就要重寫並調換call subtree。 2.語言語意轉換(Language semantics transformations) 這包括constructor/destructor的合成和擴展、memberwise初始化、對於memberwise copy的支持、在程式�碼中安插conversion operators、臨時性對象,以及對constructor/destructor的調用。 3.程式代碼和對象模型的轉換(Code and object model transformations) 這包括對virtual functions、virtual Base class和inheritance的一般支持、new和delete運算符、class objects所組成的數組、local static class instances、帶有非常量表達式(nonconstant expression)之global object的靜態初始化操作。我對Simplifier所規劃的一個目標是:提供一個對象模型體系,在其中,對象的實現是一個虛擬接口,支持各種對象模型。 最後兩種類型的轉換構成了本書的基礎。這意味著本書是為編譯器設計者而寫的嗎?不是,絕對不是!這本書是由一位編譯器設計者針對中高級C++程式設計師所寫的。隱藏在這本書背後的假設是,程式設計師如果了解C++對象模型,就可以寫出比較沒有錯誤傾向而且比較有效率的代碼。深度探索C++對象模型 本書目錄
第一章關於對象第二章構造函式語意學
第三章DATA語意學
第四章FUNCTION語意學
第五章構造、解構、拷貝語意學
第六章執行期語意學
第七章站在對象模型的尖端