程序設(shè)計語言

出版時間:2007-6  出版社:電子工業(yè)出版社  作者:斯科特  頁數(shù):899  譯者:裘宗燕  
Tag標(biāo)簽:無  

內(nèi)容概要

  ★列為全球上百所大學(xué)標(biāo)準(zhǔn)教材和首席參考書!  ★圖書館必備典藏,作者Michael L.Scott 是計算機領(lǐng)域的著名學(xué)者,譯者是北京大學(xué)的裘宗燕教授,他熟悉專業(yè),譯筆流暢,因此,這是一本難得的著、譯雙馨的佳作?! ∵@是一本很有特色的教材,其核心是討論程序設(shè)計語言的工作原理和技術(shù)。本書融合了傳統(tǒng)的程序設(shè)計語言教科書和編譯教科書的有關(guān)知識,并增加了一些有關(guān)匯編層體系結(jié)構(gòu)的材料,以滿足沒學(xué)過計算機組織的學(xué)生們的需要。書中通過各種語言的例子,闡釋了程序設(shè)計語言的重要基礎(chǔ)概念,討論了各種概念之間的關(guān)系,解釋了語言中許多結(jié)構(gòu)的形成和發(fā)展過程,以及它們演化為今天這種形式的根源。書中還詳細討論了編譯器的工作方式和工作過程,說明它們對源程序做了什么,以及為什么要那樣做。書的每章最后附有復(fù)習(xí)題和一些更具挑戰(zhàn)性的練習(xí)。這些練習(xí)的特別價值在于引導(dǎo)學(xué)生進一步深入理解各種語言和技術(shù)。本書第2版新增了腳本語言問題的討論,涵蓋Perl、Python、Ruby、Tcl、PHP、JavaScript、XSLT等和其他語言?!   ”緯诿绹髮W(xué)已使用了十余年,目前被歐美許多重要大學(xué)用于“程序設(shè)計語言”或者“軟件系統(tǒng)”課程。本書適合高年級本科生或者一年級研究生使用,許多內(nèi)容對專業(yè)程序員也很有價值。

作者簡介

  Michael L. Scott是羅切斯特大學(xué)計算機科學(xué)系的教授,前任系主任。他于1985年獲得麥迪遜的威斯康星大學(xué)博士學(xué)位。他是Lynx分布式程序設(shè)計語言、Charlotte和Psyche并行操作系統(tǒng)、Bddge并行文件系統(tǒng)、Cashmere和InterWeave分布式共享存儲系統(tǒng)和許多廣泛使用的同步算法和并發(fā)數(shù)據(jù)結(jié)構(gòu)的設(shè)計者或共同設(shè)計者。2001年獲得該大學(xué)的”Rohert和Pamela Goergen本科生教學(xué)突出貢獻獎”。.  裘宗燕,北京大學(xué)數(shù)學(xué)學(xué)院信息科學(xué)系教授。長期從事計算機軟件與理論、程序設(shè)計語言方面的研究和教學(xué)工作。先后翻譯了多本國外計算機科學(xué)技術(shù)領(lǐng)域的經(jīng)典名著,包括《程序設(shè)計語言——實踐之路》、《C++程序設(shè)計語言(特別版)》、《計算機程序的構(gòu)造和解釋(第二版)》,《程序設(shè)計實踐》等,負責(zé)了《代碼大全(第2版)》的審校工作,深得國內(nèi)讀者好評。...

書籍目錄

第1部分 基礎(chǔ)第1章 引言1.1 語言設(shè)計的藝術(shù)1.2 程序設(shè)計語言的譜系1.3 為什么研究程序設(shè)計語言1.4 編譯和解釋1.5 程序設(shè)計環(huán)境1.6 編譯概覽1.7 總結(jié)和注記1.8 練習(xí)1.9 探索1.10 有關(guān)參考文獻第2章 程序設(shè)計語言的語法2.1 描述語法:正則表達式和上下文無關(guān)文法2.2 掃描2.3 語法分析2.4 理論基礎(chǔ)2.5 總結(jié)和注記2.6 練習(xí)2.7 探索2.8 有關(guān)參考文獻第3章 名字、作用域和約束3.1 約束時間的概念3.2 對象生存期和存儲管理3.3 作用域規(guī)則3.4 作用域的實現(xiàn)3.5 引用環(huán)境的約束3.6 作用域里的約束3.7 分別編譯3.8 總結(jié)和注記3.9 練習(xí)3.10 探索3.11 有關(guān)參考文獻第4章 語義分析第5章 目標(biāo)機體系結(jié)構(gòu)第2部分 語言設(shè)計的核心問題第6章 控制流第7章 數(shù)據(jù)類型第8章 子程序和控制抽象第9章 數(shù)據(jù)抽象和面向?qū)ο蟮?部分 其他程序設(shè)計模型第10章 函數(shù)式語言第11章 邏輯式語言第12章 并發(fā)第13章 腳本語言第4部分 對實現(xiàn)的近距離考查第14章 構(gòu)造可運行程序第15章 代碼改進附錄A 本書中提到的程序設(shè)計語言附錄B 語言設(shè)計和語言實現(xiàn)附錄C 編號示例表參考書目索引

媒體關(guān)注與評論

  《程序設(shè)計語言——實踐之路》不僅用極清晰的筆觸解釋了語言的各種概念和實現(xiàn)細節(jié),還仔細解釋了計算機體系結(jié)構(gòu)和編譯器如何影響語言的設(shè)計和實現(xiàn)……。本書展示了程序設(shè)計語言如何居于計算機科學(xué)真正的中心,是跨越程序員和機器之間的深淵的橋梁?!  訫icrosoft Research的James Larus寫的前言  新版本的《程序設(shè)計語言——實踐之路》是平衡教科書所需的三個質(zhì)量要素(廣度、深度和清晰性)的典范,它必然成為這一領(lǐng)域里的經(jīng)典。  ——Christopher Vickery, Queens College of CUNY    Michael Scott的Programming Language Pragmatics是一本很有價值的教科書,其內(nèi)容涵蓋程序設(shè)計語言、編譯技術(shù)、軟件系統(tǒng)的許多方面,甚至延伸到硬件體系結(jié)構(gòu)等許多領(lǐng)域。出現(xiàn)這一情況的根源很明顯:程序語言在計算機科學(xué)技術(shù)領(lǐng)域居于一種中心地位。程序是計算機科學(xué)技術(shù)里最核心的概念,而作為描述程序的語言,集中體現(xiàn)了程序設(shè)計和軟件開發(fā)實踐中形成的最有價值、最具普遍性的認識和技術(shù)。程序語言下接硬件體系結(jié)構(gòu),上承豐富多彩的計算機應(yīng)用需求,既反映了開發(fā)者的專業(yè)發(fā)展和局限性,又受到實現(xiàn)的制約。這樣,程序語言里很自然地濃縮了相關(guān)領(lǐng)域的大量知識和技術(shù)精華,要理解語言發(fā)展和演化的現(xiàn)狀和趨勢,也必然涉及與之相關(guān)的眾多領(lǐng)域。本書作者熟悉這些相關(guān)領(lǐng)域,因此能在其中縱橫馳騁,為我們展現(xiàn)了一幅有關(guān)程序語言的生動、全面,而又非常深刻的畫卷。.  本書系統(tǒng)地介紹了程序語言領(lǐng)域的各種基本概念,介紹了語言處理方面的許多知識,不同的語言范型以及相關(guān)的理論和實踐。在討論各種語言特征時,特別仔細地考察了人們的評價和反思,闡釋了各種特征的設(shè)計變化,以及理論和技術(shù)發(fā)展對語言形態(tài)和細節(jié)的影響。與此同時,本書還深入介紹了本領(lǐng)域的許多新發(fā)展、新問題和新技術(shù)。例如,作者用一章的篇幅深入探討了面向?qū)ο笳Z言的問題,不僅介紹了這類語言的外在形式特征及其價值,還特別仔細地討論了這類語言中各種新的重要機制的實現(xiàn)技術(shù),如動態(tài)方法約束、多重繼承等等。用很長的一章深入討論了并行性的歷史和發(fā)展,以及與并行性有關(guān)的各種重要問題。第2版新增了有關(guān)腳本語言的一章,其中討論了腳本語言的特點、應(yīng)用和許多深入問題。書中還詳細討論了高級語言的加工過程,程序的靜態(tài)連接和動態(tài)連接,以幫助讀者理解這方面的情況。作者在書中既強調(diào)了重要的概念和理論,也特別重視各種特征的實現(xiàn)技術(shù),并深入探討了實現(xiàn)技術(shù)及其發(fā)展進步對程序語言設(shè)計的影響。應(yīng)該看到,語言實現(xiàn)方面的許多技術(shù)都是最重要的程序技術(shù),作者的這些想法也使本書成為一部很有價值的軟件技術(shù)書籍。..  本書新的第2版增加了許多內(nèi)容,特別反映了程序設(shè)計語言領(lǐng)域最近幾年的新發(fā)展。例如書中特別討論了C99的許多新特征,討論了Java和C# 的泛型機制,Java等語言最新的并行庫的重要特征,Python和Ruby語言的面向?qū)ο竽P秃透呒壗Y(jié)構(gòu)。本書的內(nèi)容也大大增加了,配套光盤里包含一些問題的深入討論,還有許多很有價值的參考材料。  總而言之,本書在許多方面有鮮明特色,是程序設(shè)計語言領(lǐng)域教科書的最新代表。本書出版之后受到人們的廣泛關(guān)注,很快被世界各國的許多重要大學(xué)選為“程序設(shè)計語言”或相關(guān)課程的教科書或重要參考書。我認為,這本書不僅值得計算機專業(yè)的本科生或研究生學(xué)習(xí),也值得計算機領(lǐng)域的實踐工作者們閱讀。對本書的學(xué)習(xí)能幫助我們理解現(xiàn)有的各種程序設(shè)計語言,提高學(xué)習(xí)和掌握新語言的能力,還能幫助我們看清隱藏在高級語言的各種機制背后的許多深入的東西,理解各種重要語言特征的價值、缺陷和使用它們的代價。對程序設(shè)計語言的深入理解,對于計算機專業(yè)工作者深刻理解相關(guān)的理論和實踐,靈活高效地運用程序語言和相關(guān)工具,都可能起到非常重要的作用?! ∥曳浅Y澷p電子工業(yè)出版社引進這本很有價值的著作,也很高興能在把本書介紹給國內(nèi)讀者方面做些工作。我感謝周筠女士的遠見卓識和陳元玉編輯的辛勤工作,還要感謝夏萍和叢欣對我的一貫支持和幫助。本書涉及領(lǐng)域廣泛,其中許多是我不熟悉的。雖然我已盡可能查閱了一些材料,但書中難免還會留下許多缺陷,希望得到同行和讀者的指教。  裘宗燕  2007年5月,于北京大學(xué)    序言  計算機科學(xué)慣于在抽象之上建立抽象。在我們的領(lǐng)域里,把細節(jié)隱藏到簡化界面之下的功能既是一種利器,也是不得已而為之。操作系統(tǒng)、數(shù)據(jù)庫和編譯器都是非常復(fù)雜的程序,歷經(jīng)40年理論和開發(fā)的磨礪。在絕大多數(shù)情況下,為使用一個軟件提供的功能,程序員很少或根本不必理解其內(nèi)部邏輯或結(jié)構(gòu)。在大部分情況下,不知這是禍?zhǔn)歉!?  然而,模糊的抽象也可能變成阻礙發(fā)展和進步的壁壘,而不是新生事物的可靠基礎(chǔ)。請看一看本書考察的主題:程序和程序設(shè)計語言。為什么一個程序運行得慢如蝸牛,而從執(zhí)行剖析卻看不出其中有任何明顯的瓶頸,或者無法給其瓶頸找到一種算法解釋?有些潛在問題根源于從語言結(jié)構(gòu)到機器指令的翻譯,或是所生成代碼與處理器體系結(jié)構(gòu)的交互作用。要解決這類問題,就需要理解連接不同抽象層次的橋梁?! 〕橄笠餐瑯映霈F(xiàn)在學(xué)習(xí)的道路上。簡單的問題如:用英語的一個小小的呆板子集寫出的程序如何控制只懂得二進制語言的機器?或者,雖然有種類和數(shù)目繁多的程序設(shè)計語言,但為什么它們看起來都相當(dāng)類似?如果不潛入細節(jié),不理解計算機、編譯器和語言,這類問題也無法回答?! ∽鳛橐粋€整體,計算機科學(xué)的教育確實能回答這些問題。大多數(shù)本科生教學(xué)計劃都提供了關(guān)于諸如計算機體系結(jié)構(gòu)、操作系統(tǒng)、程序設(shè)計語言設(shè)計和編譯器的課程。所有這些美妙課程都很值得去學(xué),但是卻很難融入一個本科生的計算機科學(xué)教學(xué)計劃里,因為它還要提供其他的豐富內(nèi)容。進一步說,許多課程教授的都是一些獨立的主題,卻很少解釋一個主題與其他主題之間的聯(lián)系。..  本書采用另一種視角,超越了分隔上述種種論題的抽象,從而能很好地回答上面這類問題。Michael Scott是一位卓越的研究者,在語言實現(xiàn)、運行時系統(tǒng)和計算機體系結(jié)構(gòu)方面都有杰出建樹。他特別有資格描繪所有這些領(lǐng)域,提供有關(guān)現(xiàn)代程序設(shè)計語言的一種具有內(nèi)在統(tǒng)一性的理解。本書不僅用極其清晰的筆調(diào)解釋了語言的各種概念和實現(xiàn)細節(jié),也闡釋了計算機體系結(jié)構(gòu)和編譯器如何影響語言的設(shè)計和實現(xiàn)。進一步說,它清晰地展現(xiàn)了各種不同語言在實際中如何使用,用一些很實際的例子說明問題領(lǐng)域如何打磨著這些語言。  在閱讀本書所感興趣的問題的同時,我必須承認當(dāng)?shù)谝淮巫x這本書時,我也曾感到擔(dān)憂。那時我擔(dān)心Michael的方式會削弱教學(xué)計劃中程序設(shè)計語言和編譯器的地位,使學(xué)生對這一領(lǐng)域的理解表面化。但現(xiàn)在,通過重讀這本書,我已經(jīng)認識到事實恰恰與我的擔(dān)心相反。通過把相關(guān)的論題放在合適的位置上展示,本書很好地說明了程序設(shè)計語言如何居于計算機科學(xué)真正的中心,成為跨越程序員和機器之間的深淵的橋梁。  James Larus,Microsoft Research    計算機程序設(shè)計的課程給了普通學(xué)生有關(guān)計算機領(lǐng)域的第一個印象。在上這種課程之前,大多數(shù)學(xué)生已經(jīng)在自己的生活中使用著計算機,用于諸如電子郵件、計算機游戲、瀏覽網(wǎng)頁、做文字處理、即時消息(聊天),以及大量其他事項,而且在他們還沒有寫出自己的程序之前,就已經(jīng)開始關(guān)注這些應(yīng)用系統(tǒng)的工作方式了。在獲得了作為程序員的一定能力之后(假定已經(jīng)學(xué)過很好的有關(guān)數(shù)據(jù)結(jié)構(gòu)和算法的課程),很自然地,下一步就是想知道程序設(shè)計語言是如何工作的。本書就是對此提供一個解釋。本書的目標(biāo)很簡單,就是采用盡可能容易理解和最精確的語言,采用普通本科生愿意閱讀并易于接受的風(fēng)格。這一目標(biāo)反應(yīng)了我的一種信念:如果我們真能很好地解釋一件事情究竟是怎樣的,學(xué)生總是希望想理解更多東西,并樂于去接觸更多的材料。.  在常規(guī)的有關(guān)“系統(tǒng)”的教學(xué)計劃里,數(shù)據(jù)結(jié)構(gòu)(或者再加上計算機組織)之后的內(nèi)容被分門別類歸入屬于一些子領(lǐng)域的一批課程,如程序設(shè)計語言、編譯構(gòu)造、計算機體系結(jié)構(gòu)、操作系統(tǒng)、并行和分布式計算、數(shù)據(jù)庫管理系統(tǒng),可能還有軟件工程、面向?qū)ο蟮脑O(shè)計、圖形學(xué),或者用戶界面系統(tǒng)。這種安排方式存在一個缺點:這一科目列表在不斷地增長,而學(xué)士課程教學(xué)計劃中的學(xué)期數(shù)卻保持不變。或許更重要的是,有關(guān)計算機科學(xué)最有趣的許多東西都處在這些科目之間的邊界上。例如,RISC革命造成計算機體系結(jié)構(gòu)和編譯器構(gòu)造之間持續(xù)20年的聯(lián)盟。最近幾年,重新熱起來的對虛擬機的興趣使操作系統(tǒng)內(nèi)核與語言的運行時系統(tǒng)之間的分界線變得很模糊了。Java和 .NET也以類似的形式模糊了編譯器和運行庫之間的分野。今天許多程序被常規(guī)地嵌在萬維網(wǎng)頁、電子報表和用戶界面里?! ∨c此同時,教育工作者和研究者也越來越認識到必須關(guān)注這些相互關(guān)系。特別是在高等教育的核心教學(xué)計劃中出現(xiàn)一種集成的趨勢。許多學(xué)校不是給普通學(xué)生有關(guān)兩三個狹窄科目的深入探討,同時又在其他方面留下很大的空缺,而是重整了有關(guān)程序設(shè)計語言和操作系統(tǒng)的課程,使之涵蓋范圍更廣泛的科目,再提供一些更專門的后續(xù)課程。這一趨勢在很大程度上是ACM/IEEE計算教程2001所提出的認識的發(fā)展。在這一教程中強調(diào)了本領(lǐng)域的成長,對于廣度日益增長的需要,教學(xué)計劃設(shè)計靈活性的重要意義,以及對于畢業(yè)生的總體目標(biāo):“必須有一種系統(tǒng)層面的認識,該認識應(yīng)適于幫助理解理論和實踐之間的相互作用,熟悉常見的研究課題,并能隨著本領(lǐng)域的發(fā)展而更新”[CR01,11.1節(jié),有修改]?!  冻绦蛟O(shè)計語言——實踐之路》的第1版很幸運地跟上了這種趨勢。第2版繼續(xù)并加強了對集成學(xué)習(xí)的重視程度,并繼續(xù)以關(guān)于程序設(shè)計語言設(shè)計的討論為中心?! ”緯暮诵木褪怯懻摮绦蛟O(shè)計語言是如何工作的問題。其中并沒有去列舉許多不同語言的細節(jié),而是集中關(guān)注學(xué)生們可能遇到的有關(guān)所有語言之基礎(chǔ)的一批概念,通過各種各樣的實際例子闡釋這些概念,并努力探索解釋為什么不同語言的設(shè)計采納了不同方式背后的那些利弊權(quán)衡。同樣,本書也不去討論如何構(gòu)造一個編譯器或者解釋器(那只是極少數(shù)的程序員最終需要整個地參與的一種工作),它將集中關(guān)注編譯器對輸入的源程序做了些什么事情,以及為什么要那樣做。語言的設(shè)計和實現(xiàn)在這里被放在一起考察,其中特別強調(diào)它們之間相互作用的各種方式?! 〉?版的變化  Changes in the Second Edition  第2版有4個目標(biāo):  1. 引進一些新材料,最主要的是有關(guān)腳本語言的材料?! ?. 更新內(nèi)容,使之反映過去六年中發(fā)生的各方面情況。  3. 減少提高書價格的壓力?! ?. 從教育學(xué)的觀點加強這本書,使之更容易使用,更容易理解?! №棧?)是內(nèi)容上最重要的變動。由于萬維網(wǎng)的迅猛擴張,我們可以看到如Perl、PHP、Tcl/Tk、Python、Ruby、JavaScript和XSLT等語言的巨大發(fā)展,不僅在其商業(yè)重要性方面,也在其設(shè)計創(chuàng)新方面。今天的許多畢業(yè)生將把他們更多的時間花到腳本語言的工作上,可能比C++、Java和C# 更多。有關(guān)腳本語言的一個新章(第13章)首先是按應(yīng)用領(lǐng)域組織的(外殼語言,文字處理和報表生成,數(shù)學(xué)和統(tǒng)計,“粘接”語言和通用腳本語言,擴充語言,以及萬維網(wǎng)腳本),而后再按新特征組織的(名字和作用域,字符串和模式匹配,高級數(shù)據(jù)結(jié)構(gòu),面向?qū)ο螅?。對于腳本語言的討論也被加入正文中其他所有合適的地方?! №棧?)反映了一些關(guān)鍵性的發(fā)展,如C99標(biāo)準(zhǔn)的最終完成,Java 5和C#(版本2.0)的出現(xiàn)。第6章(控制流)現(xiàn)在包括了裝盒和開盒,以及最新的迭代器結(jié)構(gòu)。第8章(子程序)討論了Java和C# 的泛型。第12章(并發(fā)性)涵蓋了Java 5的并行庫(JSR 166)。對C# 的討論也加入了通篇中各個合適的地方。為了反映微處理器市場的變化,在第5章(體系結(jié)構(gòu))和第8章(子程序)的實例研究中,無處不在的Intel/AMD x86取代了Motorola 68000。第8章里有關(guān)MIPS的實例研究也提升到64位模式。有關(guān)技術(shù)指標(biāo)和趨勢的討論也都做了更新。在一些地方,我重寫了使用語言的例子,采用了一些學(xué)生可能更熟悉的實例。這一過程無疑還將在今后的版本中繼續(xù)進行?! 〉?版里許多章節(jié)做了大量修改,以使之更清晰并更準(zhǔn)確。有關(guān)章節(jié)包括有窮自動機的創(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章的幾乎全部內(nèi)容?! №棧?)反映了Morgan Kaufmann關(guān)于使教科書具有學(xué)生容易接受的價格的承諾。第1版比與之可比的教科書更大而且內(nèi)容更全面,但售價卻更低。第2版用高質(zhì)量的平裝形式保持了可接受的價格(同時減小了體積)。..  最后是項(4),體現(xiàn)在大量表現(xiàn)方式的改變上。其中一些改變很細微,例如給出了更多的小節(jié)標(biāo)題,以及更多歷史事實。更重要的是將本書組織為四個主要部分:  第1部分 包含最基礎(chǔ)的材料:(1)有關(guān)語言設(shè)計和實現(xiàn)的簡介;(2)程序設(shè)計語言的語法;(3)名字、作用域和約束;(4)語義分析;(5)目標(biāo)機體系結(jié)構(gòu)。這里的(2)和 (5)以合理的方式集中關(guān)注實現(xiàn)方面的問題,(1)和(4)涉及面較廣,(3)介紹了語言設(shè)計中的一些核心問題?! 〉?部分 繼續(xù)涵蓋其他的核心問題:(6)控制流;(7)數(shù)據(jù)類型;(8)子程序和控制抽象;(9)數(shù)據(jù)抽象和面向?qū)ο蟆W詈笠徽聫钠湓诘?版里的位置前移了,反映了面向?qū)ο蟪绦蛟O(shè)計在現(xiàn)代計算中的中心地位?! 〉?部分 轉(zhuǎn)向其他程序設(shè)計模型:(10)函數(shù)式語言;(11)邏輯式語言;(12)并發(fā);(13)腳本語言。在第1版里函數(shù)式和邏輯式語言共處一章?! 〉?部分 轉(zhuǎn)向語言的實現(xiàn):(14)構(gòu)造可執(zhí)行程序(代碼生成、匯編和連接);(15)代碼改進(優(yōu)化)?! ∨涮坠獗P  The PLP CD  為了減小本教科書的物理體積,為新材料讓出位置,使學(xué)生可以在瀏覽本書時集中關(guān)注最基本的材料,大約250頁更高級的或者更外圍的材料被放入隨書配套的光盤里。其中的大部分章節(jié)(不是全部)是在第1版中被標(biāo)為高級的或可選的內(nèi)容?! ∑渲凶钪匾淖儎邮菍⒂嘘P(guān)代碼改進的整個第15章移到光盤里,移入的其他材料是一些散布各處的節(jié)或小節(jié)。這樣的每節(jié)都在教科書正文中有所表現(xiàn),有一段關(guān)于相關(guān)論題的簡單介紹,以及一個“深度探索”段落,其中綜述了該處省略的材料?! ≌堊⒁猓堰@些材料放在光盤并不意味著對它們技術(shù)重要性的評價,而只是反映了一個事實:最值得包含的材料已經(jīng)超過了一卷書或者一門課程的容量。我的意圖是把那些大部分課程可能涵蓋的材料放在印刷形式的教科書中?! £P(guān)于設(shè)計和實現(xiàn)的旁白  Design & Implementation Sidebars  本書第1版特別強調(diào)了語言設(shè)計對于實現(xiàn)選擇的影響,以及預(yù)期的實現(xiàn)方式對于語言設(shè)計的影響。第2版用超過120個旁白把這方面的聯(lián)系表現(xiàn)得更清楚了。有關(guān)這種旁白的更多細節(jié)將在第7頁(第1章)說明。附錄B給出了所有旁白的目錄?! 【幪柌⒓訕?biāo)題的實例  Numberde and Titled Examples  第2版中的實例被更明確地編織在討論中。為使讀者更容易找到特定的實例,記住它們的內(nèi)容,并更容易在其他地方引用這些實例,現(xiàn)在每個實例都有一個頁邊注,標(biāo)明其編號和標(biāo)題。全文和配套光盤里大約有900個這樣的實例,附錄C是有關(guān)它們的詳細目錄?! 【毩?xí)的安排  Exercise Plan  第1版包含總共385個復(fù)習(xí)題和312個練習(xí),都放在各章最后。在第2版里,復(fù)習(xí)題被移到各節(jié)的最后,更接近它們所涉及的內(nèi)容,使讀者更容易弄清自己是不是抓住了最重要的概念。復(fù)習(xí)題的數(shù)目大約增加了一倍?! ×?xí)題還是放在各章最后,現(xiàn)在分為練習(xí)和探索兩類。前者傾向于或多或少更加直截了當(dāng)一些,當(dāng)然比每節(jié)最后的復(fù)習(xí)題更有挑戰(zhàn)性。它們適合作為課下作業(yè)或簡單課題。探索中的問題是更開放的,需要做一些基于網(wǎng)絡(luò)或圖書館的研究工作,花費明顯更多的時間;或者是去形成一種客觀的認識。習(xí)題總數(shù)從第1版的略多于300道擴充為這一版的大約500道。對于注冊的教師,可以從密碼保護的網(wǎng)址得到習(xí)題解答(不包括探索題),需要者請訪問www.mkp.com/companions/ 0126339511/?! ∪绾问褂帽緯 ow to Use the Book  《程序設(shè)計語言——實踐之路》涵蓋了計算教程2001報告 [CR01] 中PL“知識單元”的幾乎所有材料。本書特別適合CS 341模塊課程(程序設(shè)計語言設(shè)計),也被用于CS 340(編譯構(gòu)造)或CS 343(程序設(shè)計范型)。它包括了CS 344(函數(shù)式程序設(shè)計)和CS 346(腳本語言)中相當(dāng)大一部分內(nèi)容。圖1給出的是使用本教程的幾條可能路徑?! ∽鳛樽詫W(xué)或者一學(xué)年的課程(圖1里的軌跡F),我建議從頭到尾通讀本書,當(dāng)遇到每個“深度探索”段落時再轉(zhuǎn)到相應(yīng)的光盤內(nèi)容。在羅切斯特大學(xué)作為一學(xué)期的課程時(軌跡R,本書就是為它開發(fā)的),我們也覆蓋了本書的大部分內(nèi)容,但不包括大部分光盤章節(jié)。再去掉自下而上的語法分析(2.3.3節(jié))、消息傳遞(12.4節(jié))、萬維網(wǎng)腳本(13.3節(jié))以及第14章(構(gòu)造可運行程序)的大部分內(nèi)容?! ∮行┱拢ǖ?、4、5、14和15章)比其他的章更著重強調(diào)實現(xiàn)問題。這些章與其他更多關(guān)注語言設(shè)計的章之間的順序可以在一定限度內(nèi)調(diào)整,但一定要保證第5章或者與之相當(dāng)?shù)膬?nèi)容出現(xiàn)在第6到9章之前。許多學(xué)生可能已經(jīng)熟悉了第5章的一些材料,多半是來自一個有關(guān)計算機組織的課程。在這種情況下就可以簡單地跳過這一章,將其作為參考材料。有些學(xué)生可能已經(jīng)熟悉了第2章的一些材料,可能是來自一門有關(guān)自動機的課程。在這種情況下,該章的內(nèi)容可以很快讀過去,只是可能要在某些實際問題上(例如從語法錯誤中恢復(fù),或者實際掃描器與經(jīng)典的有窮自動機的差異方面)多停留一下?! ∪绻糜诟鼈鹘y(tǒng)的程序設(shè)計語言課程(軌跡P),那么可以排除有關(guān)掃描器和語法分析器的內(nèi)容,加上完整的第4、5兩章,還可以減少對其他章節(jié)里與實現(xiàn)有關(guān)的材料的重視程度。在此基礎(chǔ)上可以增加一些光盤內(nèi)容,如ML類型系統(tǒng)(7.2.4節(jié)),多重繼承(9.5節(jié)),Smalltalk(9.6.1節(jié)),lambda演算(10.6節(jié))和謂詞演算(11.3節(jié))?!   D1 課程路線圖。較暗的區(qū)塊表示配套光盤中的“In More Depth”補充內(nèi)容。節(jié)序號表示沒有與補充內(nèi)容對應(yīng)的斷開的部分?! ”緯苍谝恍W(xué)校里被用于有關(guān)編譯器的引論性課程(圖1的軌跡C)。典型的安排是基本去掉第3部分的內(nèi)容(第10到13章),以及通篇中更多強調(diào)設(shè)計的材料。包含所有有關(guān)掃描和語法分析的材料,第14和15章,以及其他光盤材料的某種混合?! τ谀切┎捎?學(xué)季制的學(xué)校,一種常見選擇方案是開一學(xué)期的引論性課程和兩個隨后的選修課程(圖1的軌跡Q)。引論課程可以覆蓋第1、3、6、7章的主要內(nèi)容(不包括光盤材料),再加上第2和8章的前一半。后面一學(xué)季的面向語言的課程可以覆蓋第8章的其余部分,整個第3部分,以及第6到8章的光盤材料。或許再加上一些有關(guān)形式語義學(xué)、類型系統(tǒng)或其他相關(guān)論題的補充材料。后面一學(xué)季的面向編譯器的課程可以包含第2章的其余部分,第4—5章和14—15  章,以及第3章和第8~9章的光盤材料,或許再加上一些有關(guān)自動代碼生成、更富進取性的代碼優(yōu)化、程序設(shè)計工具等等方面的材料?! o論采用哪條路徑學(xué)習(xí)這本教科書,我都假定大多數(shù)讀者已經(jīng)對至少一種高級命令式程序設(shè)計語言有了相當(dāng)?shù)慕?jīng)驗。具體是哪種語言在這里并沒有關(guān)系。書中例子取自各種不同的語言,但總是帶有足夠的注釋和其他討論,使不熟悉該語言的讀者也能比較容易地理解它們。附錄A包含了有關(guān)大約50種語言的簡單介紹。這里的算法都是采用自明的非形式的偽代碼。真正的程序設(shè)計語言代碼用的字體是 "typewriter"字體,偽代碼用的字體是sans-selif字體?! ≥o助材料  Supplemental Materials  除了作為正文章節(jié)的補充外,隨書光盤里還包括一些其他資源:  · 對萬維網(wǎng)上一些語言手冊和教程的鏈接;  · 對一些開源編譯器和解釋器的鏈接;  · 書中所有不那么簡單的實例的完整源代碼(多于300個源文件);  · 對文本內(nèi)容和隨書光盤內(nèi)容的搜索引擎?! ∵M一步的資源在www.mkp.com/companions/0126339511/(你可能需要隨時過去檢查,以保證鏈接正確)。對于采用本書的教師,還通過一個密碼保護的頁面提供了:  · 全書中所有圖形的可編輯的PDF源文件;  · 可編輯的PowerPoint幻燈片;  · 大部分練習(xí)的解答;  · 對于大項目的建議?! 〉?版致謝  Acknowledgments for the Second Edition  在準(zhǔn)備第2版的過程中,我有幸得到了很多人的真誠幫助。許多同行提供了有關(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。裘宗燕做了本書的中文翻譯并在此過程中發(fā)現(xiàn)了一些錯誤。Simon Fillat維護了Morgan Kaufmann的網(wǎng)頁。無疑地我還要感謝列在第1版致謝中的另外許多人,他們作為評閱人、采用者和讀者,為前一版的工作提供了許多幫助并使其成功。他們的貢獻延續(xù)到這一版中?! τ诘?版的工作開始于SIGCSE02的“關(guān)注小組”的認真討論。我特別要感謝Denise Penrose、Emilia Thiuri和Morgan Kaufmann團隊的其他人組織了這次活動,感謝那二十多位出席這次活動并使我能共享他們有關(guān)內(nèi)容和教學(xué)法的意見的同行,以及其他評閱了兩個版本的計劃書的人們?! 〉?版的初稿于2004年秋季在8所大學(xué)做了課堂試驗。我非常感謝Gerald Baumgartner(路易斯安那州立大學(xué))、William Calhoun(Bloomsburg大學(xué))、Betty Cheng(密執(zhí)安州立大學(xué))、Jingke Li(Portland州立大學(xué))、Beverly Sanders(佛羅里達大學(xué))、Darko Stefanovic(新墨西哥大學(xué))、Raymond Toal(Loyola Marymount大學(xué))、Robert van Engelen(佛羅里達州立大學(xué))和他們的學(xué)生提供的大量建議、反映、勘誤和其他反饋。van Engelen教授提供了若干絕好的章末練習(xí)?! 〉?版的外部評閱人提供了大量有益的建議。我要感謝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章的評論特別有幫助,就像他對前一版本的各方面問題提出的評注一樣。我已將其中盡可能多的東西融入這一版本,并認真地保存起剩下的意見,留作第3版的寫作指引。在本版里剩下的問題都應(yīng)該由我本人負責(zé)?! ∵@個版本也于2004年秋季在羅切斯特大學(xué)做了教學(xué)試驗。我要感謝我的學(xué)生,特別是John Heidkamp、David Lu和Dan Mullowney的熱情和建議。Mike Spear對第13章的Web技術(shù)提供了若干有益的建議。在這些年里,我的同事Chen Ding和Sandhya Dwarkadas用第1版授課多次,提出了許多有益的建議。Chen對第15章的建議(也有Yutao Zhong的協(xié)助)特別有價值。我還要感謝我的其他同事,以及系主任Mitsunori Ogihara。感謝系里的管理員、秘書和技術(shù)人員為我提供了這么好的工作環(huán)境。  正如在第1版工作中一樣,Morgan Kaufman出版社的工作人員對此工作真誠投入,包括專業(yè)上的和個人的。我特別感謝出版人Denise Penrose,編輯Nate McFadden,產(chǎn)品編輯Carl Soares,光盤設(shè)計師Peter Ashenden,市場經(jīng)理Brian Grimm和編輯助理Valerie Witte?! ∽钪匾氖呛芨屑の业钠拮覭elly和我們的女兒Erin和Shannon,感謝她們在這看不到盡頭的寫作和修改中的耐心和支持。計算是一種美好的專業(yè),而家庭卻是最要緊的?! icheal L. Scott  Rochester, NY  2005年4月

編輯推薦

  這是一本很有特色的教材,其核心是討論程序設(shè)計語言的工作原理和技術(shù)。本書融合了傳統(tǒng)的程序設(shè)計語言教科書和編譯教科書的有關(guān)知識,并增加了一些有關(guān)匯編層體系結(jié)構(gòu)的材料,以滿足沒學(xué)過計算機組織的學(xué)生們的需要。書中通過各種語言的例子,闡釋了程序設(shè)計語言的重要基礎(chǔ)概念,討論了各種概念之間的關(guān)系,解釋了語言中許多結(jié)構(gòu)的形成和發(fā)展過程,以及它們演化為今天這種形式的根源。書中還詳細討論了編譯器的工作方式和工作過程,說明它們對源程序做了什么,以及為什么要那樣做。書的每章最后附有復(fù)習(xí)題和一些更具挑戰(zhàn)性的練習(xí)。這些練習(xí)的特別價值在于引導(dǎo)學(xué)生進一步深入理解各種語言和技術(shù)。本書第2版新增了腳本語言問題的討論,涵蓋Perl、Python、Ruby、Tcl、PHP、JavaScript、XSLT等和其他語言。    本書在美國大學(xué)已使用了十余年,目前被歐美許多重要大學(xué)用于“程序設(shè)計語言”或者“軟件系統(tǒng)”課程。本書適合高年級本科生或者一年級研究生使用,許多內(nèi)容對專業(yè)程序員也很有價值。本書作者Michael L.Scott 是計算機領(lǐng)域的著名學(xué)者,譯者是北京大學(xué)的裘宗燕教授,他熟悉專業(yè),譯筆流暢,因此,這是一本難得的著、譯雙馨的佳作。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    程序設(shè)計語言 PDF格式下載


用戶評論 (總計0條)

 
 

 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7