基本信息
原書名:ERLANG Programming
原出版社: O'Reilly Media
作者:Francesco Cesarini Simon Thompson
譯者:慕尼黑Isar工作組 楊劍
叢書名: 北京華章圖文信息有限公司O'Reilly系列
出版社:機械工業出版社
ISBN:9787111303251
出版日期:2011 年3月
開本:16開
頁碼:444
版次:1-1
內容簡介
《Erlang編程指南》是對erlang語言的深入介紹。erlang是任何必須並發、容錯和快速回響的環境的理想程式語言。隨著多核處理器及其針對並發的新的可擴展方式的發展,erlang得到了廣泛的使用。通過本書,你將學會如何使用erlang編寫複雜的並發程式,不管你是否有編程背景和經驗。
本書由國際知名的erlang社區領導者根據他們的培訓材料編寫而成。本書的重點集中在解釋erlang的語法和語義,並且介紹了其模式匹配、規範列表、遞歸、調試、網路和並發性等內容。
《Erlang編程指南》可以幫助你:
·理解erlang的強大功能及其包含的特殊功能。
·學習並發背後的概念以及erlang處理並發的方式。
·編寫高效的erlang程式並保持代碼整潔和良好的可讀性。
·探究erlang如何滿足分散式系統的要求。
·輕鬆添加簡單的圖形用戶界面。
·學習erlang的跟蹤機制以調試並發和分散式系統。
·使用內置的mnesia資料庫和其他表存儲功能。
《erlang編程指南》每章末尾都提供了練習題,並且由簡單的示例貫穿全書。
作譯者
Francesco Cesarini 14年來一直向學生、開發人員、測試人員、項目和技術經理教授Erlang/OTP技術。他協助在愛爾蘭、美國和英國建立起了Erlang開發中心。
Simon Thompson是一位肯特大學計算機實驗室的邏輯和計算學教授,在過去25年裡,他在那裡教授本科生和研究生的計算學課程。
目錄
《erlang標準編程指南》
序 1
前言 3
第1章 引言 9
為什麼我應該使用erlang 9
erlang語言的歷史及發展 11
erlang的特性 12
erlang和多核 17
案例研究 18
應該如何使用erlang 21
第2章 erlang基礎 22
整數 22
erlang終端 23
浮點數 23
基元 25
布爾類型 27
元組 28
列表 29
項元比較 34
變數 36
複雜數據結構 38
模式匹配 40
函式 44
模組 46
練習 50
第3章 erlang順序編程 52
條件評估 52
保護元 57
內置函式 60
遞歸 66
運行時錯誤 75
處理錯誤 77
模組庫 84
調試器 87
練習 90
第4章 並發編程 95
創建進程 96
訊息傳遞 98
接收訊息 100
註冊進程 107
逾時 110
性能基準測試 111
進程架構 112
尾遞歸和記憶體泄漏 113
面向並發程式設計的個案研究 115
競爭條件、死鎖和飢餓進程 116
進程管理器 118
練習 119
第5章 進程設計模式 121
客戶端/伺服器模型 122
進程模式實例 128
有限狀態機 130
事件管理器和句柄 134
練習 141
第6章 進程錯誤處理機制 143
進程連結和退出信號 143
健壯性系統 152
練習 158
第7章 記錄和宏 161
記錄 162
宏 168
練習 172
第8章 軟體升級 175
升級模組 175
幕後 178
升級過程 184
erlang檔案 188
練習 188
第9章 更多數據類型和高級別構造 190
實踐中的函式式編程 190
funs和高階函式 191
列表解析 198
二進制類型和序列化 202
引用 211
練習 212
第10章 ets和dets表 214
ets表 214
dets表 228
移動用戶資料庫實例 231
練習 242
第11章 erlang中的分散式編程 244
erlang中的分散式系統 244
erlang中的分散式計算:基礎 246
EPMD進程 259
練習 260
第12章 otp行為包 261
otp行為包介紹 261
通用伺服器 264
監控進程 274
套用 278
版本發行的處理 284
其他行為包和更多閱讀資源 287
練習 288
第13章 mnesia介紹 290
何時使用mnesia 290
配置mnesia 292
事務處理 296
分區網路 301
擴展閱讀 302
練習 303
第14章 圖形用戶界面編程wxErlang 305
wxWidgets 305
wxerlang:wxwidgets綁定到erlang 306
第一個實例:MicroBlog 309
miniblog實例 313
獲取和運行wxerlang 316
練習 317
第15章 套接字編程 319
用戶數據報協定 319
傳輸控制協定 323
inet模組 328
擴展閱讀 329
練習 330
第16章 erlang與其他程式語言接口 332
互動運作概況 332
與java互動運作 334
c節點 339
unix終端的erlang調用:erl_call 343
連線埠程式 343
通信支持庫 347
內聯驅動程式和ffi 349
練習 350
第17章 跟蹤內置函式,DBG跟蹤器以及匹配規則 351
引言 351
跟蹤內置函式 352
用trace_pattern內置函式跟蹤調用 358
dbg跟蹤器 362
匹配規則:fun語法 370
匹配規則:螺母和螺栓 379
擴展閱讀 387
練習 388
第18章 類型和文檔 390
erlang中的類型 390
typer: 成功類型和類型推斷 394
使用edoc生成文檔 397
練習 405
第19章 eunit和測試驅動開發 406
測試驅動開發 406
eunit 407
eunit的基礎架構 411
測試基於狀態的系統 413
在erlang中測試並發程式 414
練習 415
第20章 風格和效率 417
套用和模組 417
進程和並發 422
格式約定 425
編碼策略 431
效率 433
最後 437
附錄 使用erlang 439
前言
促使我們寫這本書的主要原因是出於對分享Erlang的熱衷。希望我們的工作能對Erlang的學習者有所幫助,這也是我們對Erlang社區給予的一點兒回報。雖然我們兩個是出於不同目的而開始學習Erlang的,但結果都是一樣:通過付出比學習其他語言更多的努力而獲得了更多的樂趣。最妙的是,它不僅僅是以娛樂為目的的工具,而是每天我們工作時都在使用它!
Francesco: 為什麼使用Erlang
那是在1994年,我正在Uppsala大學學習計算機科學,我參加的課程之一是並行程式設計。講師舉著“Erlang並行程式設計”(Prentice Hall)第1版,說道:“閱讀它吧。”然後他舉起講義又說道,“還有做練習。”之後Erlang就很少被提及。它很快隱沒線上程、記憶體共享、信號量和死鎖的理論中。
該課程的主要練習是設計一個模擬胡蘿蔔、兔子和狼共同居住的環境。在這個環境中,兔子隨機在土地上尋找生長的胡蘿蔔。如果它們吃了足夠多的胡蘿蔔,就會變胖並且由一隻分裂為兩隻。在這個環境中,狼搜尋兔子,如果狼吃了足夠多的兔子,也會變胖並且由一隻分裂為兩隻。如果兔子和狼靠近到了一定的距離,就會彼此發布食物和掠食者的訊息。如果一隻兔子發現了一片生長鬍蘿蔔的土地,其他兔子也會很快知道這個地方。如果狼一旦發現了兔子,馬上就開始追逐它。
最後的結果很有趣。一隻古怪的兔子直接跑進了狼群,而其他的兔子跑向了其他方向,有時在發現胡蘿蔔的地方停下來進食。每一塊胡蘿蔔地、每一隻兔子和狼都代表了一個Erlang進程,它們之間通過訊息傳遞進行通信。
這個練習花了我大約40個小時。雖然當時我就很喜歡使用Erlang,並且驚訝於Erlang並發模型的簡易性和每個進程對作業系統執行緒極少的占用,但是當時並沒有很重視它。畢竟Erlang也只是我為了得到學位而學習的幾門語言之一。我在函式式編程中使用了機器語言,並且在實時程式設計中使用了ADA。Erlang對於我來說只是眾多語言中的一種。在幾個月後,當我開始學習面向對象程式設計時,這一觀點得到了改觀。
在面向對象程式設計課程中,我們需要模擬同一個環境,不過這一次用Eiffel語言——一種面向對象語言,我們的新講師認為它極其適合此類模擬。儘管我已經解決過這個問題,可以直接重用其中某些算法,但我還是花費了大約120個人一時來解決它。
這使我驚訝地意識到Erlang的聲明性語言和並行處理的特性是軟體開發的新方向。當時,我並不確定程式語言是否會向Erlang模式轉移,但是我相信,不管是哪種程式語言,將來一定會深受Erlang和它的先驅者的影響。於是我拿起電話打給Joe Armstrong——Erlang的創造者之一。一個星期之後,我拜訪了愛立信的計算機科學實驗室,從此我再沒有回頭。
Simon:為什麼使用Erlang
我是在20世紀80年代早期開始進行函式式編程工作的,而在Erlang問世20年後才知道它的存在。Erlang最吸引我的地方是,它是為解決實際和複雜問題而設計的,並且通過一種優雅且極其有效的方式解決它們。這也正是近幾年人們越來越多地把Erlang套用到的各種系統上的原因。
與Java、C++或Haskell語言相比,Erlang還是一種規模較小的語言,這也使得在Erlang上編寫工具更具實用價值。這一點,還有我們在工作中所使用的庫的質量,幫助在Kent工作的函式式程式設計組更加有效地為Erlang實現Wrangler重構工具。
誰應該閱讀本書
我們寫這本書的目的是向你介紹如何使用Erlang進行程式設計。我們並不要求你曾經使用過Erlang,或者熟悉其他函式式程式語言。
我們的確希望你已經擁有Java、C、Ruby或其他程式語言的經驗,並且會特別指出Erlang與你所使用的其他語言的不同之處。
怎樣閱讀本書
我們把這本書分成兩部分,第一部分需要順序閱讀,第二部分可以並行(或按照你喜歡的順序)閱讀,因為後一部分各章之間互相獨立。
前11章包含了Erlang的核心部分:
·第1章概要介紹了這門語言,其中包含Erlang對於建立高效、健壯的並發系統的關鍵特性。我們還介紹了Erlang是如何發展到今天這種形式的,並且指出套用Erlang的成功實例,這些實例也就解釋了為什麼你也許會在你的項目中使用Erlang。
·第2章和第3章包含了在Erlang中的順序編程的基礎知識。在這兩章中,我們介紹了Erlang程式設計的核心之一——遞歸,並且還介紹了Erlang中的單一賦值與C和Java等語言中的變數處理的不同。
·在包含順序編程的同時,我們也介紹了Erlang的基本數據類型——數字、基元、字元串、列表和元組——並與其他語言的相似類型進行了比較。其他類型的介紹包含在稍後的各章中:記錄類型在第7章,函式類型和二進制類型在第9章,ETS表中的大規模的存儲在第10章中介紹。
序言
Erlang是我們提供的解決方案,用於解決高並發和分散式“軟實時系統”編程中三個方面的問題:
·能夠快速且高效地開發軟體。
·能夠應對各種軟體錯誤和硬體故障。
·能夠實現軟體的熱升級,也就是不停止運行而完成升級。
Erlang剛“發明”的時候主要套用於電信系統。但是,今天大量的套用系統也有這樣的需求,並且Erlang已經套用於各種系統,比如各種不同的分散式資料庫、財務系統和聊天伺服器等。最近由於適合在多核處理器上使用,人們對Erlang的興趣再次被點燃。當整個世界還在苦苦努力尋找方法以提高使用多核處理器效率的時候,使用Erlang的套用實際上不需要任何改動就可以享受到多核處理器的好處。
一開始Erlang的影響擴展得比較緩慢,也許是因為Erlang一下就大膽引進了函式式編程、輕量級並發性、異步訊息傳遞和獨特的故障處理方法等,並且集所有這些功能於一身。顯而易見,這就是為什麼Ja va作為一種和C++比較相近的語言,卻可以相對容易地被大眾接受。然而,因為已經達到了前面提到過的目標,我們認為我們的方法經受住了時間的考驗。所以目前Erlang的套用也在迅猛增長。
這本書對Erlang進行了精彩和實用的講解,並結合了大量逸聞趣事來闡述Erlang語言的發展背景和理念。
我相信,這會是一次愉快的、收穫頗豐的閱讀。
——Mike Williams
Director of Traffic and Feature Software
Product Development Unit WCDMA, Ericsson AB
Erlang語言發明人之一
媒體評論
“即便我已經使用Erlang多年,在編程的時候仍然需要參考《Erlang編程指南》。不同層次的Erlang程式設計師都會發現本書是有價值的學習和參考資料。”
——Steve Vinoski,《IEEE Internet Computing》專欄作家