編輯推薦
在多核、並發、分布為王的時代,誰將成為下一個主流編程語言?來自全世界的眾多專傢都認為,Erlang有可能在競爭中勝齣。
Erlang開源語言係齣名門,通信巨頭愛立信公司用它開發齣瞭可靠性驚人的交換機係統AXD301。它天生就是麵嚮並發、分布和高容錯的,兼有函數式語言和腳本語言的各種優點,而且已經用於商業開發多年,具有穩定性極高的虛擬機和平颱庫。有瞭這些天時地利,無怪乎Erlang能夠迅速成為熱門的開發語言,除瞭廣泛應用於通信行業之外,它已經進入瞭各個領域:Facebook用它實現瞭聊天係統,Yahoo用它重寫瞭Delicious,網站用它開發瞭雲計算數據服務SimpleDB,還有多人遊戲、測試工具、電子支付、數據采集與監控、企業消息、電子郵件、空中交通管製……
內容簡介
本書由Erlang之父Joe Armstrong編寫,是毋庸置疑的經典著作。書中兼顧瞭順序編程、並發編程和分布式編程,重點介紹如何編寫並發和分布式的Erlang程序以及如何在多核CPU上自動加速程序,並深入地討論瞭開發Erlang應用中至關重要的文件和網絡編程、OTP、ETS和DETS等主題。第2版全新改寫,反應瞭自第1版麵世以來Erlang曆經的所有變化,添加瞭大量針對初學者的內容,並在每章後都附上瞭練習題。
《Erlang程序設計(第2版)》適閤Erlang初學者和中級水平Erlang程序員學習參考。
作者簡介
Joe Armstrong
Erlang最初的設計者和實現者,也是Erlang OTP係統項目的首席架構師。他擁有瑞典皇傢理工學院博士學位,是容錯係統開發領域的世界級專傢。現就職於愛立信公司。
內頁插圖
精彩書評
“Erlang是目前成熟可靠的能夠開發高擴展性並發軟件係統的語言,它將成為下一個Java。”——Ralph Johnson,軟件開發大師,《設計模式》作者之一
“Joe的《Erlang程序設計》一書影響巨大。第2版做瞭重要更新,萬眾期待,不但涵蓋核心語言和框架的基本內容,還涉及rebar和cowboy這樣的關鍵社區項目。有經驗的Erlang程序員也能在書裏找到各種有用的提示和新見解,初學者則會喜歡Joe在介紹和闡釋關鍵語言概念時所使用的清楚和有條理的方式。”——Alexander Gounares,AOL前CTO,比爾?蓋茨的顧問,Concurix公司的創始人兼CEO
“一部佳作。對函數式編程的介紹理性且實用。”——Gilad Bracha,Java語言和Java虛擬機規範的共同作者,Newspeak語言的創造者,Dart語言團隊成員
“本書是理解如何進行Actor編程的優秀資源,不僅適用於Erlang開發人員,還適用於那些想要理解Actor為何如此重要,以及為何它們是構建反應式、可擴展、可恢復和事件驅動型係統的重要工具的程序員。”——Jonas Boner,Akka項目和AspectWerkz麵嚮方麵編程框架創立者,Typesafe聯閤創始人兼CTO
“Erlang讓我有醍醐灌頂之感,它促使我開始以完全不同的方式思考問題,Armstrong能夠親自寫作本書,實乃Erlang愛好者之福。”——David Thomas,軟件開發大師,《程序員修煉之道》作者
目錄
目 錄
第一部分 為何用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 測試代碼覆蓋 28
Erlang程序設計(第2版) 下載 mobi epub pdf txt 電子書