D程式設計語言

內容介紹

D語言是一種通用的系統和套用程式語言,它保持了生成高效代碼以及直接訪問作業系統API和硬體的能力。《D程式設計語言》是一本介紹D語言的權威書籍,全面、系統、專業地講解了D語言相關的內容。書中涵蓋了D語言的方方面面,不但介紹了語言的表達式、語句、類型、函式、契約、模組、類和結構等基本內容,還通過常見示例,深入解釋了所有語言特性,講解了如何將語言特性進行組合以支持重要的編程范型,闡述了每一項主要特性的基本原理,對它們的最佳用途給出了建議,並對跨領域的問題(如錯誤處理、契約編程和並發性)進行了討論。此外,書中還通過大量的圖表,為使用D語言解決日常問題提供了快速參考。其細緻入微的講解讓人幾乎覺得有些“囉嗦”,但正是這些“囉嗦”內容更能加深人們對D語言程式設計的理解,進而拓展到對一般意義上的程式語言程式設計的理解。
《D程式設計語言》不僅適合於D語言初學者,對於想學習編譯器實現的研究人員、想拓展學生的程式語言知識面的教師以及想深入了解程式語言設計的人,也能提供很好的幫助和指導。

作者介紹

Andrei Alexandrescu
世界頂尖的C++專家,2001年撰寫了經典名著《C++設計新思維》(Modern C++ Design),曾榮獲2001年最佳C++圖書稱號,書中所開發的Loki已經成為最負盛名的C++程式庫之一。他被認為是新一代C++的代表人物,因為對Template技術的精湛運用,震撼了整個C++社群,開闢了C++編程領域的“Modern C++”新時代。他還與Herb Sutter合著了《C++編程規範》(C++ Coding Standards)。他花了8年的時間攻讀機器學習方面的博士學位,專門研究部分自然語言處理結構。自2006年開始,他與D語言的最初設計者及實現者Walter Bright緊密合作,設計和實現D語言及其標準庫,他是D語言很多特性的設計者,也是大多數D語言標準庫的作者。Andrei Alexandrescu在工業界和學術界都有很高的聲譽。現為Facebook研究員。

作品目錄

第1章 進入D世界 1
1.1 數字與表達式 2
1.2 語句 4
1.3 函式基礎 5
1.4 數組與關聯數組 6
1.4.1 構建辭彙表 6
1.4.2 數組分割、泛型函式、單元測試 8
1.4.3 頻率統計、λ函式 9
1.5 基本數據結構 11
1.6 接口和類 15
1.7 值與引用 19
1.8 小結 20
第2章 基本類型、表達式 21
2.1 符號 22
2.2 字面量 23
2.2.1 布爾字面量 23
2.2.2 整數字面量 23
2.2.3 浮點數字面量 24
2.2.4 字元字面量 26
2.2.5 字元串字面量 26
2.2.6 數組與關聯數組字面量 29
2.2.7 函式字面量 30
2.3 操作符 31
2.3.1 左值和右值 31
2.3.2 隱式數值轉換 31
2.3.3 數值操作符的類型 34
2.3.4 基本表達式 34
2.3.5 後綴表達式 37
2.3.6 一元表達式 38
2.3.7 冪表達式 41
2.3.8 乘法表達式 41
2.3.9 加法表達式 41
2.3.10 移位表達式 41
2.3.11 in表達式 42
2.3.12 比較操作符 43
2.3.13 按位操作符 44
2.3.14 邏輯與 45
2.3.15 邏輯或 45
2.3.16 條件操作符 45
2.3.17 賦值表達式 46
2.3.18 逗號表達式 46
2.4 小結和快速參考 46
第3章 語句 49
3.1 表達式語句 49
3.2 複合語句 50
3.3 if語句 50
3.4 static if語句 51
3.5 switch語句 53
3.6 final switch語句 54
3.7 循環語句 55
3.7.1 while語句 55
3.7.2 do-while語句 55
3.7.3 for語句 55
3.7.4 foreach語句 56
3.7.5 數組foreach 57
3.7.6 continue語句和break語句 58
3.8 goto語句 59
3.9 with語句 60
3.10 return語句 61
3.11 throw語句和try語句 61
3.12 mixin語句 62
3.13 scope語句 63
3.14 synchronized語句 66
3.15 asm語句 67
3.16 小結和快速參考 67
第4章 數組、關聯數組和字元串 70
4.1 動態數組 70
4.1.1 長度 71
4.1.2 邊界檢查 72
4.1.3 分割 73
4.1.4 複製 73
4.1.5 相等性比較 74
4.1.6 拼接 75
4.1.7 數組表達式 75
4.1.8 收縮 76
4.1.9 擴張 77
4.1.10 對.length賦值 79
4.2 固定大小的數組 80
4.2.1 長度 81
4.2.2 邊界檢查 81
4.2.3 分割 81
4.2.4 複製和隱式轉換 82
4.2.5 相等性比較 82
4.2.6 拼接 83
4.2.7 數組運算 83
4.3 多維數組 83
4.4 關聯數組 85
4.4.1 長度 85
4.4.2 讀寫槽 86
4.4.3 複製 86
4.4.4 相等性比較 86
4.4.5 移除元素 87
4.4.6 疊代 87
4.4.7 將自定義類型作為鍵 88
4.5 字元串 88
4.5.1 代碼點 88
4.5.2 編碼 89
4.5.3 字元類型 90
4.5.4 字元數組 + 優勢 = 字元串 91
4.6 數組的遠房表親:指針 93
4.7 小結和快速參考 95
第5章 數據與函式、函式式 98
5.1 編寫一個簡單函式並進行單元測試 98
5.2 傳遞約定和存儲類別 100
5.2.1 ref參數與返回 101
5.2.2 in參數 102
5.2.3 out參數 102
5.2.4 static數據 103
5.3 類型參數 103
5.4 簽名約束 105
5.5 重載 106
5.5.1 偏序函式 108
5.5.2 跨模組重載 110
5.6 高階函式、函式字面量 111
5.7 嵌套函式 113
5.8 閉包 114
5.9 超越數組、範圍、偽成員 116
5.9.1 偽成員和@property屬性 117
5.9.2 reduce——不只是證法 119
5.10 可變參數函式 120
5.10.1 同構可變參數函式 120
5.10.2 異構可變參數函式 121
5.11 函式屬性 124
5.11.1 純函式 124
5.11.2 函式屬性nothrow 127
5.12 編譯時計算 127
第6章 類、面向對象風格 132
6.1 類 132
6.2 對象名就是引用 133
6.3 對象的生命周期 136
6.3.1 構造函式 137
6.3.2 轉發構造函式 138
6.3.3 構造步驟 139
6.3.4 析構與解除分配 140
6.3.5 拆毀步驟 141
6.3.6 靜態的構造函式與析構函式 142
6.4 方法和繼承 143
6.4.1 術語大雜燴 144
6.4.2 繼承就是子類型化,靜態類型和動態類型 145
6.4.3 改寫只能是自願的 146
6.4.4 調用被改寫的方法 147
6.4.5 協變返回類型 148
6.5 靜態成員的類級封裝 149
6.6 使用final方法來限制擴展性 149
6.7 封裝 151
6.7.1 private 152
6.7.2 package 152
6.7.3 protected 152
6.7.4 public 152
6.7.5 export 153
6.7.6 封裝到什麼程度 153
6.8 一統天下的根類 155
6.8.1 string toString() 156
6.8.2 size_t toHash() 156
6.8.3 bool opEquals(Object rhs) 156
6.8.4 int opC mp(Object rhs) 159
6.8.5 static Object factory(string className) 160
6.9 接口 161
6.9.1 非虛接口(NVI)慣用法 162
6.9.2 protected原語 164
6.9.3 選擇性實現 165
6.10 抽象類 166
6.11 嵌套類 168
6.11.1 函式嵌套類 170
6.11.2 靜態嵌套類 171
6.11.3 匿名類 172
6.12 多重繼承 172
6.13 多重子類型化 175
6.14 參數化的類和接口 177
6.15 小結 180
第7章 其他自定義類型 181
7.1 結構 182
7.1.1 複製語義 183
7.1.2 將結構對象傳遞給函式 184
7.1.3 結構對象的生命周期 184
7.1.4 靜態構造函式和析構函式 192
7.1.5 方法 193
7.1.6 靜態成員 197
7.1.7 訪問指示符 197
7.1.8 嵌套結構和類 198
7.1.9 在函式內部嵌套結構 199
7.1.10 結構子類型化與@disable屬性 199
7.1.11 欄位布局與對齊 202
7.2 聯合 204
7.3 枚舉值 206
7.3.1 枚舉類型 208
7.3.2 枚舉特性 208
7.4 別名 209
7.5 使用模板實現參數化作用域 211
7.6 使用mixin模板注入代碼 214
7.7 小結與參考 216
第8章 類型修飾符 217
8.1 immutable修飾符 218
8.2 immutable的書寫 220
8.3 immutable參數和方法 221
8.4 immutable構造函式 222
8.5 immutable相關的轉換 223
8.6 const修飾符 225
8.7 const與immutable進行互動 226
8.8 將修飾符從參數傳送至結果 226
8.9 小結 227
第9章 錯誤處理 229
9.1 拋出與捕捉 229
9.2 類型 230
9.3 finally子句 232
9.4 nothrow函式和Throwable的特殊本質 233
9.5 附屬異常 234
9.6 棧展開與異常安全代碼 235
9.7 未捕捉的異常 237
第10章 契約編程 238
10.1 契約 239
10.2 斷言 240
10.3 前置條件 241
10.4 後置條件 243
10.5 不變數 244
10.6 跳過契約檢查與發行版本 246
10.6.1 enforce不(完全)是assert 247
10.6.2 assert(false) 248
10.7 契約:請不要用於洗滌輸入 248
10.8 契約與繼承 250
10.8.1 繼承與in契約 250
10.8.2 繼承與out契約 252
10.8.3 繼承與invariant契約 253
10.9 接口裡的契約 253
第11章 擴展性 255
11.1 包和模組 255
11.1.1 import聲明 256
11.1.2 模組搜尋根目錄 257
11.1.3 名字查找 258
11.1.4 public import聲明 260
11.1.5 static import聲明 261
11.1.6 選擇性導入 262
11.1.7 在導入里重新命名 262
11.1.8 module聲明 264
11.1.9 模組摘要 264
11.2 安全性 267
11.2.1 定義行為和未定義行為 267
11.2.2 @safe、@trusted和@system屬性 268
11.3 模組的構造函式與析構函式 269
11.3.1 模組內的執行順序 270
11.3.2 跨模組的執行順序 270
11.4 文檔注釋 271
11.5 與C和C++進行互動 271
11.6 deprecated聲明 272
11.7 version聲明 272
11.8 debug聲明 273
11.9 D語言標準庫 273
第12章 操作符重載 275
12.1 重載操作符 276
12.2 重載一元操作符 276
12.2.1 使用mixin加強操作符定義 277
12.2.2 後增值與後減值 278
12.2.3 重載cast操作符 278
12.2.4 三元操作符重載測試和if測試 279
12.3 重載二元操作符 280
12.3.1 操作符重載的平方 281
12.3.2 交換律 281
12.4 重載比較操作符 282
12.5 重載賦值操作符 283
12.6 重載索引操作符 284
12.7 重載分割操作符 285
12.8 $操作符 286
12.9 重載foreach 286
12.9.1 帶有疊代原語的foreach 286
12.9.2 帶有內部疊代的foreach 287
12.10 在類里定義重載操作符 289
12.11 完全不一樣的重載:opDispatch 290
12.12 小結與快速參考 292
第13章 並發性 294
13.1 並發門 295
13.2 數據共享簡史 296
13.3 快瞧瞧,沒有(默認)共享 299
13.4 啟動執行緒 300
13.5 執行緒間的信息交換 302
13.6 receive的模式匹配 303
13.6.1 首次匹配 305
13.6.2 匹配所有訊息 305
13.7 檔案複製——稍有改變 305
13.8 執行緒終止 307
13.9 帶外通信 308
13.10 信箱堵塞 309
13.11 shared類型修飾符 310
13.12 shared數據操作及其效果 312
13.13 使用synchronized類實現基於鎖的同步 313
13.14 synchronized類里的欄位類型化 316
13.14.1 臨時保護==無脫離 317
13.14.2 局部保護==尾部共享 317
13.14.3 強制同質的互斥量 319
13.14.4 不可思議:shared可被強制轉換掉 320
13.15 死鎖與synchronized語句 320
13.16 使用shared類進行無鎖編碼 321
13.16.1 shared類 322
13.16.2 幾種無鎖結構 323
13.17 小結 325
參考文獻 327

相關詞條

相關搜尋

熱門詞條

聯絡我們