Erlang程式設計(第2版)

Erlang程式設計(第2版)

《Erlang程式設計(第2版)》是2020年4月人民郵電出版社出版的圖書,作者是[瑞典]Joe Armstrong。

基本介紹

  • 中文名:Erlang程式設計(第2版)
  • 作者:[瑞典]Joe Armstrong
  • 出版時間:2020年4月
  • 出版社人民郵電出版社
  • 頁數:428 頁
  • ISBN:9787115354570
  • 定價:89 元
  • 開本:16 開
  • 裝幀:平裝
內容簡介,圖書目錄,

內容簡介

《Erlang程式設計(第 2版)》由Erlang之父Joe Armstrong編寫,是毋庸置疑的經典著作。書中兼顧了順序編程、並發編程和分散式編程,深入討論了開發Erlang套用中到關重要的檔案和網路編程、OTP、ETS和DETS等主題。新版針對入門級程式設計師增加了相關內容。
《Erlang程式設計(第 2版)》適合Erlang初學者和中級水平Erlang程式設計師學習參考。

圖書目錄

第 一部分 為何用Erlang
第 1章 什麼是並發 2
1.1 給並發建模 2
1.1.1 開始模擬 3
1.1.2 傳送訊息 4
1.1.3 接收訊息 4
1.2 並發的益處 4
1.3 並發程式和並行計算機 5
1.4 順序和並發程式語言 6
1.5 小結 6
第 2章 Erlang速覽 7
2.1 Shell 7
2.1.1 =操作符 8
2.1.2 變數和原子的語法 8
2.2 進程、模組和編譯 9
2.2.1 在shell里編譯並運行Hello World 9
2.2.2 在Erlang shell外編譯 9
2.3 你好,並發 10
2.3.1 檔案伺服器進程 10
2.3.2 客戶端代碼 13
2.3.3 改進檔案伺服器 14
2.4 練習 14
第 二部分 順序編程
第3章 基本概念 16
3.1 啟動和停止Erlang shell 16
3.1.1 在shell里執行命令 17
3.1.2 可能出錯的地方 17
3.1.3 在Erlang shell里編輯命令 18
3.2 簡單的整數運算 18
3.3 變數 19
3.3.1 Erlang的變數不會變 20
3.3.2 變數綁定和模式匹配 20
3.3.3 為什麼一次性賦值讓程式變得更好 21
3.4 浮點數 22
3.5 原子 22
3.6 元組 23
3.6.1 創建元組 24
3.6.2 提取元組的值 25
3.7 列表 26
3.7.1 專用術語 26
3.7.2 定義列表 27
3.7.3 提取列表元素 27
3.8 字元串 27
3.9 模式匹配再探 29
3.10 練習 30
第4章 模組與函式 31
4.1 模組是存放代碼的地方 31
4.1.1 常見錯誤 33
4.1.2 和代碼路徑 33
4.1.3 給代碼添加測試 33
4.1.4 擴展程式 34
4.1.5 分號放哪裡 36
4.2 繼續購物 36
4.3 fun:基本的抽象單元 39
4.3.1 以fun作為參數的函式 40
4.3.2 返回fun的函式 41
4.3.3 定義你自己的控制抽象 42
4.4 簡單列表處理 42
4.5 列表推導 45
4.5.1 Quicksort 46
4.5.2 畢達哥拉斯三元數組 47
4.5.3 迴文構詞 48
4.6 內置函式 48
4.7 關卡 49
4.7.1 關卡序列 49
4.7.2 關卡示例 50
4.7.3 true關卡的作用 51
4.8 case和if表達式 52
4.8.1 case表達式 52
4.8.2 if表達式 53
4.9 構建自然順序的列表 54
4.10 歸集器 55
4.11 練習 56
第5章 記錄與映射組 57
5.1 何時使用映射組或記錄 57
5.2 通過記錄命名元組裡的項 58
5.2.1 創建和更新記錄 59
5.2.2 提取記錄欄位 59
5.2.3 在函數裡模式匹配記錄 59
5.2.4 記錄是元組的另一種形式 60
5.3 映射組:關聯式鍵-值存儲 60
5.3.1 映射組語法 60
5.3.2 模式匹配映射組欄位 62
5.3.3 操作映射組的內置函式 63
5.3.4 映射組排序 64
5.3.5 以JSON為橋樑 64
5.4 練習 66
第6章 順序程式的錯誤處理 67
6.1 處理順序代碼里的錯誤 67
6.2 用try...catch捕捉異常錯誤 69
6.2.1 try...catch具有一個值 69
6.2.2 簡寫法 70
6.2.3 try...catch編程樣例 71
6.3 用catch捕捉異常錯誤 72
6.4 針對異常錯誤的編程樣式 72
6.4.1 改進錯誤訊息 72
6.4.2 經常返回錯誤時的代碼 73
6.4.3 錯誤可能有但罕見時的代碼 73
6.4.4 捕捉一切可能的異常錯誤 74
6.5 棧跟蹤 74
6.6 拋錯要快而明顯,也要文明 75
6.7 練習 75
第7章 二進制型與位語法 76
7.1 二進制型 76
7.2 位語法 78
7.2.1 打包和解包16位顏色 78
7.2.2 位語法表達式 79
7.2.3 位語法的真實例子 81
7.3 位串:處理位級數據 85
7.4 練習 87
第8章 Erlang順序編程補遺 88
8.1 apply 89
8.2 算術表達式 90
8.3 元數 91
8.4 屬性 91
8.4.1 預定義的模組屬性 91
8.4.2 用戶定義的模組屬性 93
8.5 塊表達式 94
8.6 布爾值 94
8.7 布爾表達式 95
8.8 字元集 95
8.9 注釋 95
8.10 動態代碼載入 96
8.11 Erlang的預處理器 99
8.12 轉義序列 99
8.13 表達式和表達式序列 100
8.14 函式引用 101
8.15 包含檔案 101
8.16 列表操作:++和-- 102
8.17 宏 102
8.18 模式的匹配操作符 104
8.19 數字 105
8.19.1 整數 105
8.19.2 浮點數 105
8.20 操作符優先權 106
8.21 進程字典 106
8.22 引用 108
8.23 短路布爾表達式 108
8.24 比較數據類型 108
8.25 元組模組 109
8.26 下劃線變數 109
8.27 練習 110
第9章 類型 111
9.1 指定數據和函式類型 111
9.2 Erlang的類型表示法 113
9.2.1 類型的語法 113
9.2.2 預定義類型 114
9.2.3 指定函式的輸入輸出類型 114
9.2.4 導出類型和本地類型 116
9.2.5 不透明類型 116
9.3 dialyzer教程 117
9.3.1 錯誤使用內置函式的返回值 118
9.3.2 內置函式的錯誤參數 119
9.3.3 錯誤的程式邏輯 119
9.3.4 使用dialyzer 120
9.3.5 干擾dialyzer的事物 120
9.4 類型推斷與成功分型 121
9.5 類型系統的局限性 123
9.6 練習 125
第 10章 編譯和運行程式 126
10.1 改變開發環境 126
10.1.1 設定載入代碼的搜尋路徑 126
10.1.2 在系統啟動時執行一組命令 127
10.2 運行程式的不同方式 128
10.2.1 在Erlang shell里編譯和運行 128
10.2.2 在命令提示符界面里編譯和運行 129
10.2.3 作為Escript運行 130
10.2.4 帶命令行參數的程式 131
10.3 用makefile使編譯自動化 132
10.4 當壞事發生 135
10.4.1 停止Erlang 135
10.4.2 未定義(缺失)的代碼 135
10.4.3 shell沒有反應 136
10.4.4 我的makefile不工作 137
10.4.5 Erlang崩潰而你想閱讀故障轉儲檔案 137
10.5 獲取幫助 138
10.6 調節運行環境 138
10.7 練習 139
第三部分 並發和分散式程式
第 11章 現實世界中的並發 142
第 12章 並發編程 145
12.1 基本並發函式 145
12.2 客戶端-伺服器介紹 147
12.3 進程很輕巧 151
12.4 帶逾時的接收 153
12.4.1 只帶逾時的接收 154
12.4.2 逾時值為0的接收 154
12.4.3 逾時值為無窮大的接收 155
12.4.4 實現一個定時器 155
12.5 選擇性接收 156
12.6 註冊進程 157
12.7 關於尾遞歸的說明 158
12.8 用MFA或Fun進行分裂 160
12.9 練習 160
第 13章 並發程式中的錯誤 161
13.1 錯誤處理的理念 161
13.1.1 讓其他進程修復錯誤 162
13.1.2 任其崩潰 162
13.1.3 為何要崩潰 162
13.2 錯誤處理的術語含義 163
13.3 創建連線 164
13.4 同步終止的進程組 164
13.5 設立防火牆 165
13.6 監視 166
13.7 基本錯誤處理函式 166
13.8 容錯式編程 167
13.8.1 在進程終止時執行操作 167
13.8.2 讓一組進程共同終止 168
13.8.3 生成一個永不終止的進程 169
13.9 練習 170
第 14章 分散式編程 171
14.1 兩種分散式模型 171
14.2 編寫一個分散式程式 172
14.3 創建名稱伺服器 173
14.3.1 第 1階段:一個簡單的名稱伺服器 173
14.3.2 第 2階段:客戶端在一個節點,伺服器在相同主機的另一個節點 174
14.3.3 第3階段:同一區域網路內不同機器上的客戶端和伺服器 175
14.3.4 第4階段:跨網際網路不同主機上的客戶端和伺服器 176
14.4 分散式編程的庫和內置函式 177
14.4.1 遠程分裂示例 178
14.4.2 檔案伺服器再探 180
14.5 cookie保護系統 181
14.6 基於套接字的分散式模型 182
14.6.1 用lib_chan控制進程 182
14.6.2 伺服器代碼 183
14.7 練習 185
第四部分 編程庫與框架
第 15章 接口技術 188
15.1 Erlang如何與外部程式通信 188
15.2 用連線埠建立外部C程式接口 190
15.2.1 C程式 191
15.2.2 Erlang程式 193
15.2.3 編譯和連結連線埠程式 195
15.2.4 運行程式 195
15.3 在Erlang里調用shell腳本 196
15.4 高 級接口技術 196
15.5 練習 197
第 16章 檔案編程 198
16.1 操作檔案的模組 198
16.2 讀取檔案的幾種方法 199
16.2.1 讀取檔案里的所有數據類型 199
16.2.2 分次讀取檔案里的數據類型 200
16.2.3 分次讀取檔案里的行 202
16.2.4 讀取整個檔案到二進制型中 202
16.2.5 通過隨機訪問讀取檔案 203
16.3 寫入檔案的各種方式 205
16.3.1 把數據列表寫入檔案 206
16.3.2 把各行寫入檔案 207
16.3.3 一次性寫入整個檔案 207
16.3.4 寫入隨機訪問檔案 209
16.4 和檔案操作 209
16.4.1 查找檔案信息 210
16.4.2 複製和刪除檔案 211
16.5 其他信息 211
16.6 一個查找工具函式 212
16.7 練習 214
第 17章 套接字編程 216
17.1 使用TCP 216
17.1.1 從伺服器獲取數據 216
17.1.2 一個簡單的TCP伺服器 219
17.1.3 順序和並行伺服器 222
17.1.4 注意事項 223
17.2 主動和被動套接字 224
17.2.1 主動訊息接收(非阻塞式) 224
17.2.2 被動訊息接收(阻塞式) 225
17.2.3 混合訊息接收(部分阻塞式) 225
17.3 套接字錯誤處理 226
17.4 UDP 227
17.4.1 最簡單的UDP伺服器與客戶端 227
17.4.2 一個UDP階乘伺服器 228
17.4.3 UDP數據包須知 230
17.5 對多台機器廣播 230
17.6 一個SHOUTcast伺服器 231
17.6.1 SHOUTcast協定 232
17.6.2 SHOUTcast伺服器的工作原理 232
17.6.3 SHOUTcast伺服器的偽代碼 233
17.6.4 運行SHOUTcast伺服器 234
17.7 練習 235
第 18章 用WebSocket和Erlang進行瀏覽 236
18.1 創建一個數字時鐘 237
18.2 基本互動 239
18.3 瀏覽器里的Erlang shell 240
18.4 創建一個聊天小部件 241
18.5 簡化版IRC 244
18.6 瀏覽器里的圖形 247
18.7 瀏覽器-伺服器協定 249
18.7.1 從Erlang傳送訊息到瀏覽器 249
18.7.2 從瀏覽器到Erlang的訊息 250
18.8 練習 251
第 19章 用ETS和DETS存儲數據 252
19.1 表的類型 252
19.2 影響ETS表效率的因素 254
19.3 創建一個ETS表 255
19.4 ETS示例程式 255
19.4.1 三字母組合疊代函式 256
19.4.2 創建一些表 257
19.4.3 創建表所需的時間 258
19.4.4 訪問表所需的時間 258
19.4.5 獲勝者是…… 259
19.5 保存元組到磁碟 260
19.6 其餘操作 262
19.7 練習 263
第 20章 Mnesia:Erlang資料庫 264
20.1 創建初始資料庫 264
20.2 資料庫查詢 265
20.2.1 選擇表里的所有數據 266
20.2.2 從表里選擇數據 267
20.2.3 從表里有條件選擇數據 268
20.2.4 從兩個表里選擇數據(聯接) 268
20.3 添加和移除資料庫里的數據 269
20.3.1 添加行 269
20.3.2 移除行 270
20.4 Mnesia事務 270
20.4.1 中止事務 271
20.4.2 載入測試數據 273
20.4.3 do()函式 273
20.5 在表里保存複雜數據 274
20.6 表的類型和位置 275
20.6.1 創建表 276
20.6.2 常用的表屬性組合 277
20.6.3 表的行為 278
20.7 表查看器 278
20.8 深入挖掘 279
20.9 練習 279
第 21章 性能分析、調試與跟蹤 280
21.1 Erlang代碼的性能分析工具 281
21.2 測試代碼覆蓋 281
21.3 生成交叉引用 283
21.4 編譯器診斷信息 283
21.4.1 頭部不匹配 284
21.4.2 未綁定變數 284
21.4.3 未結束字元串 284
21.4.4 不安全變數 284
21.4.5 影子變數 285
21.5 運行時診斷 286
21.6 調試方法 287
21.6.1 io:format調試 288
21.6.2 轉儲檔案 289
21.6.3 使用錯誤記錄器 289
21.7 Erlang調試器 289
21.8 跟蹤訊息與進程執行 291
21.9 Erlang代碼的測試框架 294
21.10 練習 295
第 22章 OTP介紹 296
22.1 通用伺服器之路 297
22.1.1 Server 1:基本的伺服器 297
22.1.2 Server 2:實現事務的伺服器 298
22.1.3 Server 3:實現熱代碼交換的伺服器 299
22.1.4 Server 4:事務與熱代碼交換 301
22.1.5 Server 5:更多樂趣 302
22.2 gen_server入門 304
22.2.1 確定回調模組名 304
22.2.2 編寫接口方法 305
22.2.3 編寫回調方法 305
22.3 gen_server的回調結構 308
22.3.1 啟動伺服器 308
22.3.2 調用伺服器 308
22.3.3 調用和播發 309
22.3.4 發給伺服器的自發性訊息 310
22.3.5 後會有期,寶貝 310
22.3.6 代碼更改 311
22.4 填寫gen_server模板 311
22.5 深入探索 313
22.6 練習 313
第 23章 用OTP構建系統 315
23.1 通用事件處理 316
23.2 錯誤記錄器 318
23.2.1 記錄錯誤 318
23.2.2 配置錯誤記錄器 319
23.2.3 分析錯誤 323
23.3 警報管理 324
23.4 應用程式伺服器 326
23.4.1 質數伺服器 326
23.4.2 面積伺服器 327
23.5 監控樹 328
23.6 啟動系統 331
23.7 應用程式 335
23.8 檔案系統組織方式 336
23.9 應用程式監視器 337
23.10 怎樣計算質數 338
23.11 深入探索 340
23.12 練習 341
第五部分 構建應用程式
第 24章 編程術語 344
24.1 保持Erlang世界觀 344
24.2 多用途伺服器 346
24.3 有狀態的模組 348
24.4 適配器變數 349
24.5 表意編程 351
24.6 練習 353
第 25章 第三方程式 354
25.1 製作可共享代碼存檔並用rebar管理代碼 354
25.1.1 安裝rebar 354
25.1.2 在GitHub上創建一個新項目 355
25.1.3 在本地克隆這個項目 355
25.1.4 製作一個OTP應用程式 356
25.1.5 宣傳你的項目 356
25.2 整合外部程式與我們的代碼 357
25.3 生成依賴項本地副本 358
25.4 用cowboy構建嵌入式Web伺服器 359
25.5 練習 364
第 26章 多核CPU編程 366
26.1 給Erlang程式設計師的好訊息 367
26.2 如何在多核CPU中使程式高效運行 367
26.2.1 使用大量進程 368
26.2.2 避免副作用 368
26.2.3 避免順序瓶頸 369
26.3 讓順序代碼並行 370
26.4 小訊息,大計算 372
26.5 用mapreduce使計算並行化 376
26.6 練習 380
第 27章 福爾摩斯的最後一案 381
27.1 找出數據的相似度 381
27.2 sherlock演示 382
27.2.1 獲取並預處理數據 382
27.2.2 尋找最像給定檔案的郵件 383
27.2.3 搜尋指定作者、日期或標題的郵件 385
27.3 數據分區的重要性 386
27.4 給郵件添加關鍵字 386
27.4.1 辭彙的重要性:TF*IDF權重 387
27.4.2 餘弦相似度:兩個權重向量的相似程度 388
27.4.3 相似度查詢 389
27.5 實現方式概覽 389
27.6 練習 390
27.7 總結 391
附錄A OTP模板 392
附錄B 一個套接字應用程式 398
附錄C 一種簡單的執行環境 413

相關詞條

熱門詞條

聯絡我們