第1章 啓程 1
1.1 使用Erlang shell 1
1.1.1 輸入shell命令 1
1.1.2 退齣shell 2
1.2 Erlang基礎知識 3
1.2.1 數值類型 3
1.2.2 不變的變量 4
1.2.3 原子 5
1.2.4 布爾代數和比較操作符 6
1.2.5 元組 8
1.2.6 列錶 10
1.2.7 列錶推導式 13
1.3 處理二進製數據 14
1.3.1 位語法 15
1.3.2 二進製數的按位操作 17
1.3.3 二進製字符串 18
1.3.4 二進製推導式 19
第2章 模塊 20
2.1 什麼是模塊 20
2.2 創建模塊 21
2.3 編譯代碼 23
2.4 定義宏 26
2.5 模塊的其他內容 27
2.5.1 元數據 27
2.5.2 環形依賴 28
第3章 函數 29
3.1 模式匹配 29
3.1.1 模式進階 31
3.1.2 綁定中的變量 31
3.2 衛語句 33
3.3 if錶達式 34
3.4 case ... of錶達式 37
3.5 如何選擇 38
第4章 類型 39
4.1 動態強類型 39
4.2 類型轉換 40
4.3 數據類型檢測函數 41
4.4 緻靜態類型愛好者 43
第5章 遞歸 44
5.1 遞歸的工作原理 44
5.1.1 列錶的長度 45
5.1.2 列錶長度的尾遞歸實現 46
5.2 更多遞歸函數 47
5.2.1 duplicate函數 47
5.2.2 reverse函數 48
5.2.3 sublist函數 49
5.2.4 zip函數 50
5.2.5 快速排序 51
5.3 不僅僅是列錶 53
5.4 遞歸思維 55
第6章 高階函數 58
6.1 一切都是函數 58
6.2 匿名函數 60
6.2.1 匿名函數的其他用途 60
6.2.2 函數的作用域和閉包 61
6.3 映射、過濾器、摺疊以及其他 63
6.3.1 過濾器 63
6.3.2 摺疊一切 64
6.3.3 其他抽象 66
第7章 錯誤和異常 67
7.1 錯誤編譯 67
7.1.1 編譯期錯誤 67
7.1.2 邏輯錯誤 69
7.1.3 運行時錯誤 69
7.2 引發異常 71
7.2.1 齣錯異常 71
7.2.2 退齣異常 72
7.2.3 拋齣異常 73
7.3 處理異常 74
7.3.1 處理不同類型的異常 74
7.3.2 catch後的after語句 76
7.3.3 嘗試多個錶達式 76
7.3.4 更多選擇 78
7.4 在樹中使用try語句 80
第8章 用函數式思維解決問題 82
8.1 逆波蘭式計算器 82
8.1.1 RPN計算器的工作原理 82
8.1.2 實現RPN計算器 84
8.1.3 代碼測試 85
8.2 從希思羅到倫敦 87
8.2.1 遞歸地解決問題 87
8.2.2 編寫代碼 89
8.2.3 不使用Erlang shell運行程序 93
第9章 常用數據結構簡介 95
9.1 記錄 95
9.1.1 定義記錄 95
9.1.2 讀取記錄字段值 97
9.1.3 更新記錄 99
9.1.4 共享記錄定義 99
9.2 鍵/值存儲 100
9.2.1 小數據量存儲 100
9.2.2 大數據量存儲:字典和通用平衡樹 101
9.3 集閤 102
9.4 有嚮圖 104
9.5 隊列 104
9.6 小結 105
第10章 並發編程漫遊指南 106
10.1 不必驚慌 106
10.2 並發概念 107
10.2.1 伸縮性 108
10.2.2 容錯 108
10.2.3 並發實現 109
10.3 並非完全不能綫性伸縮 110
10.4 再見,謝謝你的魚 111
10.4.1 創建進程 112
10.4.2 發送消息 113
10.4.3 接收消息 114
第11章 深入多重處理 118
11.1 定義進程狀態 118
11.2 隱藏消息實現 120
11.3 超時 121
11.4 選擇性接收 123
11.4.1 選擇性接收的風險 124
11.4.2 郵箱使用的其他風險 126
第12章 錯誤與進程 127
12.1 鏈接 127
12.1.1 捕獲退齣信號 129
12.1.2 老異常,新概念 130
12.2 監控器 133
12.3 命名進程 134
第13章 並發應用設計 139
13.1 理解問題 139
13.2 設計協議 141
13.3 目錄結構 143
13.4 事件模塊 143
13.4.1 事件和循環 144
13.4.2 增加接口 146
13.5 事件服務器 148
13.5.1 處理消息 149
13.5.2 代碼熱升級 152
13.5.3 隱藏消息細節 153
13.6 測試 155
13.7 增加監督功能 156
13.8 命名空間 157
第14章 OTP簡介 158
14.1 提煉通用進程 158
14.2 基礎服務器 159
14.2.1 kitty服務器 159
14.2.2 通用化同步調用 161
14.2.3 通用化服務器循環 162
14.2.4 啓動函數 164
14.2.5 通用化kitty服務器 165
14.3 專用與通用 166
14.4 麵嚮未來的迴調 167
14.4.1 init函數 167
14.4.2 handle_call函數 168
14.4.3 handle_cast函數 169
14.4.4 handle_info函數 169
14.4.5 terminate函數 169
14.4.6 code_change函數 169
14.5 gen_server實踐 170
第15章 令人憤怒的有限狀態機 174
15.1 什麼是有限狀態機 174
15.2 通用有限狀態機 178
15.2.1 init函數 178
15.2.2 StateName函數 178
15.2.3 handle_event函數 179
15.2.4 handle_syn_event函數 179
15.2.5 code_change和terminate函數 179
15.3 交易係統規格說明 179
15.3.1 操作定義 180
15.3.2 定義狀態圖和狀態遷移 181
15.4 遊戲交易 186
15.4.1 公共接口 186
15.4.2 FSM到FSM的函數 187
15.4.3 gen_fsm迴調函數 189
15.5 為自己驕傲 196
15.6 適用於真實世界嗎 197
第16章 事件處理器 198
16.1 處理它!*泵式散彈槍* 198
16.2 通用事件處理器 199
16.2.1 init和terminate函數 200
16.2.2 handle_event函數 200
16.2.3 handle_call函數 201
16.2.4 handle_info函數 201
16.2.5 code_change函數 201
16.3 現在是冰壺比賽時間 201
16.3.1 記分牌 202
16.3.2 比賽事件 203
16.3.3 通知新聞界 206
第17章 誰來監督監督者 211
17.1 監督者中的概念 211
17.2 使用監督者 213
17.2.1 重啓策略 213
17.2.2 重啓限製 215
17.2.3 子進程規格說明 215
17.3 樂隊排練 217
17.3.1 音樂人 217
17.3.2 樂隊監督者 220
17.4 動態監督 223
17.4.1 動態使用標準監督者 223
17.4.2 使用simple_one_for_one監督者 224
第18章 構建應用 226
18.1 進程池 226
18.1.1 洋蔥理論 227
18.1.2 進程池監督樹 228
18.2 實現監督者 230
18.3 進程池服務器 233
18.4 實現工作者 239
18.5 運行進程池 240
18.6 小結 242
第19章 構建OTP應用 243
19.1 我還有輛車是一個遊泳池 243
19.2 應用資源文件 244
19.3 把ppool轉換成OTP應用 246
19.4 application行為 247
19.5 從混亂到應用 249
19.6 庫應用 251
第20章 深入OTP應用 253
20.1 從OTP應用到真實的應用 253
20.1.1 應用文件 254
20.1.2 應用迴調模塊和監督者 255
20.1.3 分派器 256
20.1.4 計數模塊 264
20.2 運行應用 265
20.3 包含應用 267
20.4 復雜的終止 267
第21章 發布 268
21.1 修理漏水的管道 268
21.1.1 終止VM 268
21.1.2 更新應用文件 269
21.1.3 編譯應用 270
21.2 使用systools構建發布 270
21.2.1 創建啓動文件 271
21.2.2 發布打包 272
21.3 使用Reltool構建發布 273
21.4 Reltool技巧集 279
21.5 基於release文件發布 282
第22章 升級Process Quest 283
22.1 升級麵臨的問題 283
22.2 Erlang學習的第9級 285
22.3 Process Quest 286
22.3.1 regis-1.0.0應用 287
22.3.2 processquest-1.0.0 應用 287
22.3.3 sockserv-1.0.0應用 288
22.3.4 發布 289
22.4 改進Process Quest 291
22.4.1 更改code_change函數 291
22.4.2 增加appup文件 293
22.4.3 發布升級 296
22.5 Relup迴顧 299
第23章 套接字編程 301
23.1 IO列錶 301
23.2 UDP和TCP:夥伴協議 302
23.2.1 UDP套接字 303
23.2.2 TCP套接字 306
23.3 使用Inet進行更多的控製 308
23.4 重新審視sockserv 310
23.5 下一步的工作 319
第24章 EUnit:單元測試框架 320
24.1 什麼是EUnit 320
24.2 測試生成器 324
24.3 測試夾具 326
24.3.1 其他測試控製方法 328
24.3.2 測試文檔 329
24.4 測試regis 329
24.5 EUnit小結 338
第25章 ETS:免費的內存NoSQL數據庫 339
25.1 為什麼需要ETS 339
25.2 ETS的概念 340
25.3 ETS的基本操作 342
25.3.1 錶的創建和刪除 342
25.3.2 數據的插入和查詢 343
25.4 匹配操作 345
25.5 選擇操作 347
25.6 DETS 351
25.7 少說一點,多做一點 351
25.7.1 接口 352
25.7.2 實現細節 352
第26章 分布式編程 357
26.1 這是我的火槍 358
26.2 分布式計算中的謬誤 359
26.2.1 網絡是可靠的 360
26.2.2 網絡沒有延遲 360
26.2.3 帶寬是無限的 361
26.2.4 網絡是安全的 361
26.2.5 網絡拓撲不會變化 362
26.2.6 隻有一個管理員 363
26.2.7 傳輸成本是零 363
26.2.8 網絡是同質的 363
26.2.9 謬誤小結 364
26.3 死亡還是失去聯係 364
26.4 CAP定理 365
26.4.1 一緻性 366
26.4.2 可用性 366
26.4.3 分區容忍 366
26.4.4 僵屍幸存者和CAP 367
26.5 搭建Erlang集群 369
26.5.1 節點命名 369
26.5.2 連接節點 370
26.5.3 更多工具 371
26.6 cookie 373
26.7 遠程shell 374
26.8 隱藏節點 375
26.9 防火牆問題 376
26.10 高級調用 376
26.10.1 net_kernel模塊 376
26.10.2 global模塊 377
26.10.3 rpc模塊 378
26.11 小結 380
第27章 分布式OTP應用 381
27.1 更多OTP內容 381
27.2 接管和故障切換 382
27.3 神奇8號球 383
27.3.1 構建應用 384
27.3.2 變身分布式應用 387
第28章 不尋常的Common Test 391
28.1 什麼是Common Test 391
28.2 Common Test的組織結構 392
28.3 創建一個簡單的測試套件 393
28.4 帶狀態的測試 396
28.5 測試組 397
28.5.1 定義測試組 398
28.5.2 測試組屬性 399
28.5.3 會議室 400
28.6 再談測試套件 404
28.7 測試規格說明 404
28.7.1 規格說明文件內容 405
28.7.2 創建規格說明文件 406
28.7.3 通過規格說明文件運行測試 407
28.8 大規模測試 407
28.8.1 創建分布式測試規格說明文件 409
28.8.2 運行分布式測試 410
28.9 集成Common Test和EUint 411
28.10 還有其他內容嗎 411
第29章 Mnesia—記憶的藝術 412
29.1 Mnesia是什麼 412
29.2 應該存儲什麼呢 413
29.2.1 需要存儲的數據 413
29.2.2 錶結構 414
29.3 從記錄到錶 415
29.4 Mnesia數據模式和錶 416
29.5 創建錶 418
29.5.1 安裝數據庫 418
29.5.2 啓動應用 421
29.6 數據錶存取上下文 422
29.7 讀、寫以及其他操作 423
29.8 實現第一個請求 424
29.8.1 測試增加服務 424
29.8.2 測試查詢 427
29.8.3 賬目和新的需求 430
29.9 滿足老闆 432
29.10 刪除操作示例 434
29.11 列錶推導式查詢 437
29.12 記住Mnesia 438
第30章 類型規格說明與Dialyzer 439
30.1 PLT是最好的三明治 439
30.2 成功類型化 440
30.3 類型推導和錯誤 442
30.4 類型的種類 445
30.4.1 單例類型 445
30.4.2 聯閤類型和內置類型 445
30.4.3 定義類型 448
30.4.4 記錄類型 449
30.5 為函數增加類型聲明 450
30.6 類型定義實踐 453
30.7 類型導齣 457
30.8 OTP行為類型 459
30.9 多態類型 460
30.9.1 我們買瞭一個動物園 460
30.9.2 注意事項 462
30.10 Dialyzer,我的好朋友 463
30.11 朋友們,就這麼多 463
後記 464
附錄 Erlang語法 467
· · · · · · (
收起)