《C語言接口與實現:創建可重用軟件的技術》一導讀

前言
C語言接口與實現:創建可重用軟件的技術
如今的程序員忙於應付大量關於API(Application Programming Interface)的信息。但是,大多數程序員都會在其所寫的幾乎每一個應用程序中使用API並實現API的庫,隻有少數程序員會創建或發布新的能廣泛應用的API。事實上,程序員似乎更喜歡使用自己搞的東西,而不願意查找能滿足他們要求的程序庫,這或許是因為寫特定應用程序的代碼要比設計可廣泛使用的API容易。
不好意思,我也未能免俗:lcc(我和Chris Fraser為ANSI/ISO C編寫的編譯器)就是從頭開始編寫的API。(在A Retargetable C Compiler: Design and Implementation一書中有關於lcc的介紹。)編譯器是這樣一類應用程序:可以使用標準接口,並且能夠創建在其他地方也可以使用的接口。這類程序還有內存管理、字符串和符號表以及鏈表操作等。但是lcc僅使用了很少的標準C庫函數的例程,並且它的代碼幾乎都無法直接應用到其他應用程序中。
本書提倡的是一種基於接口及其實現的設計方法,並且通過對24個接口及其實現的描述詳細演示了該方法。這些接口涉及很多計算機領域的知識,包括數據結構、算法、字符串處理和並發程序。這些實現並不是簡單的玩具,而是為在產品級代碼中使用而設計的。實現的代碼是可免費提供的。
C編程語言基本不支持基於接口的設計方法,而C++和Modula-3這樣的麵向對象的語言則鼓勵將接口與實現分離。基於接口的設計跟具體的語言無關,但是它要求程序員對像C一樣的語言有更強的駕馭能力和更高的警惕性,因為這類語言很容易破壞帶有隱含實現信息的接口,反之亦然。
然而,一旦掌握了基於接口的設計方法,就能夠在服務於眾多應用程序的通用接口基礎上建立應用程序,從而加快開發速度。在一些C++環境中的基礎類庫就體現了這種效果。增加對現有軟件(接口實現庫)的重用,能夠降低初始開發成本,同時還能降低維護成本,因為應用程序的更多部分都建立在通用接口的實現之上,而這些實現無不經過了良好的測試。
本書中的24個接口引自幾本參考書,並且針對本書特別做了修正。一些數據結構(抽象數據類型)中的接口源於lcc代碼和20世紀70年代末到80年代初所做的Icon編程語言的實現代碼(參見R. E. Griswold和M. T. Griswold所著的The Icon Programming Language)。其他的接口來自另外一些程序員的著作,我們將會在每一章的“擴展閱讀”部分給出詳細信息。
書中提供的一些接口是針對數據結構的,但本書不是介紹數據結構的,本書的側重點在算法工程(包裝數據結構以供應用程序使用),而不在數據結構算法本身。然而,接口設計的好壞總是取決於數據結構和算法是否合適,因此,本書可算是傳統數據結構和算法教材(如Robert Sedgewick所著的Algorithms in C)的有益補充。
大多數章節會隻介紹一個接口及其實現,少數章節還會描述與其相關的接口。每一章的“接口”部分將會單獨給出一個明確而詳細的接口描述。對於興趣僅在於接口的程序員來說,這些內容就相當於一本參考手冊。少數章節還會包含“例子”部分,會說明在一個簡單的應用程序中接口的用法。
每章的“實現”部分將會詳細地介紹本章接口的實現代碼。有些例子會給出一個接口的多種實現方法,以展示基於接口設計的優點。這些內容對於修改或擴展一個接口或是設計一個相關的接口將大有裨益。許多練習題會進一步探究一些其他可行的設計與實現的方法。如果僅是為了理解如何使用接口,可以不用閱讀“實現”一節。
接口、示例和實現都以文學(literate)程序的方式給出,換句話說,源代碼及其解釋是按照最適合理解代碼的順序交織出現的。代碼可以自動地從本書的文本文件中抽取,並按C語言所規定的順序組合起來。其他也用文學程序講解C語言的圖書有A Retargetable C Compiler和D. E. Knuth寫的The Stanford GraphBase: A Platform for Combinatorial Computing。
目 錄
第1章 引言
1.1 文學程序
1.2 程序設計風格
1.3 效率
1.4 擴展閱讀
1.5 習題
第2章 接口與實現
2.1 接口
2.2 實現
2.3 抽象數據類型
2.4 客戶程序的職責
2.5 效率
2.6 擴展閱讀
2.7 習題
第3章 原子
第4章 異常與斷言
第5章 內存管理
第6章 再談內存管理
第7章 鏈表
第8章 表
第9章 集合
第10章 動態數組
第11章 序列
第12章 環
第13章 位向量
第14章 格式化
第15章 低級字符串
第16章 高級字符串
第17章 擴展精度算術
第18章 任意精度算術
第19章 多精度算術
第20章 線程
附錄A 接口摘要
參考書目
歡迎來到異步社區!
最後更新:2017-05-31 11:04:05