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