出版時(shí)間:2012-8 出版社:電子工業(yè)出版社 作者:埃瑞克·S.理曼德 頁數(shù):530
Tag標(biāo)簽:無
前言
出版說明 悅讀上品得乎益友 孔子云:“取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,則無所得矣”。 對(duì)于讀書求知而言,這句古訓(xùn)教我們?nèi)プx好書,最好是好書中的上品——經(jīng)典書。其中,科技人員要讀的技術(shù)書,因?yàn)橹苯雨P(guān)乎客觀是非與生產(chǎn)效率,閱讀選材本更應(yīng)慎重。然而,隨著技術(shù)圖書品種的日益豐富,發(fā)現(xiàn)經(jīng)典書越來越難,尤其對(duì)于涉世尚淺的新讀者,更為不易,而他們又往往是最需要閱讀、提升的重要群體。 所謂經(jīng)典書,或說上品,是指選材精良、內(nèi)容精練、講述生動(dòng)、外延豐盈、表現(xiàn)手法體貼入微的讀品,它們會(huì)成為讀者的知識(shí)和經(jīng)驗(yàn)庫中的重要組成部分,并且擁有從不斷重讀中汲取養(yǎng)分的空間。因此,選擇閱讀上品的問題便成了有效閱讀的首要問題。當(dāng)然,這不只是效率問題,上品促成的既是對(duì)某一種技術(shù)、思想的真正理解和掌握,同時(shí)又是一種感悟或享受,是一種愉悅?! ∨c技術(shù)本身類似,經(jīng)典IT技術(shù)書多來自國外。深厚的積累、良好的寫作氛圍,使一批大師為全球技術(shù)學(xué)習(xí)者留下了璀璨的智慧瑰寶。就在那個(gè)年代即將遠(yuǎn)去之時(shí),無須回眸,也能感受到這一部部厚重而深邃的經(jīng)典著作,在造福無數(shù)讀者后從未蒙塵的熠熠光輝。而這些凝結(jié)眾多當(dāng)今國內(nèi)技術(shù)中堅(jiān)美妙記憶與絕佳體驗(yàn)的技術(shù)圖書,雖然尚在國外圖書市場(chǎng)上大放異彩,卻已逐漸淡出國人的視線。最為遺憾的是,遲遲未有可以填補(bǔ)空缺的新書問世。而無可替代,不正是經(jīng)典書被奉為圭臬的原因? 為了不讓國內(nèi)讀者,尤其是即將步入技術(shù)生涯的新一代讀者,就此錯(cuò)失這些滋養(yǎng)過先行者們的好書,以出版IT精品圖書,滿足技術(shù)人群需求為己任的我們,愿意承擔(dān)這一使命。本次機(jī)遇惠顧了我們,讓我們有機(jī)會(huì)攜手權(quán)威的Pearson公司,精心推出“傳世經(jīng)典書叢”?! ≡谖覀冄壑校皞魇澜?jīng)典”的價(jià)值首先在于——既適合喜愛科技圖書的讀者,也符合專家們挑剔的標(biāo)準(zhǔn)。幸運(yùn)的是,我們的確找到了這些堪稱上品的佳作。叢書帶給我們的幸運(yùn)頗多,細(xì)數(shù)一下吧。 得以引薦大師著作 有恐思慮不周,我們大量參考了國外權(quán)威機(jī)構(gòu)和網(wǎng)站的評(píng)選結(jié)果,并得到了Pearson的專業(yè)支持,又進(jìn)一步對(duì)符合標(biāo)準(zhǔn)之圖書的國內(nèi)外口碑與銷售情況進(jìn)行細(xì)致分析,也聽取了國內(nèi)技術(shù)專家的寶貴建議,才有幸選出對(duì)國內(nèi)讀者最富有技術(shù)養(yǎng)分的大師上品?! ∠蛏铄涞募夹g(shù)內(nèi)涵致敬 中外技術(shù)環(huán)境存在差異,很多享譽(yù)國外的好書未必適用于國內(nèi)讀者;且技術(shù)與應(yīng)用瞬息萬變,很容易讓人心生迷惘或疲于奔命。本叢書的圖書遴選,注重打好思考方法與技術(shù)理念的根基,旨在幫助讀者修煉內(nèi)功,提升境界,將技術(shù)真正融入個(gè)人知識(shí)體系,從而可以一通百通,從容面對(duì)隨時(shí)涌現(xiàn)的技術(shù)變化?! 》g與評(píng)注的雙項(xiàng)選擇 引進(jìn)優(yōu)秀外版著作,將其翻譯為中文供國內(nèi)讀者閱讀,較為有效與常見。但另有一些外語水平較高、喜好閱讀原版的讀者,苦于對(duì)技術(shù)理解不足,不能充分體會(huì)原文表述的精妙,需要有人指導(dǎo)與點(diǎn)撥。而一批本土技術(shù)精英經(jīng)過長(zhǎng)期經(jīng)典熏陶及實(shí)踐錘煉,已足以勝任這一工作。有鑒于此,本叢書在翻譯版的同時(shí)推出融合英文原著與中文點(diǎn)評(píng)、注釋的評(píng)注版,供不同志趣的讀者自由選擇?! 〕忻蓢鴥?nèi)一流譯(注)者的扶持 優(yōu)秀的英文原著最終轉(zhuǎn)化為真正的上品,尚需跨越翻譯鴻溝,外版圖書的翻譯質(zhì)量一直屢遭國內(nèi)讀者詬病。評(píng)注版的增值與含金量,同樣依賴于評(píng)注者的高卓才具。好在,本叢書得到了久經(jīng)考驗(yàn)的權(quán)威譯(注)者的認(rèn)可和支持,首肯我們選用其佳作,或親自參與評(píng)注工作。正是他們的參與保證了經(jīng)典的品質(zhì),既再次為我們的選材把關(guān),更提供了一流的中文表述。 期望帶給讀者良好的閱讀體驗(yàn) 一本好書帶給人的愉悅不止于知識(shí)收獲,良好的閱讀感受同樣不可缺少,且對(duì)學(xué)業(yè)不無助益。為讓讀者收獲與上品相稱的體驗(yàn),我們?cè)趫D書裝幀設(shè)計(jì)與選材用料上同樣不敢輕率,惟愿送到讀者手中的除了珠璣章句,還有舒適與熨帖的視覺感受?! ∷袇⑴c叢書出版的人員,盡管能力有限,卻無不心懷嚴(yán)謹(jǐn)之心與完美愿望。如果讀者朋友能從潛心閱讀這些上品中偶有獲益,不啻為對(duì)我們工作的最佳褒獎(jiǎng)。若有閱讀感悟,敬請(qǐng)撥冗告知,以鼓勵(lì)我們繼續(xù)在這一道路上貢獻(xiàn)綿薄之力。如有不周之處,也請(qǐng)不吝指教?! ‰娮庸I(yè)出版社博文視點(diǎn) 二〇一〇年十二月
內(nèi)容概要
《傳世經(jīng)典書叢:UNIX編程藝術(shù)》主要介紹了Unix系統(tǒng)領(lǐng)域中的設(shè)計(jì)和開發(fā)哲學(xué)、思想文化體系、原則與經(jīng)驗(yàn),由公認(rèn)的Unix編程大師、開源運(yùn)動(dòng)領(lǐng)袖人物之一Eric S.Raymond傾力多年寫作而成。包括Unix設(shè)計(jì)者在內(nèi)的多位領(lǐng)域?qū)<乙矠楸緯暙I(xiàn)了寶貴的內(nèi)容。本書內(nèi)容涉及社群文化、軟件開發(fā)設(shè)計(jì)與實(shí)現(xiàn),覆蓋面廣、內(nèi)容深邃,完全展現(xiàn)了作者極其深厚的經(jīng)驗(yàn)積累和領(lǐng)域智慧。
作者簡(jiǎn)介
作者:(美)Raymond
書籍目錄
序 PartIⅠ1 第1章 哲學(xué)3 1.1 文化?什么文化3 1.2 Unix的生命力4 1.3 反對(duì)學(xué)習(xí)Unix文化的理由5 1.4 Unix之失6 1.5 Unix之得7 1.5.1 開源軟件7 1.5.2 跨平臺(tái)可移植性和開放標(biāo)準(zhǔn)8 1.5.3 Internet和萬維網(wǎng)8 1.5.4 開源社區(qū)9 1.5.5 從頭到腳的靈活性9 1.5.6 UnixHack之趣10 1.5.7 Unix的經(jīng)驗(yàn)別處也可適用11 1.6 Unix哲學(xué)基礎(chǔ)11 1.6.1 模塊原則:使用簡(jiǎn)潔的接口拼合簡(jiǎn)單的部件14 1.6.2 清晰原則:清晰勝于機(jī)巧14 1.6.3 組合原則:設(shè)計(jì)時(shí)考慮拼接組合15 1.6.4 分離原則:策略同機(jī)制分離,接口同引擎分離16 1.6.5 簡(jiǎn)潔原則:設(shè)計(jì)要簡(jiǎn)潔,復(fù)雜度能低則低17 1.6.6 吝嗇原則:除非確無它法,不要編寫龐大的程序18 1.6.7 透明性原則:設(shè)計(jì)要可見,以便審查和調(diào)試18 1.6.8 健壯原則:健壯源于透明與簡(jiǎn)潔18 1.6.9 表示原則:把知識(shí)疊入數(shù)據(jù)以求邏輯質(zhì)樸而健壯19 1.6.10 通俗原則:接口設(shè)計(jì)避免標(biāo)新立異20 1.6.11 緘默原則:如果一個(gè)程序沒什么好說的,就保持沉默20 1.6.12 補(bǔ)救原則:出現(xiàn)異常時(shí),馬上退出并給出足量錯(cuò)誤信息21 1.6.13 經(jīng)濟(jì)原則:寧花機(jī)器一分,不花程序員一秒22 1.6.14 生成原則:避免手工hack,盡量編寫程序去生成程序22 1.6.15 優(yōu)化原則:雕琢前先得有原型,跑之前先學(xué)會(huì)走23 1.6.16 多樣原則:決不相信所謂“不二法門”的斷言24 1.6.17 擴(kuò)展原則:設(shè)計(jì)著眼未來,未來總比預(yù)想快24 1.7 Unix哲學(xué)之一言以蔽之25 1.8 應(yīng)用Unix哲學(xué)26 1.9 態(tài)度也要緊26 第2章 歷史——雙流記29 2.1 Unix的起源及歷史,1969-199529 2.1.1 創(chuàng)世紀(jì):1969-197130 2.1.2 出埃及記:1971-198032 2.1.3 TCP/IP和Unix內(nèi)戰(zhàn):1980-199035 2.1.4 反擊帝國:1991-199541 2.2 黑客的起源和歷史:1961-199543 2.2.1 游戲在校園的林間:1961-198044 2.2.2 互聯(lián)網(wǎng)大融合與自由軟件運(yùn)動(dòng):1981-199145 2.2.3 Linux和實(shí)用主義者的應(yīng)對(duì):1991-199848 2.3 開源運(yùn)動(dòng):1998年及之后49 2.4 Unix的歷史教訓(xùn)51 第3章 對(duì)比:Unix哲學(xué)同其他哲學(xué)的比較53 3.1 操作系統(tǒng)的風(fēng)格元素53 3.1.1 什么是操作系統(tǒng)的統(tǒng)一性理念54 3.1.2 多任務(wù)能力54 3.1.3 協(xié)作進(jìn)程55 3.1.4 內(nèi)部邊界57 3.1.5 文件屬性和記錄結(jié)構(gòu)57 3.1.6 二進(jìn)制文件格式58 3.1.7 首選用戶界面風(fēng)格58 3.1.8 目標(biāo)受眾59 3.1.9 開發(fā)的門坎60 3.2 操作系統(tǒng)的比較61 3.2.1 VMS61 3.2.2 MacOS64 3.2.3 OS/265 3.2.4 WindowsNT68 3.2.5 BeOS71 3.2.6 MVS72 3.2.7 VM/CMS74 3.2.8 Linux76 3.3 種什么籽,得什么果78 PartⅡ81 第4章 模塊性:保持清晰,保持簡(jiǎn)潔83 4.1 封裝和最佳模塊大小85 4.2 緊湊性和正交性87 4.2.1 緊湊性87 4.2.2 正交性89 4.2.3 SPOT原則91 4.2.4 緊湊性和強(qiáng)單一中心92 4.2.5 分離的價(jià)值94 4.3 軟件是多層的95 4.3.1 自頂向下和自底向上95 4.3.2 膠合層97 4.3.3 實(shí)例分析:被視為薄膠合層的C語言98 4.4 程序庫99 4.4.1 實(shí)例分析:GIMP插件100 4.5 Unix和面向?qū)ο笳Z言101 4.6 模塊式編碼103 第5章 文本化:好協(xié)議產(chǎn)生好實(shí)踐105 5.1 文本化的重要性107 5.1.1 實(shí)例分析:Unix口令文件格式109 5.1.2 實(shí)例分析:newsrc格式110 5.1.3 實(shí)例分析:PNG圖形文件格式111 5.2 數(shù)據(jù)文件元格式112 5.2.1 DSV風(fēng)格113 5.2.2 RFC822格式114 5.2.3 Cookie—Jar格式115 5.2.4 Record—Jar格式116 5.2.5 XML117 5.2.6 WindowsINI格式119 5.2.7 Unix文本文件格式的約定120 5.2.8 文件壓縮的利弊122 5.3 應(yīng)用協(xié)議設(shè)計(jì)123 5.3.1 實(shí)例分析:SMTP,一個(gè)簡(jiǎn)單的套接字協(xié)議124 5.3.2 實(shí)例分析:POP3,郵局協(xié)議124 5.3.3 實(shí)例分析:IMAP,互聯(lián)網(wǎng)消息訪問協(xié)議126 5.4 應(yīng)用協(xié)議元格式127 5.4.1 經(jīng)典的互聯(lián)網(wǎng)應(yīng)用元協(xié)議127 5.4.2 作為通用應(yīng)用協(xié)議的HTTP128 5.4.3 BEEP:塊可擴(kuò)展交換協(xié)議130 5.4.4 XML—RPC,SOAP和Jabber131 第6章 透明性:來點(diǎn)兒光133 6.1 研究實(shí)例135 6.1.1 實(shí)例分析:audacity135 6.1.2 實(shí)例分析:fetchmail的–v選項(xiàng)136 6.1.3 實(shí)例分析:GCC139 6.1.4 實(shí)例分析:kmail140 6.1.5 實(shí)例分析:SNG142 6.1.6 實(shí)例分析:Terminfo數(shù)據(jù)庫144 6.1.7 實(shí)例分析:Freeciv數(shù)據(jù)文件146 6.2 為透明性和可顯性而設(shè)計(jì)148 6.2.1 透明性之禪149 6.2.2 為透明性和可顯性而編碼150 6.2.3 透明性和避免過度保護(hù)151 6.2.4 透明性和可編輯的表現(xiàn)形式152 6.2.5 透明性、故障診斷和故障恢復(fù)153 6.3 為可維護(hù)性而設(shè)計(jì)154 第7章 多道程序設(shè)計(jì):分離進(jìn)程為獨(dú)立的功能157 7.1 從性能調(diào)整中分離復(fù)雜度控制159 7.2 UnixIPC方法的分類160 7.2.1 把任務(wù)轉(zhuǎn)給專門程序160 7.2.2 管道、重定向和過濾器161 7.2.3 包裝器166 7.2.4 安全性包裝器和Bernstein鏈167 7.2.5 從進(jìn)程168 7.2.6 對(duì)等進(jìn)程間通信169 7.3 要避免的問題和方法176 7.3.1 廢棄的UnixIPC方法176 7.3.2 遠(yuǎn)程過程調(diào)用178 7.3.3 線程——恐嚇或威脅180 7.4 在設(shè)計(jì)層次上的進(jìn)程劃分181 第8章 微型語言:尋找歌唱的樂符183 8.1 理解語言分類法185 8.2 應(yīng)用微型語言187 8.2.1 案例分析:sng187 8.2.2 案例分析:正則表達(dá)式188 8.2.3 案例分析:Glade191 8.2.4 案例分析:m4193 8.2.5 案例分析:XSLT194 8.2.6 案例分析:TheDocumenter's work bench Tools195 8.2.7 案例分析:fetchmail的運(yùn)行控制語法199 8.2.8 案例分析:awk200 8.2.9 案例分析:PostScript202 8.2.10 案例分析:bc和dc203 8.2.11 案例分析:EmacsLisp205 8.2.12 案例分析:JavaScript205 8.3 設(shè)計(jì)微型語言206 8.3.1 選擇正確的復(fù)雜度207 8.3.2 擴(kuò)展和嵌入語言209 8.3.3 編寫自定義語法210 8.3.4 宏—慎用210 8.3.5 語言還是應(yīng)用協(xié)議212 第9章 生成:提升規(guī)格說明的層次215 9.1 數(shù)據(jù)驅(qū)動(dòng)編程216 9.1.1 實(shí)例分析:ascii217 9.1.2 實(shí)例分析:統(tǒng)計(jì)學(xué)的垃圾郵件統(tǒng)計(jì)218 9.1.3 實(shí)例分析:fetchmailconf中的元類改動(dòng)219 9.2 專用代碼的生成225 9.2.1 實(shí)例分析:生成ascii顯示的代碼225 9.2.2 實(shí)例分析:為列表生成HTML代碼227 第10章 配置:邁出正確的第一步231 10.1 什么應(yīng)是可配置的231 10.2 配置在哪里233 10.3 運(yùn)行控制文件234 10.3.1 實(shí)例分析:.Netrc文件236 10.3.2 到其它操作系統(tǒng)的可移植性238 10.4 環(huán)境變量238 10.4.1 系統(tǒng)環(huán)境變量238 10.4.2 用戶環(huán)境變量240 10.4.3 何時(shí)使用環(huán)境變量240 10.4.4 到其它操作系統(tǒng)的可移植性242 10.5 命令行選項(xiàng)242 10.5.1 從–a到–z的命令行選項(xiàng)243 10.5.2 到其它操作系統(tǒng)的可移植性248 10.6 如何挑選方法248 10.6.1 實(shí)例分析:fetchmail249 10.6.2 實(shí)例分析:XFree86服務(wù)器251 10.7 論打破規(guī)則252 第11章 接口:Unix環(huán)境下的用戶接口設(shè)計(jì)模式253 11.1 最小立異原則的應(yīng)用254 11.2 Unix接口設(shè)計(jì)的歷史256 11.3 接口設(shè)計(jì)評(píng)估257 11.4 CLI和可視接口之間的權(quán)衡259 11.4.1 實(shí)例分析:編寫計(jì)算器程序的兩種方式262 11.5 透明度、表現(xiàn)力和可配置性264 11.6 Unix接口設(shè)計(jì)模式266 11.6.1 過濾器模式266 11.6.2 Cantrip模式268 11.6.3 源模式268 11.6.4 接收器模式269 11.6.5 編譯器模式269 11.6.6 ed模式270 11.6.7 Roguelike模式270 11.6.8 “引擎和接口分離”模式273 11.6.9 CLI服務(wù)器模式278 11.6.10 基于語言的接口模式279 11.7 應(yīng)用Unix接口設(shè)計(jì)模式280 11.7.1多價(jià)程序模式 11.8 網(wǎng)頁瀏覽器作為通用前端281 11.9 沉默是金284 第12章 優(yōu)化287 12.1 什么也別做,就站在那兒287 12.2 先估量,后優(yōu)化288 12.3 非定域性之害290 12.4 吞吐量和延遲291 12.4.1 批操作292 12.4.2 重疊操作293 12.4.3 緩存操作結(jié)果293 第13章 復(fù)雜度:盡可能簡(jiǎn)單,但別簡(jiǎn)過了頭295 13.1 談?wù)剰?fù)雜度296 13.1.1 復(fù)雜度的三個(gè)來源296 13.1.2 接口復(fù)雜度和實(shí)現(xiàn)復(fù)雜度的折中298 13.1.3 必然的、可能的和偶然的復(fù)雜度299 13.1.4 映射復(fù)雜度300 13.1.5 當(dāng)簡(jiǎn)潔性不能勝任302 13.2 五個(gè)編輯器的故事302 13.2.1 ed304 13.2.2 vi305 13.2.3 Sam306 13.2.4 Emacs307 13.2.5 Wily308 13.3 編輯器的適當(dāng)規(guī)模309 13.3.1 甄別復(fù)雜度問題309 13.3.2 折衷無用312 13.3.3 Emacs是個(gè)反Unix傳統(tǒng)的論據(jù)嗎314 13.4 軟件的適度規(guī)模316 PartⅢ319 第14章 語言:C還是非C321 14.1 Unix下語言的豐饒321 14.2 為什么不是C323 14.3 解釋型語言和混合策略325 14.4 語言評(píng)估325 14.4.1 C326 14.4.2 C++327 14.4.3 Shell330 14.4.4 Perl332 14.4.5 Tcl334 14.4.6 Python336 14.4.7 Java339 14.4.8 EmacsLisp342 14.5 未來趨勢(shì)344 14.6 選擇X工具包346 第15章 工具:開發(fā)的戰(zhàn)術(shù)349 15.1 開發(fā)者友好的操作系統(tǒng)349 15.2 編輯器選擇350 15.2.1 了解vi351 15.2.2 了解Emacs351 15.2.3 非虔誠的選擇:兩者兼用352 15.3 專用代碼生成器352 15.3.1 yacc和lex353 15.3.2 實(shí)例分析:fetchmailrc的語法356 15.3.3 實(shí)例分析:Glade356 15.4 make:自動(dòng)化編譯357 15.4.1 make的基本理論357 15.4.2 非C/C++開發(fā)中的make359 15.4.3 通用生成目標(biāo)359 15.4.4 生成Makefile362 15.5 版本控制系統(tǒng)364 15.5.1 為什么需要版本控制364 15.5.2 手工版本控制365 15.5.3 自動(dòng)化的版本控制366 15.5.4 Unix的版本控制工具367 15.6 運(yùn)行期調(diào)試369 15.7 性能分析370 15.8 使用Emacs整合工具370 15.8.1 Emacs和make371 15.8.2 Emacs和運(yùn)行期調(diào)試371 15.8.3 Emacs和版本控制371 15.8.4 Emacs和Profiling372 15.8.5 像IDE一樣,但更強(qiáng)373 第16章 重用:論不要重新發(fā)明輪子375 16.1 豬小兵的故事376 16.2 透明性是重用的關(guān)鍵379 16.3 從重用到開源380 16.4 生命中最美好的就是“開放”381 16.5 何處找384 16.6 使用開源軟件的問題385 16.7 許可證問題386 16.7.1 開放源碼的資格386 16.7.2 標(biāo)準(zhǔn)開放源碼許可證388 16.7.3 何時(shí)需要律師390 PartⅣ391 第17章 可移植性:軟件可移植性與遵循標(biāo)準(zhǔn)393 17.1 C語言的演化394 17.1.1 早期的C語言395 17.1.2 C語言標(biāo)準(zhǔn)396 17.2 Unix標(biāo)準(zhǔn)398 17.2.1 標(biāo)準(zhǔn)和Unix之戰(zhàn)398 17.2.2 慶功宴上的幽靈401 17.2.3 開源世界的Unix標(biāo)準(zhǔn)402 17.3 IETF和RFC標(biāo)準(zhǔn)化過程403 17.4 規(guī)格DNA,代碼RNA405 17.5 可移植性編程408 17.5.1 可移植性和編程語言選擇409 17.5.2 避免系統(tǒng)依賴性412 17.5.3 移植工具413 17.6 國際化413 17.7 可移植性、開放標(biāo)準(zhǔn)以及開放源碼414 第18章 文檔:向網(wǎng)絡(luò)世界闡釋代碼417 18.1 文檔概念418 18.2 Unix風(fēng)格420 18.2.1 大文檔偏愛420 18.2.2 文化風(fēng)格421 18.3 各種Unix文檔格式422 18.3.1 troff和Documenter's Work bench Tools422 18.3.2 TEX424 18.3.3 Texinfo425 18.3.4 POD425 18.3.5 HTML426 18.3.6 DocBook426 18.4 當(dāng)前的混亂和可能的出路426 18.5 DocBook427 18.5.1 文檔類型定義427 18.5.2 其它DTD428 18.5.3 DocBook工具鏈429 18.5.4 移植工具431 18.5.5 編輯工具432 18.5.6 相關(guān)標(biāo)準(zhǔn)和實(shí)踐433 18.5.7 SGML433 18.5.8 XML—DocBook參考書籍433 18.6 編寫Unix文檔的最佳實(shí)踐434 第19章 開放源碼:在Unix新社區(qū)中編程437 19.1 Unix和開放源碼438 19.2 與開源開發(fā)者協(xié)同工作的最佳實(shí)踐440 19.2.1 良好的修補(bǔ)實(shí)踐440 19.2.2 良好的項(xiàng)目、檔案文件命名實(shí)踐444 19.2.3 良好的開發(fā)實(shí)踐447 19.2.4 良好的發(fā)行制作實(shí)踐450 19.2.5 良好的交流實(shí)踐454 19.3 許可證的邏輯:如何挑選456 19.4 為什么應(yīng)使用某個(gè)標(biāo)準(zhǔn)許可證457 19.5 各種開源許可證457 19.5.1 MIT或者Xconsortium許可證457 19.5.2 經(jīng)典BSD許可證457 19.5.3 Artistic許可證458 19.5.4 通用公共許可證458 19.5.5 Mozilla公共許可證459 第20章 未來:危機(jī)與機(jī)遇461 20.1 Unix傳統(tǒng)中的必然和偶然461 20.2 Plang:未來之路464 20.3 Unix設(shè)計(jì)中的問題466 20.3.1 Unix文件就是一大袋字節(jié)466 20.3.2 Unix對(duì)GUI的支持孱弱467 20.3.3 文件刪除不可撤銷468 20.3.4 Unix假定文件系統(tǒng)是靜態(tài)的469 20.3.5 作業(yè)控制設(shè)計(jì)拙劣469 20.3.6 UnixAPI沒有使用異常470 20.3.7 ioctl(2)和fcntl(2)是個(gè)尷尬471 20.3.8 Unix安全模型可能太過原始471 20.3.9 Unix名字種類太多472 20.3.10 文件系統(tǒng)可能有害論472 20.3.11 朝向全局互聯(lián)網(wǎng)地址空間472 20.4 Unix的環(huán)境問題473 20.5 Unix文化中的問題475 20.6 信任的理由477 附錄A 縮寫詞表479 附錄B 參考文獻(xiàn)483 附錄C 貢獻(xiàn)者495 附錄D 無根的根:無名師的Unix心傳499 Colophon510 索引511
章節(jié)摘錄
版權(quán)頁: 插圖: terminfo本身使用文件系統(tǒng)作為一個(gè)簡(jiǎn)單的層級(jí)數(shù)據(jù)庫。這種偷懶相當(dāng)具有建設(shè)性,符合經(jīng)濟(jì)性原則和透明性原則。這意味著對(duì)文件系統(tǒng)進(jìn)行瀏覽、檢查和修改的所有普通工具都可以用于對(duì)terminfo數(shù)據(jù)庫進(jìn)行瀏覽、檢查和修改;無需編寫和調(diào)試專用工具(用于打包和解包單個(gè)記錄的tic(1)和infocmp(1)工具除外)。這也意味著要加速數(shù)據(jù)庫的訪問就得要加速文件系統(tǒng)本身,知道這一點(diǎn)可以使更多應(yīng)用程序受益,而不僅僅是curses(3)的用戶。 這種結(jié)構(gòu)還有另外一種優(yōu)點(diǎn),但在terminfo例子中沒有展示出來:你開始使用Unix的授權(quán)機(jī)制而不用自己編寫帶來額外bu9的訪問控制層。這也是采納而不是對(duì)抗Unix“一切皆文件”基本原則的結(jié)果。 terminfo目錄的布局在大多數(shù)Unix文件系統(tǒng)上都很浪費(fèi)空間。每條目長(zhǎng)度通常在400~1400字節(jié)之間,但是文件系統(tǒng)通常為每一個(gè)非空磁盤文件至少分配4k的空間。出于選擇壓縮二進(jìn)制格式的同一個(gè)原因,即為了把terminfo使用的程序的啟動(dòng)延時(shí)降到最小,設(shè)計(jì)者接受了這個(gè)代價(jià)。同一價(jià)格所能買到的磁盤容量已經(jīng)猛增了一千倍,更能證明這個(gè)決定的正確。 比較這種格式和Microcsoft Windows的注冊(cè)表文件所用的格式很有啟發(fā)意義。注冊(cè)表是Windows本身及應(yīng)用程序都使用的屬性數(shù)據(jù)庫。所有注冊(cè)記錄都存放在一個(gè)大文件中。注冊(cè)記錄既包含文本也包含二進(jìn)制數(shù)據(jù),需要專用的編輯工具。別的不說,這種“一個(gè)大文件”的方法還導(dǎo)致了臭名昭著的“注冊(cè)表蠕變”現(xiàn)象;平均訪問時(shí)間隨著新記錄的加入而無限上升。因?yàn)橄到y(tǒng)沒有提供標(biāo)準(zhǔn)APl來編輯注冊(cè)表,應(yīng)用程序本身使用專用代碼編輯注冊(cè)表,使得注冊(cè)表極易受損,甚至能夠鎖定整個(gè)系統(tǒng)。 使用Unix文件系統(tǒng)作為數(shù)據(jù)庫是一種策略,對(duì)數(shù)據(jù)庫要求簡(jiǎn)單的其它應(yīng)用程序可以效仿并從中受益。不這樣做的充分理由通常與性能問題無關(guān),更可能的情形是數(shù)據(jù)庫關(guān)鍵字不太適合做文件名。無論如何,這是在原型設(shè)計(jì)時(shí)非常有用的一種很好的快速編程方法。 6.1.7 實(shí)例分析:Freeciv數(shù)據(jù)文件 Freeciv是一款受到Sid Meier經(jīng)典的Civilization H啟發(fā)而制作的開源策略游戲。在該游戲中,每個(gè)玩家從一群到處流浪的新石器游牧民開始締造一個(gè)文明。玩家的文明可以探索并拓殖世界,參與戰(zhàn)爭(zhēng),從事貿(mào)易和研究先進(jìn)技術(shù)。有些玩家實(shí)際上可能是人工智能;和這些電腦玩家玩單機(jī)游戲很有挑戰(zhàn)性。如果誰統(tǒng)治了整個(gè)世界,或者第一個(gè)研制出先進(jìn)技術(shù)從而獲得宇宙飛船飛往半人馬座阿爾法星(Alpha Centauri),誰就是游戲的勝利者。源碼和文檔可以在處獲得。
編輯推薦
《傳世經(jīng)典書叢:UNIX編程藝術(shù)》內(nèi)容涉及社群文化、軟件開發(fā)設(shè)計(jì)與實(shí)現(xiàn),覆蓋面廣、內(nèi)容深邃,完全展現(xiàn)了作者極其深厚的經(jīng)驗(yàn)積累和領(lǐng)域智慧。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載