出版時(shí)間:2007-6 出版社:電子工業(yè)出版社 作者:斯科特 頁(yè)數(shù):899 譯者:裘宗燕
Tag標(biāo)簽:無(wú)
內(nèi)容概要
★列為全球上百所大學(xué)標(biāo)準(zhǔn)教材和首席參考書(shū)! ★圖書(shū)館必備典藏,作者M(jìn)ichael L.Scott 是計(jì)算機(jī)領(lǐng)域的著名學(xué)者,譯者是北京大學(xué)的裘宗燕教授,他熟悉專(zhuān)業(yè),譯筆流暢,因此,這是一本難得的著、譯雙馨的佳作。 這是一本很有特色的教材,其核心是討論程序設(shè)計(jì)語(yǔ)言的工作原理和技術(shù)。本書(shū)融合了傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言教科書(shū)和編譯教科書(shū)的有關(guān)知識(shí),并增加了一些有關(guān)匯編層體系結(jié)構(gòu)的材料,以滿(mǎn)足沒(méi)學(xué)過(guò)計(jì)算機(jī)組織的學(xué)生們的需要。書(shū)中通過(guò)各種語(yǔ)言的例子,闡釋了程序設(shè)計(jì)語(yǔ)言的重要基礎(chǔ)概念,討論了各種概念之間的關(guān)系,解釋了語(yǔ)言中許多結(jié)構(gòu)的形成和發(fā)展過(guò)程,以及它們演化為今天這種形式的根源。書(shū)中還詳細(xì)討論了編譯器的工作方式和工作過(guò)程,說(shuō)明它們對(duì)源程序做了什么,以及為什么要那樣做。書(shū)的每章最后附有復(fù)習(xí)題和一些更具挑戰(zhàn)性的練習(xí)。這些練習(xí)的特別價(jià)值在于引導(dǎo)學(xué)生進(jìn)一步深入理解各種語(yǔ)言和技術(shù)。本書(shū)第2版新增了腳本語(yǔ)言問(wèn)題的討論,涵蓋Perl、Python、Ruby、Tcl、PHP、JavaScript、XSLT等和其他語(yǔ)言?! ”緯?shū)在美國(guó)大學(xué)已使用了十余年,目前被歐美許多重要大學(xué)用于“程序設(shè)計(jì)語(yǔ)言”或者“軟件系統(tǒng)”課程。本書(shū)適合高年級(jí)本科生或者一年級(jí)研究生使用,許多內(nèi)容對(duì)專(zhuān)業(yè)程序員也很有價(jià)值。
作者簡(jiǎn)介
Michael L. Scott是羅切斯特大學(xué)計(jì)算機(jī)科學(xué)系的教授,前任系主任。他于1985年獲得麥迪遜的威斯康星大學(xué)博士學(xué)位。他是Lynx分布式程序設(shè)計(jì)語(yǔ)言、Charlotte和Psyche并行操作系統(tǒng)、Bddge并行文件系統(tǒng)、Cashmere和InterWeave分布式共享存儲(chǔ)系統(tǒng)和許多廣泛使用的同步算法和并發(fā)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)者或共同設(shè)計(jì)者。2001年獲得該大學(xué)的”Rohert和Pamela Goergen本科生教學(xué)突出貢獻(xiàn)獎(jiǎng)”。. 裘宗燕,北京大學(xué)數(shù)學(xué)學(xué)院信息科學(xué)系教授。長(zhǎng)期從事計(jì)算機(jī)軟件與理論、程序設(shè)計(jì)語(yǔ)言方面的研究和教學(xué)工作。先后翻譯了多本國(guó)外計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域的經(jīng)典名著,包括《程序設(shè)計(jì)語(yǔ)言——實(shí)踐之路》、《C++程序設(shè)計(jì)語(yǔ)言(特別版)》、《計(jì)算機(jī)程序的構(gòu)造和解釋?zhuān)ǖ诙妫?,《程序設(shè)計(jì)實(shí)踐》等,負(fù)責(zé)了《代碼大全(第2版)》的審校工作,深得國(guó)內(nèi)讀者好評(píng)。...
書(shū)籍目錄
第1部分 基礎(chǔ)第1章 引言1.1 語(yǔ)言設(shè)計(jì)的藝術(shù)1.2 程序設(shè)計(jì)語(yǔ)言的譜系1.3 為什么研究程序設(shè)計(jì)語(yǔ)言1.4 編譯和解釋1.5 程序設(shè)計(jì)環(huán)境1.6 編譯概覽1.7 總結(jié)和注記1.8 練習(xí)1.9 探索1.10 有關(guān)參考文獻(xiàn)第2章 程序設(shè)計(jì)語(yǔ)言的語(yǔ)法2.1 描述語(yǔ)法:正則表達(dá)式和上下文無(wú)關(guān)文法2.2 掃描2.3 語(yǔ)法分析2.4 理論基礎(chǔ)2.5 總結(jié)和注記2.6 練習(xí)2.7 探索2.8 有關(guān)參考文獻(xiàn)第3章 名字、作用域和約束3.1 約束時(shí)間的概念3.2 對(duì)象生存期和存儲(chǔ)管理3.3 作用域規(guī)則3.4 作用域的實(shí)現(xiàn)3.5 引用環(huán)境的約束3.6 作用域里的約束3.7 分別編譯3.8 總結(jié)和注記3.9 練習(xí)3.10 探索3.11 有關(guān)參考文獻(xiàn)第4章 語(yǔ)義分析第5章 目標(biāo)機(jī)體系結(jié)構(gòu)第2部分 語(yǔ)言設(shè)計(jì)的核心問(wèn)題第6章 控制流第7章 數(shù)據(jù)類(lèi)型第8章 子程序和控制抽象第9章 數(shù)據(jù)抽象和面向?qū)ο蟮?部分 其他程序設(shè)計(jì)模型第10章 函數(shù)式語(yǔ)言第11章 邏輯式語(yǔ)言第12章 并發(fā)第13章 腳本語(yǔ)言第4部分 對(duì)實(shí)現(xiàn)的近距離考查第14章 構(gòu)造可運(yùn)行程序第15章 代碼改進(jìn)附錄A 本書(shū)中提到的程序設(shè)計(jì)語(yǔ)言附錄B 語(yǔ)言設(shè)計(jì)和語(yǔ)言實(shí)現(xiàn)附錄C 編號(hào)示例表參考書(shū)目索引
媒體關(guān)注與評(píng)論
《程序設(shè)計(jì)語(yǔ)言——實(shí)踐之路》不僅用極清晰的筆觸解釋了語(yǔ)言的各種概念和實(shí)現(xiàn)細(xì)節(jié),還仔細(xì)解釋了計(jì)算機(jī)體系結(jié)構(gòu)和編譯器如何影響語(yǔ)言的設(shè)計(jì)和實(shí)現(xiàn)……。本書(shū)展示了程序設(shè)計(jì)語(yǔ)言如何居于計(jì)算機(jī)科學(xué)真正的中心,是跨越程序員和機(jī)器之間的深淵的橋梁?! 訫icrosoft Research的James Larus寫(xiě)的前言 新版本的《程序設(shè)計(jì)語(yǔ)言——實(shí)踐之路》是平衡教科書(shū)所需的三個(gè)質(zhì)量要素(廣度、深度和清晰性)的典范,它必然成為這一領(lǐng)域里的經(jīng)典?! 狢hristopher Vickery, Queens College of CUNY Michael Scott的Programming Language Pragmatics是一本很有價(jià)值的教科書(shū),其內(nèi)容涵蓋程序設(shè)計(jì)語(yǔ)言、編譯技術(shù)、軟件系統(tǒng)的許多方面,甚至延伸到硬件體系結(jié)構(gòu)等許多領(lǐng)域。出現(xiàn)這一情況的根源很明顯:程序語(yǔ)言在計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域居于一種中心地位。程序是計(jì)算機(jī)科學(xué)技術(shù)里最核心的概念,而作為描述程序的語(yǔ)言,集中體現(xiàn)了程序設(shè)計(jì)和軟件開(kāi)發(fā)實(shí)踐中形成的最有價(jià)值、最具普遍性的認(rèn)識(shí)和技術(shù)。程序語(yǔ)言下接硬件體系結(jié)構(gòu),上承豐富多彩的計(jì)算機(jī)應(yīng)用需求,既反映了開(kāi)發(fā)者的專(zhuān)業(yè)發(fā)展和局限性,又受到實(shí)現(xiàn)的制約。這樣,程序語(yǔ)言里很自然地濃縮了相關(guān)領(lǐng)域的大量知識(shí)和技術(shù)精華,要理解語(yǔ)言發(fā)展和演化的現(xiàn)狀和趨勢(shì),也必然涉及與之相關(guān)的眾多領(lǐng)域。本書(shū)作者熟悉這些相關(guān)領(lǐng)域,因此能在其中縱橫馳騁,為我們展現(xiàn)了一幅有關(guān)程序語(yǔ)言的生動(dòng)、全面,而又非常深刻的畫(huà)卷。. 本書(shū)系統(tǒng)地介紹了程序語(yǔ)言領(lǐng)域的各種基本概念,介紹了語(yǔ)言處理方面的許多知識(shí),不同的語(yǔ)言范型以及相關(guān)的理論和實(shí)踐。在討論各種語(yǔ)言特征時(shí),特別仔細(xì)地考察了人們的評(píng)價(jià)和反思,闡釋了各種特征的設(shè)計(jì)變化,以及理論和技術(shù)發(fā)展對(duì)語(yǔ)言形態(tài)和細(xì)節(jié)的影響。與此同時(shí),本書(shū)還深入介紹了本領(lǐng)域的許多新發(fā)展、新問(wèn)題和新技術(shù)。例如,作者用一章的篇幅深入探討了面向?qū)ο笳Z(yǔ)言的問(wèn)題,不僅介紹了這類(lèi)語(yǔ)言的外在形式特征及其價(jià)值,還特別仔細(xì)地討論了這類(lèi)語(yǔ)言中各種新的重要機(jī)制的實(shí)現(xiàn)技術(shù),如動(dòng)態(tài)方法約束、多重繼承等等。用很長(zhǎng)的一章深入討論了并行性的歷史和發(fā)展,以及與并行性有關(guān)的各種重要問(wèn)題。第2版新增了有關(guān)腳本語(yǔ)言的一章,其中討論了腳本語(yǔ)言的特點(diǎn)、應(yīng)用和許多深入問(wèn)題。書(shū)中還詳細(xì)討論了高級(jí)語(yǔ)言的加工過(guò)程,程序的靜態(tài)連接和動(dòng)態(tài)連接,以幫助讀者理解這方面的情況。作者在書(shū)中既強(qiáng)調(diào)了重要的概念和理論,也特別重視各種特征的實(shí)現(xiàn)技術(shù),并深入探討了實(shí)現(xiàn)技術(shù)及其發(fā)展進(jìn)步對(duì)程序語(yǔ)言設(shè)計(jì)的影響。應(yīng)該看到,語(yǔ)言實(shí)現(xiàn)方面的許多技術(shù)都是最重要的程序技術(shù),作者的這些想法也使本書(shū)成為一部很有價(jià)值的軟件技術(shù)書(shū)籍。.. 本書(shū)新的第2版增加了許多內(nèi)容,特別反映了程序設(shè)計(jì)語(yǔ)言領(lǐng)域最近幾年的新發(fā)展。例如書(shū)中特別討論了C99的許多新特征,討論了Java和C# 的泛型機(jī)制,Java等語(yǔ)言最新的并行庫(kù)的重要特征,Python和Ruby語(yǔ)言的面向?qū)ο竽P秃透呒?jí)結(jié)構(gòu)。本書(shū)的內(nèi)容也大大增加了,配套光盤(pán)里包含一些問(wèn)題的深入討論,還有許多很有價(jià)值的參考材料?! 】偠灾緯?shū)在許多方面有鮮明特色,是程序設(shè)計(jì)語(yǔ)言領(lǐng)域教科書(shū)的最新代表。本書(shū)出版之后受到人們的廣泛關(guān)注,很快被世界各國(guó)的許多重要大學(xué)選為“程序設(shè)計(jì)語(yǔ)言”或相關(guān)課程的教科書(shū)或重要參考書(shū)。我認(rèn)為,這本書(shū)不僅值得計(jì)算機(jī)專(zhuān)業(yè)的本科生或研究生學(xué)習(xí),也值得計(jì)算機(jī)領(lǐng)域的實(shí)踐工作者們閱讀。對(duì)本書(shū)的學(xué)習(xí)能幫助我們理解現(xiàn)有的各種程序設(shè)計(jì)語(yǔ)言,提高學(xué)習(xí)和掌握新語(yǔ)言的能力,還能幫助我們看清隱藏在高級(jí)語(yǔ)言的各種機(jī)制背后的許多深入的東西,理解各種重要語(yǔ)言特征的價(jià)值、缺陷和使用它們的代價(jià)。對(duì)程序設(shè)計(jì)語(yǔ)言的深入理解,對(duì)于計(jì)算機(jī)專(zhuān)業(yè)工作者深刻理解相關(guān)的理論和實(shí)踐,靈活高效地運(yùn)用程序語(yǔ)言和相關(guān)工具,都可能起到非常重要的作用。 我非常贊賞電子工業(yè)出版社引進(jìn)這本很有價(jià)值的著作,也很高興能在把本書(shū)介紹給國(guó)內(nèi)讀者方面做些工作。我感謝周筠女士的遠(yuǎn)見(jiàn)卓識(shí)和陳元玉編輯的辛勤工作,還要感謝夏萍和叢欣對(duì)我的一貫支持和幫助。本書(shū)涉及領(lǐng)域廣泛,其中許多是我不熟悉的。雖然我已盡可能查閱了一些材料,但書(shū)中難免還會(huì)留下許多缺陷,希望得到同行和讀者的指教?! ◆米谘唷 ?007年5月,于北京大學(xué) 序言 計(jì)算機(jī)科學(xué)慣于在抽象之上建立抽象。在我們的領(lǐng)域里,把細(xì)節(jié)隱藏到簡(jiǎn)化界面之下的功能既是一種利器,也是不得已而為之。操作系統(tǒng)、數(shù)據(jù)庫(kù)和編譯器都是非常復(fù)雜的程序,歷經(jīng)40年理論和開(kāi)發(fā)的磨礪。在絕大多數(shù)情況下,為使用一個(gè)軟件提供的功能,程序員很少或根本不必理解其內(nèi)部邏輯或結(jié)構(gòu)。在大部分情況下,不知這是禍?zhǔn)歉!? 然而,模糊的抽象也可能變成阻礙發(fā)展和進(jìn)步的壁壘,而不是新生事物的可靠基礎(chǔ)。請(qǐng)看一看本書(shū)考察的主題:程序和程序設(shè)計(jì)語(yǔ)言。為什么一個(gè)程序運(yùn)行得慢如蝸牛,而從執(zhí)行剖析卻看不出其中有任何明顯的瓶頸,或者無(wú)法給其瓶頸找到一種算法解釋?zhuān)坑行撛趩?wèn)題根源于從語(yǔ)言結(jié)構(gòu)到機(jī)器指令的翻譯,或是所生成代碼與處理器體系結(jié)構(gòu)的交互作用。要解決這類(lèi)問(wèn)題,就需要理解連接不同抽象層次的橋梁?! 〕橄笠餐瑯映霈F(xiàn)在學(xué)習(xí)的道路上。簡(jiǎn)單的問(wèn)題如:用英語(yǔ)的一個(gè)小小的呆板子集寫(xiě)出的程序如何控制只懂得二進(jìn)制語(yǔ)言的機(jī)器?或者,雖然有種類(lèi)和數(shù)目繁多的程序設(shè)計(jì)語(yǔ)言,但為什么它們看起來(lái)都相當(dāng)類(lèi)似?如果不潛入細(xì)節(jié),不理解計(jì)算機(jī)、編譯器和語(yǔ)言,這類(lèi)問(wèn)題也無(wú)法回答?! ∽鳛橐粋€(gè)整體,計(jì)算機(jī)科學(xué)的教育確實(shí)能回答這些問(wèn)題。大多數(shù)本科生教學(xué)計(jì)劃都提供了關(guān)于諸如計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、程序設(shè)計(jì)語(yǔ)言設(shè)計(jì)和編譯器的課程。所有這些美妙課程都很值得去學(xué),但是卻很難融入一個(gè)本科生的計(jì)算機(jī)科學(xué)教學(xué)計(jì)劃里,因?yàn)樗€要提供其他的豐富內(nèi)容。進(jìn)一步說(shuō),許多課程教授的都是一些獨(dú)立的主題,卻很少解釋一個(gè)主題與其他主題之間的聯(lián)系。.. 本書(shū)采用另一種視角,超越了分隔上述種種論題的抽象,從而能很好地回答上面這類(lèi)問(wèn)題。Michael Scott是一位卓越的研究者,在語(yǔ)言實(shí)現(xiàn)、運(yùn)行時(shí)系統(tǒng)和計(jì)算機(jī)體系結(jié)構(gòu)方面都有杰出建樹(shù)。他特別有資格描繪所有這些領(lǐng)域,提供有關(guān)現(xiàn)代程序設(shè)計(jì)語(yǔ)言的一種具有內(nèi)在統(tǒng)一性的理解。本書(shū)不僅用極其清晰的筆調(diào)解釋了語(yǔ)言的各種概念和實(shí)現(xiàn)細(xì)節(jié),也闡釋了計(jì)算機(jī)體系結(jié)構(gòu)和編譯器如何影響語(yǔ)言的設(shè)計(jì)和實(shí)現(xiàn)。進(jìn)一步說(shuō),它清晰地展現(xiàn)了各種不同語(yǔ)言在實(shí)際中如何使用,用一些很實(shí)際的例子說(shuō)明問(wèn)題領(lǐng)域如何打磨著這些語(yǔ)言。 在閱讀本書(shū)所感興趣的問(wèn)題的同時(shí),我必須承認(rèn)當(dāng)?shù)谝淮巫x這本書(shū)時(shí),我也曾感到擔(dān)憂。那時(shí)我擔(dān)心Michael的方式會(huì)削弱教學(xué)計(jì)劃中程序設(shè)計(jì)語(yǔ)言和編譯器的地位,使學(xué)生對(duì)這一領(lǐng)域的理解表面化。但現(xiàn)在,通過(guò)重讀這本書(shū),我已經(jīng)認(rèn)識(shí)到事實(shí)恰恰與我的擔(dān)心相反。通過(guò)把相關(guān)的論題放在合適的位置上展示,本書(shū)很好地說(shuō)明了程序設(shè)計(jì)語(yǔ)言如何居于計(jì)算機(jī)科學(xué)真正的中心,成為跨越程序員和機(jī)器之間的深淵的橋梁?! ames Larus,Microsoft Research 計(jì)算機(jī)程序設(shè)計(jì)的課程給了普通學(xué)生有關(guān)計(jì)算機(jī)領(lǐng)域的第一個(gè)印象。在上這種課程之前,大多數(shù)學(xué)生已經(jīng)在自己的生活中使用著計(jì)算機(jī),用于諸如電子郵件、計(jì)算機(jī)游戲、瀏覽網(wǎng)頁(yè)、做文字處理、即時(shí)消息(聊天),以及大量其他事項(xiàng),而且在他們還沒(méi)有寫(xiě)出自己的程序之前,就已經(jīng)開(kāi)始關(guān)注這些應(yīng)用系統(tǒng)的工作方式了。在獲得了作為程序員的一定能力之后(假定已經(jīng)學(xué)過(guò)很好的有關(guān)數(shù)據(jù)結(jié)構(gòu)和算法的課程),很自然地,下一步就是想知道程序設(shè)計(jì)語(yǔ)言是如何工作的。本書(shū)就是對(duì)此提供一個(gè)解釋。本書(shū)的目標(biāo)很簡(jiǎn)單,就是采用盡可能容易理解和最精確的語(yǔ)言,采用普通本科生愿意閱讀并易于接受的風(fēng)格。這一目標(biāo)反應(yīng)了我的一種信念:如果我們真能很好地解釋一件事情究竟是怎樣的,學(xué)生總是希望想理解更多東西,并樂(lè)于去接觸更多的材料。. 在常規(guī)的有關(guān)“系統(tǒng)”的教學(xué)計(jì)劃里,數(shù)據(jù)結(jié)構(gòu)(或者再加上計(jì)算機(jī)組織)之后的內(nèi)容被分門(mén)別類(lèi)歸入屬于一些子領(lǐng)域的一批課程,如程序設(shè)計(jì)語(yǔ)言、編譯構(gòu)造、計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、并行和分布式計(jì)算、數(shù)據(jù)庫(kù)管理系統(tǒng),可能還有軟件工程、面向?qū)ο蟮脑O(shè)計(jì)、圖形學(xué),或者用戶(hù)界面系統(tǒng)。這種安排方式存在一個(gè)缺點(diǎn):這一科目列表在不斷地增長(zhǎng),而學(xué)士課程教學(xué)計(jì)劃中的學(xué)期數(shù)卻保持不變?;蛟S更重要的是,有關(guān)計(jì)算機(jī)科學(xué)最有趣的許多東西都處在這些科目之間的邊界上。例如,RISC革命造成計(jì)算機(jī)體系結(jié)構(gòu)和編譯器構(gòu)造之間持續(xù)20年的聯(lián)盟。最近幾年,重新熱起來(lái)的對(duì)虛擬機(jī)的興趣使操作系統(tǒng)內(nèi)核與語(yǔ)言的運(yùn)行時(shí)系統(tǒng)之間的分界線變得很模糊了。Java和 .NET也以類(lèi)似的形式模糊了編譯器和運(yùn)行庫(kù)之間的分野。今天許多程序被常規(guī)地嵌在萬(wàn)維網(wǎng)頁(yè)、電子報(bào)表和用戶(hù)界面里?! ∨c此同時(shí),教育工作者和研究者也越來(lái)越認(rèn)識(shí)到必須關(guān)注這些相互關(guān)系。特別是在高等教育的核心教學(xué)計(jì)劃中出現(xiàn)一種集成的趨勢(shì)。許多學(xué)校不是給普通學(xué)生有關(guān)兩三個(gè)狹窄科目的深入探討,同時(shí)又在其他方面留下很大的空缺,而是重整了有關(guān)程序設(shè)計(jì)語(yǔ)言和操作系統(tǒng)的課程,使之涵蓋范圍更廣泛的科目,再提供一些更專(zhuān)門(mén)的后續(xù)課程。這一趨勢(shì)在很大程度上是ACM/IEEE計(jì)算教程2001所提出的認(rèn)識(shí)的發(fā)展。在這一教程中強(qiáng)調(diào)了本領(lǐng)域的成長(zhǎng),對(duì)于廣度日益增長(zhǎng)的需要,教學(xué)計(jì)劃設(shè)計(jì)靈活性的重要意義,以及對(duì)于畢業(yè)生的總體目標(biāo):“必須有一種系統(tǒng)層面的認(rèn)識(shí),該認(rèn)識(shí)應(yīng)適于幫助理解理論和實(shí)踐之間的相互作用,熟悉常見(jiàn)的研究課題,并能隨著本領(lǐng)域的發(fā)展而更新”[CR01,11.1節(jié),有修改]。 《程序設(shè)計(jì)語(yǔ)言——實(shí)踐之路》的第1版很幸運(yùn)地跟上了這種趨勢(shì)。第2版繼續(xù)并加強(qiáng)了對(duì)集成學(xué)習(xí)的重視程度,并繼續(xù)以關(guān)于程序設(shè)計(jì)語(yǔ)言設(shè)計(jì)的討論為中心?! ”緯?shū)的核心就是討論程序設(shè)計(jì)語(yǔ)言是如何工作的問(wèn)題。其中并沒(méi)有去列舉許多不同語(yǔ)言的細(xì)節(jié),而是集中關(guān)注學(xué)生們可能遇到的有關(guān)所有語(yǔ)言之基礎(chǔ)的一批概念,通過(guò)各種各樣的實(shí)際例子闡釋這些概念,并努力探索解釋為什么不同語(yǔ)言的設(shè)計(jì)采納了不同方式背后的那些利弊權(quán)衡。同樣,本書(shū)也不去討論如何構(gòu)造一個(gè)編譯器或者解釋器(那只是極少數(shù)的程序員最終需要整個(gè)地參與的一種工作),它將集中關(guān)注編譯器對(duì)輸入的源程序做了些什么事情,以及為什么要那樣做。語(yǔ)言的設(shè)計(jì)和實(shí)現(xiàn)在這里被放在一起考察,其中特別強(qiáng)調(diào)它們之間相互作用的各種方式?! 〉?版的變化 Changes in the Second Edition 第2版有4個(gè)目標(biāo): 1. 引進(jìn)一些新材料,最主要的是有關(guān)腳本語(yǔ)言的材料?! ?. 更新內(nèi)容,使之反映過(guò)去六年中發(fā)生的各方面情況?! ?. 減少提高書(shū)價(jià)格的壓力?! ?. 從教育學(xué)的觀點(diǎn)加強(qiáng)這本書(shū),使之更容易使用,更容易理解?! №?xiàng)(1)是內(nèi)容上最重要的變動(dòng)。由于萬(wàn)維網(wǎng)的迅猛擴(kuò)張,我們可以看到如Perl、PHP、Tcl/Tk、Python、Ruby、JavaScript和XSLT等語(yǔ)言的巨大發(fā)展,不僅在其商業(yè)重要性方面,也在其設(shè)計(jì)創(chuàng)新方面。今天的許多畢業(yè)生將把他們更多的時(shí)間花到腳本語(yǔ)言的工作上,可能比C++、Java和C# 更多。有關(guān)腳本語(yǔ)言的一個(gè)新章(第13章)首先是按應(yīng)用領(lǐng)域組織的(外殼語(yǔ)言,文字處理和報(bào)表生成,數(shù)學(xué)和統(tǒng)計(jì),“粘接”語(yǔ)言和通用腳本語(yǔ)言,擴(kuò)充語(yǔ)言,以及萬(wàn)維網(wǎng)腳本),而后再按新特征組織的(名字和作用域,字符串和模式匹配,高級(jí)數(shù)據(jù)結(jié)構(gòu),面向?qū)ο螅?。?duì)于腳本語(yǔ)言的討論也被加入正文中其他所有合適的地方?! №?xiàng)(2)反映了一些關(guān)鍵性的發(fā)展,如C99標(biāo)準(zhǔn)的最終完成,Java 5和C#(版本2.0)的出現(xiàn)。第6章(控制流)現(xiàn)在包括了裝盒和開(kāi)盒,以及最新的迭代器結(jié)構(gòu)。第8章(子程序)討論了Java和C# 的泛型。第12章(并發(fā)性)涵蓋了Java 5的并行庫(kù)(JSR 166)。對(duì)C# 的討論也加入了通篇中各個(gè)合適的地方。為了反映微處理器市場(chǎng)的變化,在第5章(體系結(jié)構(gòu))和第8章(子程序)的實(shí)例研究中,無(wú)處不在的Intel/AMD x86取代了Motorola 68000。第8章里有關(guān)MIPS的實(shí)例研究也提升到64位模式。有關(guān)技術(shù)指標(biāo)和趨勢(shì)的討論也都做了更新。在一些地方,我重寫(xiě)了使用語(yǔ)言的例子,采用了一些學(xué)生可能更熟悉的實(shí)例。這一過(guò)程無(wú)疑還將在今后的版本中繼續(xù)進(jìn)行?! 〉?版里許多章節(jié)做了大量修改,以使之更清晰并更準(zhǔn)確。有關(guān)章節(jié)包括有窮自動(dòng)機(jī)的創(chuàng)建(2.2.1節(jié)),聲明順序(3.3.3節(jié)),模塊(3.3.4節(jié)),別名和重載(3.6.1節(jié)和3.6.2節(jié)),多態(tài)性和泛型(3.6.3節(jié)、7.1.2節(jié)、8.4節(jié)和9.4.4節(jié)),分別編譯(3.7節(jié)),延續(xù)、異常和多層返回(6.2.1節(jié)、6.2.2節(jié)和8.5節(jié)),調(diào)用序列(8.2節(jié))以及第5章的幾乎全部?jī)?nèi)容。 項(xiàng)(3)反映了Morgan Kaufmann關(guān)于使教科書(shū)具有學(xué)生容易接受的價(jià)格的承諾。第1版比與之可比的教科書(shū)更大而且內(nèi)容更全面,但售價(jià)卻更低。第2版用高質(zhì)量的平裝形式保持了可接受的價(jià)格(同時(shí)減小了體積)。.. 最后是項(xiàng)(4),體現(xiàn)在大量表現(xiàn)方式的改變上。其中一些改變很細(xì)微,例如給出了更多的小節(jié)標(biāo)題,以及更多歷史事實(shí)。更重要的是將本書(shū)組織為四個(gè)主要部分: 第1部分 包含最基礎(chǔ)的材料:(1)有關(guān)語(yǔ)言設(shè)計(jì)和實(shí)現(xiàn)的簡(jiǎn)介;(2)程序設(shè)計(jì)語(yǔ)言的語(yǔ)法;(3)名字、作用域和約束;(4)語(yǔ)義分析;(5)目標(biāo)機(jī)體系結(jié)構(gòu)。這里的(2)和 (5)以合理的方式集中關(guān)注實(shí)現(xiàn)方面的問(wèn)題,(1)和(4)涉及面較廣,(3)介紹了語(yǔ)言設(shè)計(jì)中的一些核心問(wèn)題。 第2部分 繼續(xù)涵蓋其他的核心問(wèn)題:(6)控制流;(7)數(shù)據(jù)類(lèi)型;(8)子程序和控制抽象;(9)數(shù)據(jù)抽象和面向?qū)ο?。最后一章從其在?版里的位置前移了,反映了面向?qū)ο蟪绦蛟O(shè)計(jì)在現(xiàn)代計(jì)算中的中心地位?! 〉?部分 轉(zhuǎn)向其他程序設(shè)計(jì)模型:(10)函數(shù)式語(yǔ)言;(11)邏輯式語(yǔ)言;(12)并發(fā);(13)腳本語(yǔ)言。在第1版里函數(shù)式和邏輯式語(yǔ)言共處一章?! 〉?部分 轉(zhuǎn)向語(yǔ)言的實(shí)現(xiàn):(14)構(gòu)造可執(zhí)行程序(代碼生成、匯編和連接);(15)代碼改進(jìn)(優(yōu)化)。 配套光盤(pán) The PLP CD 為了減小本教科書(shū)的物理體積,為新材料讓出位置,使學(xué)生可以在瀏覽本書(shū)時(shí)集中關(guān)注最基本的材料,大約250頁(yè)更高級(jí)的或者更外圍的材料被放入隨書(shū)配套的光盤(pán)里。其中的大部分章節(jié)(不是全部)是在第1版中被標(biāo)為高級(jí)的或可選的內(nèi)容?! ∑渲凶钪匾淖儎?dòng)是將有關(guān)代碼改進(jìn)的整個(gè)第15章移到光盤(pán)里,移入的其他材料是一些散布各處的節(jié)或小節(jié)。這樣的每節(jié)都在教科書(shū)正文中有所表現(xiàn),有一段關(guān)于相關(guān)論題的簡(jiǎn)單介紹,以及一個(gè)“深度探索”段落,其中綜述了該處省略的材料?! ≌?qǐng)注意,把這些材料放在光盤(pán)并不意味著對(duì)它們技術(shù)重要性的評(píng)價(jià),而只是反映了一個(gè)事實(shí):最值得包含的材料已經(jīng)超過(guò)了一卷書(shū)或者一門(mén)課程的容量。我的意圖是把那些大部分課程可能涵蓋的材料放在印刷形式的教科書(shū)中?! £P(guān)于設(shè)計(jì)和實(shí)現(xiàn)的旁白 Design & Implementation Sidebars 本書(shū)第1版特別強(qiáng)調(diào)了語(yǔ)言設(shè)計(jì)對(duì)于實(shí)現(xiàn)選擇的影響,以及預(yù)期的實(shí)現(xiàn)方式對(duì)于語(yǔ)言設(shè)計(jì)的影響。第2版用超過(guò)120個(gè)旁白把這方面的聯(lián)系表現(xiàn)得更清楚了。有關(guān)這種旁白的更多細(xì)節(jié)將在第7頁(yè)(第1章)說(shuō)明。附錄B給出了所有旁白的目錄。 編號(hào)并加標(biāo)題的實(shí)例 Numberde and Titled Examples 第2版中的實(shí)例被更明確地編織在討論中。為使讀者更容易找到特定的實(shí)例,記住它們的內(nèi)容,并更容易在其他地方引用這些實(shí)例,現(xiàn)在每個(gè)實(shí)例都有一個(gè)頁(yè)邊注,標(biāo)明其編號(hào)和標(biāo)題。全文和配套光盤(pán)里大約有900個(gè)這樣的實(shí)例,附錄C是有關(guān)它們的詳細(xì)目錄?! 【毩?xí)的安排 Exercise Plan 第1版包含總共385個(gè)復(fù)習(xí)題和312個(gè)練習(xí),都放在各章最后。在第2版里,復(fù)習(xí)題被移到各節(jié)的最后,更接近它們所涉及的內(nèi)容,使讀者更容易弄清自己是不是抓住了最重要的概念。復(fù)習(xí)題的數(shù)目大約增加了一倍?! ×?xí)題還是放在各章最后,現(xiàn)在分為練習(xí)和探索兩類(lèi)。前者傾向于或多或少更加直截了當(dāng)一些,當(dāng)然比每節(jié)最后的復(fù)習(xí)題更有挑戰(zhàn)性。它們適合作為課下作業(yè)或簡(jiǎn)單課題。探索中的問(wèn)題是更開(kāi)放的,需要做一些基于網(wǎng)絡(luò)或圖書(shū)館的研究工作,花費(fèi)明顯更多的時(shí)間;或者是去形成一種客觀的認(rèn)識(shí)。習(xí)題總數(shù)從第1版的略多于300道擴(kuò)充為這一版的大約500道。對(duì)于注冊(cè)的教師,可以從密碼保護(hù)的網(wǎng)址得到習(xí)題解答(不包括探索題),需要者請(qǐng)?jiān)L問(wèn)www.mkp.com/companions/ 0126339511/?! ∪绾问褂帽緯?shū) How to Use the Book 《程序設(shè)計(jì)語(yǔ)言——實(shí)踐之路》涵蓋了計(jì)算教程2001報(bào)告 [CR01] 中PL“知識(shí)單元”的幾乎所有材料。本書(shū)特別適合CS 341模塊課程(程序設(shè)計(jì)語(yǔ)言設(shè)計(jì)),也被用于CS 340(編譯構(gòu)造)或CS 343(程序設(shè)計(jì)范型)。它包括了CS 344(函數(shù)式程序設(shè)計(jì))和CS 346(腳本語(yǔ)言)中相當(dāng)大一部分內(nèi)容。圖1給出的是使用本教程的幾條可能路徑?! ∽鳛樽詫W(xué)或者一學(xué)年的課程(圖1里的軌跡F),我建議從頭到尾通讀本書(shū),當(dāng)遇到每個(gè)“深度探索”段落時(shí)再轉(zhuǎn)到相應(yīng)的光盤(pán)內(nèi)容。在羅切斯特大學(xué)作為一學(xué)期的課程時(shí)(軌跡R,本書(shū)就是為它開(kāi)發(fā)的),我們也覆蓋了本書(shū)的大部分內(nèi)容,但不包括大部分光盤(pán)章節(jié)。再去掉自下而上的語(yǔ)法分析(2.3.3節(jié))、消息傳遞(12.4節(jié))、萬(wàn)維網(wǎng)腳本(13.3節(jié))以及第14章(構(gòu)造可運(yùn)行程序)的大部分內(nèi)容。 有些章(第2、4、5、14和15章)比其他的章更著重強(qiáng)調(diào)實(shí)現(xiàn)問(wèn)題。這些章與其他更多關(guān)注語(yǔ)言設(shè)計(jì)的章之間的順序可以在一定限度內(nèi)調(diào)整,但一定要保證第5章或者與之相當(dāng)?shù)膬?nèi)容出現(xiàn)在第6到9章之前。許多學(xué)生可能已經(jīng)熟悉了第5章的一些材料,多半是來(lái)自一個(gè)有關(guān)計(jì)算機(jī)組織的課程。在這種情況下就可以簡(jiǎn)單地跳過(guò)這一章,將其作為參考材料。有些學(xué)生可能已經(jīng)熟悉了第2章的一些材料,可能是來(lái)自一門(mén)有關(guān)自動(dòng)機(jī)的課程。在這種情況下,該章的內(nèi)容可以很快讀過(guò)去,只是可能要在某些實(shí)際問(wèn)題上(例如從語(yǔ)法錯(cuò)誤中恢復(fù),或者實(shí)際掃描器與經(jīng)典的有窮自動(dòng)機(jī)的差異方面)多停留一下?! ∪绻糜诟鼈鹘y(tǒng)的程序設(shè)計(jì)語(yǔ)言課程(軌跡P),那么可以排除有關(guān)掃描器和語(yǔ)法分析器的內(nèi)容,加上完整的第4、5兩章,還可以減少對(duì)其他章節(jié)里與實(shí)現(xiàn)有關(guān)的材料的重視程度。在此基礎(chǔ)上可以增加一些光盤(pán)內(nèi)容,如ML類(lèi)型系統(tǒng)(7.2.4節(jié)),多重繼承(9.5節(jié)),Smalltalk(9.6.1節(jié)),lambda演算(10.6節(jié))和謂詞演算(11.3節(jié))。 圖1 課程路線圖。較暗的區(qū)塊表示配套光盤(pán)中的“In More Depth”補(bǔ)充內(nèi)容。節(jié)序號(hào)表示沒(méi)有與補(bǔ)充內(nèi)容對(duì)應(yīng)的斷開(kāi)的部分?! ”緯?shū)也在一些學(xué)校里被用于有關(guān)編譯器的引論性課程(圖1的軌跡C)。典型的安排是基本去掉第3部分的內(nèi)容(第10到13章),以及通篇中更多強(qiáng)調(diào)設(shè)計(jì)的材料。包含所有有關(guān)掃描和語(yǔ)法分析的材料,第14和15章,以及其他光盤(pán)材料的某種混合?! ?duì)于那些采用4學(xué)季制的學(xué)校,一種常見(jiàn)選擇方案是開(kāi)一學(xué)期的引論性課程和兩個(gè)隨后的選修課程(圖1的軌跡Q)。引論課程可以覆蓋第1、3、6、7章的主要內(nèi)容(不包括光盤(pán)材料),再加上第2和8章的前一半。后面一學(xué)季的面向語(yǔ)言的課程可以覆蓋第8章的其余部分,整個(gè)第3部分,以及第6到8章的光盤(pán)材料?;蛟S再加上一些有關(guān)形式語(yǔ)義學(xué)、類(lèi)型系統(tǒng)或其他相關(guān)論題的補(bǔ)充材料。后面一學(xué)季的面向編譯器的課程可以包含第2章的其余部分,第4—5章和14—15 章,以及第3章和第8~9章的光盤(pán)材料,或許再加上一些有關(guān)自動(dòng)代碼生成、更富進(jìn)取性的代碼優(yōu)化、程序設(shè)計(jì)工具等等方面的材料。 無(wú)論采用哪條路徑學(xué)習(xí)這本教科書(shū),我都假定大多數(shù)讀者已經(jīng)對(duì)至少一種高級(jí)命令式程序設(shè)計(jì)語(yǔ)言有了相當(dāng)?shù)慕?jīng)驗(yàn)。具體是哪種語(yǔ)言在這里并沒(méi)有關(guān)系。書(shū)中例子取自各種不同的語(yǔ)言,但總是帶有足夠的注釋和其他討論,使不熟悉該語(yǔ)言的讀者也能比較容易地理解它們。附錄A包含了有關(guān)大約50種語(yǔ)言的簡(jiǎn)單介紹。這里的算法都是采用自明的非形式的偽代碼。真正的程序設(shè)計(jì)語(yǔ)言代碼用的字體是 "typewriter"字體,偽代碼用的字體是sans-selif字體?! ≥o助材料 Supplemental Materials 除了作為正文章節(jié)的補(bǔ)充外,隨書(shū)光盤(pán)里還包括一些其他資源: · 對(duì)萬(wàn)維網(wǎng)上一些語(yǔ)言手冊(cè)和教程的鏈接; · 對(duì)一些開(kāi)源編譯器和解釋器的鏈接; · 書(shū)中所有不那么簡(jiǎn)單的實(shí)例的完整源代碼(多于300個(gè)源文件); · 對(duì)文本內(nèi)容和隨書(shū)光盤(pán)內(nèi)容的搜索引擎?! ∵M(jìn)一步的資源在www.mkp.com/companions/0126339511/(你可能需要隨時(shí)過(guò)去檢查,以保證鏈接正確)。對(duì)于采用本書(shū)的教師,還通過(guò)一個(gè)密碼保護(hù)的頁(yè)面提供了: · 全書(shū)中所有圖形的可編輯的PDF源文件; · 可編輯的PowerPoint幻燈片; · 大部分練習(xí)的解答; · 對(duì)于大項(xiàng)目的建議。 第2版致謝 Acknowledgments for the Second Edition 在準(zhǔn)備第2版的過(guò)程中,我有幸得到了很多人的真誠(chéng)幫助。許多同行提供了有關(guān)第1版中的勘誤和反饋信息,包括Manuel E. Bermudez,John Boyland,Brian Cumming,Stephen A. Edward,Michael J. Eulenstein,Tayssir John Gabbour,Tommaso Galleri,Eileen Head,David Hoffman,Paul Ilardi,Lucian Ilie,Rahul Jain,Eric Joanis,Alan Kaplan,Les Lander,Jim Larus,Hui Li,Jingke Li,Evangelos Milios,Eduardo Pinheiro,Barbara Ryder,Nick Stuifbergen,Raymond Toal,Andrew Tolmach,Jens Troeger和Robert van Renesse。裘宗燕做了本書(shū)的中文翻譯并在此過(guò)程中發(fā)現(xiàn)了一些錯(cuò)誤。Simon Fillat維護(hù)了Morgan Kaufmann的網(wǎng)頁(yè)。無(wú)疑地我還要感謝列在第1版致謝中的另外許多人,他們作為評(píng)閱人、采用者和讀者,為前一版的工作提供了許多幫助并使其成功。他們的貢獻(xiàn)延續(xù)到這一版中?! ?duì)于第2版的工作開(kāi)始于SIGCSE02的“關(guān)注小組”的認(rèn)真討論。我特別要感謝Denise Penrose、Emilia Thiuri和Morgan Kaufmann團(tuán)隊(duì)的其他人組織了這次活動(dòng),感謝那二十多位出席這次活動(dòng)并使我能共享他們有關(guān)內(nèi)容和教學(xué)法的意見(jiàn)的同行,以及其他評(píng)閱了兩個(gè)版本的計(jì)劃書(shū)的人們。 第2版的初稿于2004年秋季在8所大學(xué)做了課堂試驗(yàn)。我非常感謝Gerald Baumgartner(路易斯安那州立大學(xué))、William Calhoun(Bloomsburg大學(xué))、Betty Cheng(密執(zhí)安州立大學(xué))、Jingke Li(Portland州立大學(xué))、Beverly Sanders(佛羅里達(dá)大學(xué))、Darko Stefanovic(新墨西哥大學(xué))、Raymond Toal(Loyola Marymount大學(xué))、Robert van Engelen(佛羅里達(dá)州立大學(xué))和他們的學(xué)生提供的大量建議、反映、勘誤和其他反饋。van Engelen教授提供了若干絕好的章末練習(xí)?! 〉?版的外部評(píng)閱人提供了大量有益的建議。我要感謝Richard J. Botting(加利福尼亞州立大學(xué)San Bernardino分校)、Kamal Dahbur(DePaul大學(xué))、Stephen A. Edwards(哥倫比亞大學(xué))、Eileen Head(Binghamton大學(xué))、Li Liao(特拉華大學(xué))、Christopher Vickery(紐約城市大學(xué)皇后學(xué)院)、Garrett Wollman(MIT)、Neng-Fa Zhou(紐約城市大學(xué)布魯克林學(xué)院)和Cynthia Brown Zickos(密西西比大學(xué))。Garrett Wollman有關(guān)第13章的評(píng)論特別有幫助,就像他對(duì)前一版本的各方面問(wèn)題提出的評(píng)注一樣。我已將其中盡可能多的東西融入這一版本,并認(rèn)真地保存起剩下的意見(jiàn),留作第3版的寫(xiě)作指引。在本版里剩下的問(wèn)題都應(yīng)該由我本人負(fù)責(zé)?! ∵@個(gè)版本也于2004年秋季在羅切斯特大學(xué)做了教學(xué)試驗(yàn)。我要感謝我的學(xué)生,特別是John Heidkamp、David Lu和Dan Mullowney的熱情和建議。Mike Spear對(duì)第13章的Web技術(shù)提供了若干有益的建議。在這些年里,我的同事Chen Ding和Sandhya Dwarkadas用第1版授課多次,提出了許多有益的建議。Chen對(duì)第15章的建議(也有Yutao Zhong的協(xié)助)特別有價(jià)值。我還要感謝我的其他同事,以及系主任Mitsunori Ogihara。感謝系里的管理員、秘書(shū)和技術(shù)人員為我提供了這么好的工作環(huán)境?! ≌缭诘?版工作中一樣,Morgan Kaufman出版社的工作人員對(duì)此工作真誠(chéng)投入,包括專(zhuān)業(yè)上的和個(gè)人的。我特別感謝出版人Denise Penrose,編輯Nate McFadden,產(chǎn)品編輯Carl Soares,光盤(pán)設(shè)計(jì)師Peter Ashenden,市場(chǎng)經(jīng)理Brian Grimm和編輯助理Valerie Witte。 最重要的是很感激我的妻子Kelly和我們的女兒Erin和Shannon,感謝她們?cè)谶@看不到盡頭的寫(xiě)作和修改中的耐心和支持。計(jì)算是一種美好的專(zhuān)業(yè),而家庭卻是最要緊的?! icheal L. Scott Rochester, NY 2005年4月
編輯推薦
這是一本很有特色的教材,其核心是討論程序設(shè)計(jì)語(yǔ)言的工作原理和技術(shù)。本書(shū)融合了傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言教科書(shū)和編譯教科書(shū)的有關(guān)知識(shí),并增加了一些有關(guān)匯編層體系結(jié)構(gòu)的材料,以滿(mǎn)足沒(méi)學(xué)過(guò)計(jì)算機(jī)組織的學(xué)生們的需要。書(shū)中通過(guò)各種語(yǔ)言的例子,闡釋了程序設(shè)計(jì)語(yǔ)言的重要基礎(chǔ)概念,討論了各種概念之間的關(guān)系,解釋了語(yǔ)言中許多結(jié)構(gòu)的形成和發(fā)展過(guò)程,以及它們演化為今天這種形式的根源。書(shū)中還詳細(xì)討論了編譯器的工作方式和工作過(guò)程,說(shuō)明它們對(duì)源程序做了什么,以及為什么要那樣做。書(shū)的每章最后附有復(fù)習(xí)題和一些更具挑戰(zhàn)性的練習(xí)。這些練習(xí)的特別價(jià)值在于引導(dǎo)學(xué)生進(jìn)一步深入理解各種語(yǔ)言和技術(shù)。本書(shū)第2版新增了腳本語(yǔ)言問(wèn)題的討論,涵蓋Perl、Python、Ruby、Tcl、PHP、JavaScript、XSLT等和其他語(yǔ)言?! ”緯?shū)在美國(guó)大學(xué)已使用了十余年,目前被歐美許多重要大學(xué)用于“程序設(shè)計(jì)語(yǔ)言”或者“軟件系統(tǒng)”課程。本書(shū)適合高年級(jí)本科生或者一年級(jí)研究生使用,許多內(nèi)容對(duì)專(zhuān)業(yè)程序員也很有價(jià)值。本書(shū)作者M(jìn)ichael L.Scott 是計(jì)算機(jī)領(lǐng)域的著名學(xué)者,譯者是北京大學(xué)的裘宗燕教授,他熟悉專(zhuān)業(yè),譯筆流暢,因此,這是一本難得的著、譯雙馨的佳作。
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版