本書從為什么學(xué)習(xí)程序設(shè)計語言、常用程序設(shè)計語言的演化史、評估程序設(shè)計語言結(jié)構(gòu)的標(biāo)準(zhǔn),以及這些語言基本的實現(xiàn)方法開始講起,通過不局限于特定語言種類地分析語言結(jié)構(gòu)的設(shè)計問題,檢測設(shè)計選擇,以及比較設(shè)計可選方案來講述程序設(shè)計語言基本原理。
第12版的更新
本書第12版的目標(biāo)、總體結(jié)構(gòu)以及方法與之前的11個版本相同。個目標(biāo)是介紹現(xiàn)代程序設(shè)計語言的基本結(jié)構(gòu),并為讀者提供對現(xiàn)有以及未來的程序設(shè)計語言進(jìn)行嚴(yán)格評估的工具。第二個目標(biāo)是幫助讀者做好學(xué)習(xí)編譯器設(shè)計的準(zhǔn)備,為此,本書深入討論了程序設(shè)計語言的結(jié)構(gòu),展示了描述語法的形式化方法,并介紹了詞法和語法分析的方法。
與第11版相比,第12版有若干變化。為了保持本書內(nèi)容不落伍,對于某些程序設(shè)計語言(尤其是Lua和Objective-C)的討論,本版本幾乎全部刪除,而有關(guān)較新的程序設(shè)計語言Swift的內(nèi)容則被分別增加到若干章中。
此外,在第6章中新增一節(jié)介紹可選類型。在8.3.4節(jié)中增加了一些介紹Python中的迭代器的內(nèi)容。書中還有多處小改動,以對一些討論內(nèi)容進(jìn)行糾正和澄清。
愿景
本書主要描述程序設(shè)計語言的基本概念。為此,主要討論各種語言結(jié)構(gòu)的設(shè)計問題,研究一些常見的語言在結(jié)構(gòu)上的設(shè)計選擇,并對備選設(shè)計方案進(jìn)行嚴(yán)格的比較。
對程序設(shè)計語言進(jìn)行的任何細(xì)致研究都無法脫離一些相關(guān)的主題,包括描述程序設(shè)計語言語法和語義的形式化方法,第3章將介紹這些方法。此外,還必須考慮各種語言結(jié)構(gòu)的實現(xiàn)技術(shù),第4章將討論詞法和語法分析,第10章將介紹子程序鏈接的實現(xiàn)。本書還將討論一些其他語言結(jié)構(gòu)的實現(xiàn)技術(shù)。
以下各段將概述第12版內(nèi)容。
章節(jié)概述
第1章首先介紹程序設(shè)計語言的基本原理,然后討論用于評價程序設(shè)計語言和語言結(jié)構(gòu)的標(biāo)準(zhǔn),同時,分析影響語言設(shè)計的主要因素、語言設(shè)計中的權(quán)衡以及語言實現(xiàn)的基本方法。
第2章概述本書所討論的語言的發(fā)展過程。雖然沒有完整地描述任何一種語言,但是對每種語言的起源、目的和貢獻(xiàn)都會進(jìn)行討論。這樣的歷史回顧是很有價值的,因為它為我們理解當(dāng)代語言設(shè)計的實踐和理論基礎(chǔ)提供了必要的背景。這也推動了對語言設(shè)計與評價的進(jìn)一步研究。因為這本書的其余部分都不依賴于第2章,所以這一章可以獨(dú)立于其他章節(jié)單獨(dú)閱讀。
第3章先介紹用于描述程序設(shè)計語言的BNF范式的主要形式化方法。接下來討論用于描述語言的語法和靜態(tài)語義的屬性文法。然后探討語義描述的難點,并對三種常見的語義方法(操作語義、指稱語義和公理語義)進(jìn)行簡要介紹。
第4章介紹詞法分析和語法分析。這一章主要面向那些不設(shè)置編譯器設(shè)計課程的計算機(jī)科學(xué)院系。與第2章類似,這一章獨(dú)立于除第3章之外的所有部分。這意味著這一章也可以獨(dú)立于其他章節(jié)單獨(dú)閱讀。
第5~14章詳細(xì)描述程序設(shè)計語言中主要結(jié)構(gòu)的設(shè)計問題。對于每一種語言結(jié)構(gòu),都將講述幾種示例語言的設(shè)計選擇并對其進(jìn)行評估。具體來說,第5章介紹變量的一些特性,第6章介紹數(shù)據(jù)類型,第7章解釋表達(dá)式和賦值語句,第8章描述控制語句,第9章和第10章討論子程序及其實現(xiàn),第11章研究數(shù)據(jù)抽象機(jī)制,第12章深入討論支持面向?qū)ο蟪绦蛟O(shè)計的語言特性(繼承和動態(tài)方法綁定),第13章討論并發(fā)程序單元,第14章討論異常處理,并簡要討論事件處理。
第15章和第16章描述兩種重要程序設(shè)計泛型:函數(shù)式程序設(shè)計與邏輯程序設(shè)計。注意,第6章和第8章已經(jīng)討論過函數(shù)式程序設(shè)計語言的某些數(shù)據(jù)結(jié)構(gòu)和控制構(gòu)造。第15章介紹Scheme,包括它的一些基本函數(shù)、特殊形式、函數(shù)形式,以及一些使用Scheme語言編寫的簡單函數(shù)示例。此外,還簡要介紹ML、Haskell和F#,以說明函數(shù)式程序設(shè)計的一些不同方向。第16章介紹邏輯程序設(shè)計以及邏輯程序設(shè)計語言Prolog。
致授課教師
一般應(yīng)詳細(xì)講解第1章和第3章。對于第2章,盡管學(xué)生們會認(rèn)為其內(nèi)容很有趣且閱讀起來很輕松,但由于缺乏嚴(yán)格的技術(shù)內(nèi)容,我們不建議為其安排比較多的課時。如前所述,由于后續(xù)各章中的內(nèi)容都不依賴于第2章,因此可以跳過該章。如果單獨(dú)設(shè)置了編譯器設(shè)計課程,那么也不需要講授第4章。
對于那些具有較為豐富的C 、Java或C#編程經(jīng)驗的學(xué)生來說,第5~9章學(xué)習(xí)起來應(yīng)該相對容易,而第10~14章的內(nèi)容更具挑戰(zhàn)性,因此需要更加詳細(xì)地講授。
第15章和第16章對于大多數(shù)低年級學(xué)生來說是全新的內(nèi)容。在理想情況下,應(yīng)該為需要學(xué)習(xí)這些內(nèi)容的學(xué)生提供Scheme和Prolog的語言處理器。使用充足的學(xué)習(xí)材料可以讓學(xué)生學(xué)習(xí)程序設(shè)計簡單一些。
面向本科生開設(shè)的課程可能無法涵蓋本書后兩章中的所有內(nèi)容,但面向研究生開設(shè)的課程應(yīng)該能夠跳過前面幾章中有關(guān)命令式程序設(shè)計語言的內(nèi)容,這樣就能有足夠的課時來討論后兩章中的內(nèi)容。
補(bǔ)充材料
讀者可以訪問本書的配套網(wǎng)站www.pearson.com/cs-resources來獲取一些補(bǔ)充材料,包括:
一套講義幻燈片。書中的每一章都有配套的幻燈片。
本書中的所有圖片。
幾種程序設(shè)計語言的迷你手冊(約100頁的教程)。
可供使用的語言處理器
本書所討論的某些程序設(shè)計語言的處理器以及相關(guān)信息可在以下網(wǎng)站找到:
C、C 、Fortran和Ada gcc.gnu.org
C#和F# microsoft.com
Java java.sun.com
Haskell haskell.org
Scheme www.plt-scheme.org/software/drscheme
Perl www.perl.com
Python
羅伯特·W. 塞巴斯塔(Robert W. Sebesta) 科羅拉多大學(xué)斯普林斯分校計算機(jī)科學(xué)系榮休副教授,擁有40多年計算機(jī)科學(xué)課程教學(xué)經(jīng)驗,研究興趣包括程序設(shè)計語言的設(shè)計和評估以及Web程序設(shè)計。
譯者序
第12版的變化
前言
致謝
第1章 預(yù)備知識1
1.1 掌握程序設(shè)計語言概念的必要性1
1.2 程序設(shè)計領(lǐng)域3
1.2.1 科學(xué)計算應(yīng)用3
1.2.2 商業(yè)應(yīng)用3
1.2.3 人工智能4
1.2.4 Web軟件4
1.3 語言評價標(biāo)準(zhǔn)4
1.3.1 可讀性5
1.3.2 可寫性9
1.3.3 可靠性9
1.3.4 成本10
1.4 影響語言設(shè)計的因素11
1.4.1 計算機(jī)體系結(jié)構(gòu)11
1.4.2 程序設(shè)計方法學(xué)13
1.5 程序設(shè)計語言分類14
1.6 語言設(shè)計中的權(quán)衡14
1.7 實現(xiàn)方法15
1.7.1 編譯16
1.7.2 純解釋18
1.7.3 混合實現(xiàn)系統(tǒng)19
1.7.4 預(yù)處理程序19
1.8 程序設(shè)計環(huán)境20
小結(jié)20
復(fù)習(xí)題21
習(xí)題21
第2章 主要程序設(shè)計語言發(fā)展簡史23
2.1 Zuse研制的Plankalkl語言23
2.1.1 歷史背景23
2.1.2 語言概述25
2.2 偽代碼25
2.2.1 短碼26
2.2.2 快碼26
2.2.3 UNIVAC編譯系統(tǒng)27
2.2.4 相關(guān)工作27
2.3 IBM 704和Fortran27
2.3.1 歷史背景27
2.3.2 設(shè)計過程28
2.3.3 Fortran I概述28
2.3.4 Fortran II29
2.3.5 Fortran IV、77、90、95、2003和200829
2.3.6 評價30
2.4 函數(shù)式程序設(shè)計語言:LISP31
2.4.1 人工智能的開端和列表處理31
2.4.2 LISP的設(shè)計過程32
2.4.3 語言概述32
2.4.4 評價33
2.4.5 LISP的兩種后繼語言34
2.4.6 相關(guān)語言34
2.5 邁向成熟的步:ALGOL 6035
2.5.1 歷史背景35
2.5.2 早期設(shè)計過程35
2.5.3 ALGOL 58概述36
2.5.4 ALGOL 58報告的接受度37
2.5.5 ALGOL 60的設(shè)計過程37
2.5.6 ALGOL 60概述37
2.5.7 評價38
2.6 商業(yè)處理語言:COBOL39
2.6.1 歷史背景39
2.6.2 FLOW-MATIC40
2.6.3 COBOL的設(shè)計過程40
2.6.4 評價40
2.7 分時處理的開始:Basic42
2.7.1 設(shè)計過程43
2.7.2 語言概述43
2.7.3 評價43
2.8 滿足所有人的需求:PL/I46
2.8.1 歷史背景47
2.8.2 設(shè)計過程47
2.8.3 語言概述48
2.8.4 評價48
2.9 兩種早期的動態(tài)語言:APL和SNOBOL49
2.9.1 APL的起源及特征49
2.9.2 SNOBOL的起源和特征50
2.10 數(shù)據(jù)抽象的開端:SIMULA 6750
2.10.1 設(shè)計過程50
2.10.2 語言概述50
2.11 正交設(shè)計:ALGOL 6850
2.11.1 設(shè)計過程51
2.11.2 語言概述51
2.11.3 評價51
2.12 ALGOL系列語言的早期繼承者52
2.12.1 簡潔的設(shè)計:Pascal52
2.12.2 一個輕便的系統(tǒng)語言:C53
2.13 基于邏輯的程序設(shè)計:Prolog55
2.13.1 設(shè)計過程55
2.13.2 語言概述55
2.13.3 評價56
2.14 歷史上規(guī)模的語言設(shè)計:Ada56
2.14.1 歷史背景56
2.14.2 設(shè)計過程56
2.14.3 語言概述57
2.14.4 評價58
2.14.5 Ada 95和Ada 200558
2.15 面向?qū)ο蟪绦蛟O(shè)計:Smalltalk59
2.15.1 設(shè)計過程59
2.15.2 語言概述60
2.15.3 評價60
2.16 結(jié)合命令式和面向?qū)ο蟮奶匦裕篊 61
2.16.1 設(shè)計過程61
2.16.2 語言概述62
2.16.3 評價62
2.16.4 Swift:Objective-C的替代品62
2.16.5 另一個相關(guān)語言:Delphi63
2.17 基于命令式的面向?qū)ο笳Z言:Java63
2.17.1 設(shè)計過程63
2.17.2 語言概述64
2.17.3 評價65
2.18 腳本語言66
2.18.1 Perl的起源與特點66
2.18.2 JavaScript的起源與特點67
2.18.3 PHP的起源與特點69
2.18.4 Python的起源與特點69
2.18.5 Ruby的起源與特點70
2.19 .NET旗幟語言:C#70
2.19.1 設(shè)計過程70
2.19.2 語言概述71
2.19.3 評價71
2.20 混合標(biāo)記程序設(shè)計語言72
2.20.1 XSLT72
2.20.2 JSP73
小結(jié)74
文獻(xiàn)注記74
復(fù)習(xí)題74
習(xí)題76
程序設(shè)計練習(xí)76
第3章 語法和語義描述77
3.1 概述77
3.2 語法描述的一般問題78
3.2.1 語言識別器78
3.2.2 語言生成器79
3.3 語法描述的形式化方法79
3.3.1 Backus-Naur范式與上下文無關(guān)文法79
3.3.2 擴(kuò)展的BNF范式88
3.3.3 文法和識別器90
3.4 屬性文法90
3.4.1 靜態(tài)語義90
3.4.2 基本概念91
3.4.3 屬性文法的定義91
3.4.4 內(nèi)在屬性91
3.4.5 屬性文法示例91
3.4.6 計算屬性值93
3.4.7 評價94
3.5 描述程序的含義:動態(tài)語義94
3.5.1 操作語義95
3.5.2 指稱語義97
3.5.3 公理語義100
小結(jié)110
文獻(xiàn)注記110
復(fù)習(xí)題110
習(xí)題111
第4章 詞法和語法分析115
4.1 概述115
4.2 詞法分析116
4.3 語法分析問題122
4.3.1 語法分析基礎(chǔ)122
4.3.2 自頂向下的語法分析器123
4.3.3 自底向上的語法分析器124
4.3.4 語法分析的復(fù)雜度124
4.4 遞歸下降的語法分析124
4.4.1 遞歸下降的語法分析過程124
4.4.2 LL文法類129
4.5 自底向上的語法分析131
4.5.1 自底向上的語法分析器的語法分析問題131
4.5.2 移進(jìn)-歸約算法133
4.5.3 LR語法分析器133
小結(jié)137
復(fù)習(xí)題138
習(xí)題138
程序設(shè)計練習(xí)139
第5章 名字、綁定與作用域140
5.1 概述140
5.2 名字140
5.2.1 設(shè)計問題140
5.2.2 名字形式141
5.2.3 特殊單詞141
5.3 變量142
5.3.1 名字142
5.3.2 地址142
5.3.3 類型143
5.3.4 值143
5.4 綁定的概念143
5.4.1 屬性到變量的綁定144
5.4.2 綁定類型144
5.4.3 存儲綁定和生存期147
5.5 作用域149
5.5.1 靜態(tài)作用域149
5.5.2 分程序150
5.5.3 聲明順序153
5.5.4 全局作用域153
5.5.5 對靜態(tài)作用域的評價156
5.5.6 動態(tài)作用域156
5.5.7 對動態(tài)作用域的評價157
5.6 作用域和生存期157
5.7 引用環(huán)境158
5.8 有名常量159
小結(jié)161
復(fù)習(xí)題161
習(xí)題162
程序設(shè)計練習(xí)165
第6章 數(shù)據(jù)類型167
6.1 概述167
6.2 基本數(shù)據(jù)類型168
6.2.1 數(shù)值類型168
6.2.2 布爾類型170
6.2.3 字符類型171
6.3 字符串類型171
6.3.1 設(shè)計問題171
6.3.2 字符串及其運(yùn)算171
6.3.3 字符串長度選項173
6.3.4 評價173
6.3.5 字符串類型的實現(xiàn)174
6.4 枚舉類型175
6.4.1 設(shè)計問題175
6.4.2 設(shè)計175
6.4.3 評價176
6.5 數(shù)組類型177
6.5.1 設(shè)計問題177
6.5.2 數(shù)組和索引178
6.5.3 下標(biāo)綁定和數(shù)組的種類179
6.5.4 數(shù)組初始化180
6.5.5 數(shù)組運(yùn)算181
6.5.6 矩陣數(shù)組和鋸齒形數(shù)組182
6.5.7 切片182
6.5.8 評價183
6.5.9 數(shù)組類型的實現(xiàn)183
6.6 關(guān)聯(lián)數(shù)組185
6.6.1 結(jié)構(gòu)與運(yùn)算185
6.6.2 關(guān)聯(lián)數(shù)組的實現(xiàn)186
6.7 記錄類型186
6.7.1 記錄的定義187
6.7.2 記錄中字段的引用187
6.7.3 評價188
6.7.4 記錄類型的實現(xiàn)188
6.8 元組類型189
6.9 列表類型190
6.10 聯(lián)合類型192
6.10.1 設(shè)計問題192
6.10.2 判別式與自由聯(lián)合類型192
6.10.3 F#的聯(lián)合類型193
6.10.4 評價193
6.10.5 聯(lián)合類型的實現(xiàn)194
6.11 指針和引用類型194
6.11.1 設(shè)計問題194
6.11.2 指針運(yùn)算194
6.11.3 指針的相關(guān)問題195
6.11.4 C和C 中的指針196
6.11.5 引用類型198
6.11.6 評價199
6.11.7 指針和引用類型的實現(xiàn)199
6.12 可選類型203
6.13 類型檢查203
6.14 強(qiáng)類型204
6.15 類型等價205
6.16 理論和數(shù)據(jù)類型208
小結(jié)209
文獻(xiàn)注記210
復(fù)習(xí)題210
習(xí)題211
程序設(shè)計練習(xí)212
第7章 表達(dá)式與賦值語句214
7.1 概述214
7.2 算術(shù)表達(dá)式214
7.2.1 運(yùn)算符求值順序215
7.2.2 運(yùn)算分量求值順序219
7.3 重載運(yùn)算符221
7.4 類型轉(zhuǎn)換222
7.4.1 表達(dá)式中的強(qiáng)制轉(zhuǎn)換222
7.4.2 顯式類型轉(zhuǎn)換223
7.4.3 表達(dá)式錯誤224
7.5 關(guān)系表達(dá)式和布爾表達(dá)式224
7.5.1 關(guān)系表達(dá)式224
7.5.2 布爾表達(dá)式225
7.6 短路求值226
7.7 賦值語句227
7.7.1 簡單賦值227
7.7.2 條件賦值227
7.7.3 復(fù)合賦值運(yùn)算符227
7.7.4 一元賦值運(yùn)算符228
7.7.5 賦值表達(dá)式229
7.7.6 多重賦值229
7.7.7 函數(shù)式程序設(shè)計語言中的賦值230
7.8 混合方式賦值230
小結(jié)231
復(fù)習(xí)題231
習(xí)題232
程序設(shè)計練習(xí)233
第8章 語句級控制結(jié)構(gòu)234
8.1 概述234
8.2 選擇語句235
8.2.1 二路選擇語句235
8.2.2 多路選擇語句238
8.3 重復(fù)語句244
8.3.1 計數(shù)控制循環(huán)245
8.3.2 邏輯控制循環(huán)248
8.3.3 用戶定義的循環(huán)控制機(jī)制249
8.3.4 基于數(shù)據(jù)結(jié)構(gòu)的迭代250
8.4 無條件分支253
8.5 保護(hù)命令254
8.6 結(jié)論256
小結(jié)256
復(fù)習(xí)題257
習(xí)題257
程序設(shè)計練習(xí)258
第9章 子程序260
9.1 概述260
9.2 子程序基礎(chǔ)260
9.2.1 子程序的一般性質(zhì)260
9.2.2 基本定義260
9.2.3 參數(shù)262
9.2.4 過程與函數(shù)265
9.3 子程序的設(shè)計問題265
9.4 局部引用環(huán)境266
9.4.1 局部變量266
9.4.2 嵌套子程序267
9.5 參數(shù)傳遞方法267
9.5.1 參數(shù)傳遞的語義模型268
9.5.2 參數(shù)傳遞的實現(xiàn)模型268
9.5.3 參數(shù)傳遞方法的實現(xiàn)272
9.5.4 常用語言的參數(shù)傳遞方法272
9.5.5 參數(shù)類型檢查274
9.5.6 多維數(shù)組參數(shù)276
9.5.7 設(shè)計考量277
9.5.8 參數(shù)傳遞實例277
9.6 子程序作為參數(shù)280
9.7 子程序間接調(diào)用281
9.8 函數(shù)設(shè)計問題282
9.8.1 函數(shù)的副作用283
9.8.2 返回值類型283
9.8.3 返回值的個數(shù)283
9.9 重載子程序283
9.10 泛型子程序284
9.10.1 C 泛型函數(shù)285
9.10.2 Java 5.0泛型方法286
9.10.3 C# 2005泛型方法287
9.10.4 F#泛型函數(shù)288
9.11 用戶定義的重載運(yùn)算符288
9.12 閉包289
9.13 協(xié)同程序290
小結(jié)292
復(fù)習(xí)題293
習(xí)題294
程序設(shè)計練習(xí)295
第10章 子程序?qū)崿F(xiàn)297
10.1 調(diào)用和返回的一般語義297
10.2 簡單子程序的實現(xiàn)297
10.3 具有棧動態(tài)局部變量的子程序?qū)崿F(xiàn)299
10.3.1 更復(fù)雜的活動記錄299
10.3.2 不含遞歸的例子301
10.3.3 遞歸302
10.4 嵌套子程序304
10.4.1 基礎(chǔ)304
10.4.2 靜態(tài)鏈305
10.5 分程序309
10.6 動態(tài)作用域的實現(xiàn)310
10.6.1 深層訪問310
10.6.2 淺層訪問311
小結(jié)312
復(fù)習(xí)題312
習(xí)題313
程序設(shè)計練習(xí)315
第11章 抽象數(shù)據(jù)類型與封裝結(jié)構(gòu)316
11.1 抽象的概念316
11.2 數(shù)據(jù)抽象簡介317
11.2.1 浮點型抽象數(shù)據(jù)類型317
11.2.2 用戶自定義抽象數(shù)據(jù)類型317
11.2.3 示例318
11.3 抽象數(shù)據(jù)類型的設(shè)計問題319
11.4 語言示例319
11.4.1 C 中的抽象數(shù)據(jù)類型320
11.4.2 Java中的抽象數(shù)據(jù)類型325
11.4.3 C#中的抽象數(shù)據(jù)類型326
11.4.4 Ruby中的抽象數(shù)據(jù)類型327
11.5 參數(shù)化抽象數(shù)據(jù)類型330
11.5.1 C 330
11.5.2 Java 5.0331
11.5.3 C# 2005333
11.6 封裝結(jié)構(gòu)333
11.6.1 概述334
11.6.2 C中的封裝334
11.6.3 C 中的封裝334
11.6.4 C#程序集335
11.7 命名封裝336
11.7.1 C 命名空間336
11.7.2 Java包337
11.7.3 Ruby模塊338
小結(jié)338
復(fù)習(xí)題339
習(xí)題340
程序設(shè)計練習(xí)340
第12章 面向?qū)ο蟪绦蛟O(shè)計支持342
12.1 概述342
12.2 面向?qū)ο蟪绦蛟O(shè)計342
12.2.1 引言342
12.2.2 繼承343
12.2.3 動態(tài)綁定344
12.3 面向?qū)ο笳Z言的設(shè)計問題346
12.3.1 對象的排他性346
12.3.2 子類是否為子類型346
12.3.3 單繼承與多繼承347
12.3.4 對象的分配和釋放347
12.3.5 動態(tài)綁定與靜態(tài)綁定348
12.3.6 嵌套類348
12.3.7 對象的初始化349
12.4 支持面向?qū)ο蟪绦蛟O(shè)計的特定語言349
12.4.1 Smalltalk349
12.4.2 C 350
12.4.3 Java359
12.4.4 C#362
12.4.5 Ruby363
12.5 面向?qū)ο蠼Y(jié)構(gòu)的實現(xiàn)366
12.5.1 存儲示例數(shù)據(jù)366
12.5.2 方法調(diào)用與方法的動態(tài)綁定366
12.6 反射368
12.6.1 概述368
12.6.2 什么是反射368
12.6.3 Java中的反射369
12.6.4 C#中的反射371
小結(jié)372
復(fù)習(xí)題373
習(xí)題375
程序設(shè)計練習(xí)375
第13章 并發(fā)376
13.1 概述376
13.1.1 多處理器體系結(jié)構(gòu)377
13.1.2 并發(fā)的分類378
13.1.3 使用并發(fā)的動機(jī)378
13.2 子程序級并發(fā)379
13.2.1 基本概念379
13.2.2 并發(fā)語言設(shè)計382
13.2.3 設(shè)計問題382
13.3 信號量382
13.3.1 概述382
13.3.2 合作同步383
13.3.3 競爭同步385
13.3.4 評價386
13.4 管程386
13.4.1 概述386
13.4.2 競爭同步386
13.4.3 合作同步386
13.4.4 評價387
13.5 消息傳遞387
13.5.1 概述387
13.5.2 同步消息傳遞的概念388
13.6 Ada并發(fā)支持388
13.6.1 基本概念388
13.6.2 合作同步391
13.6.3 競爭同步392
13.6.4 受保護(hù)對象393
13.6.5 評價394
13.7 Java線程394
13.7.1 線程類395
13.7.2 優(yōu)先級397
13.7.3 信號量397
13.7.4 競爭同步397
13.7.5 合作同步398
13.7.6 非阻塞同步401
13.7.7 顯式鎖401
13.7.8 評價402
13.8 C#線程402
13.8.1 基本線程操作402
13.8.2 同步線程404
13.8.3 評價405
13.9 函數(shù)式語言中的并發(fā)405
13.9.1 Multi-LISP405
13.9.2 并發(fā)ML406
13.9.3 F#406
13.10 語句級并發(fā)407
13.10.1 高性能Fortran407
小結(jié)409
文獻(xiàn)注記410
復(fù)習(xí)題410
習(xí)題411
程序設(shè)計練習(xí)412
第14章 異常處理和事件處理413
14.1 異常處理概述413
14.1.1 基本概念414
14.1.2 設(shè)計問題415
14.2 C 異常處理417
14.2.1 異常處理程序417
14.2.2 異常綁定到處理程序418
14.2.3 延續(xù)418
14.2.4 其他設(shè)計選擇418
14.2.5 示例419
14.2.6 評價420
14.3 Java異常處理420
14.3.1 異常類別421
14.3.2 異常處理程序421
14.3.3 異常綁定到處理程序421
14.3.4 其他設(shè)計選擇422
14.3.5 示例423
14.3.6 finally子句424
14.3.7 斷言425
14.3.8 評價425
14.4 Python和Ruby的異常處理426
14.4.1 Python426
14.4.2 Ruby427
14.5 事件處理概述428
14.6 J