書是講述下一代編程語言Erlang 的權威著作,主要涵蓋順序型編程、異常處理、編譯和運行代碼、並發編程、並發編程中的錯誤處理、分布式編程、多核編程等內容。本書將幫助讀者在消息傳遞的基礎上構建分布式的並發係統,免去鎖與互斥技術的羈絆,使程序在多核CPU 上高效運行。本書講述的各種設計方法和行為將成為設計容錯與分布式係統中的利器。.
在多核、並發、分布為王的時代,誰將成為下一個主流編程語言?來自全世界的眾多專傢都認為,Erlang最有可能在競爭中勝齣。
Erlang開源語言係齣名門,通信巨頭愛立信公司用它開發齣瞭可靠性驚人的交換機係統AXD301。它天生就是麵嚮並發、分布和高容錯的,兼有函數式語言和腳本語言的各種優點,而且已經用於商業開發多年,具有穩定性極高的虛擬機和平颱庫。有瞭這些天時地利,無怪乎Erlang能夠迅速成為熱門的開發語言,除瞭廣泛應用於通信行業之外,它已經進入瞭各個領域:Facebook用它實現瞭聊天係統,Yahoo用它重寫瞭Delicious,Amazon用它開發瞭雲計算數據服務SimpleDB,還有多人遊戲、測試工具、電子支付、數據采集與監控、企業消息、電子郵件、空中交通管製……..
本書由Erlang之父Joe Armstrong編寫,是毋庸置疑的經典著作。書中兼顧瞭順序編程、並發編程和分布式編程,較深入地討論瞭開發Erlang應用中至關重要的文件和網絡編程、OTP、MNesia、Ets和Dets等主題,更為精彩的是,大師親自操刀,構建瞭MapReduce實例和多人聊天實例,一定讓你大呼過癮。...
Erlang 程序設計 下載 mobi epub pdf txt 電子書
Joe Armstrong,Erlang最初的設計者和實現者,也是Erlang OTP係統項目的首席架構師。他擁有瑞典皇傢理工學院博士學位,是容錯係統開發領域的世界級專傢。此外,他還在開發旨在替代XML的標記語言ML9。現任職於愛立信公司。
趙東煒,(Jackyz)獨立軟件顧問,一直專注於Web應用開發,曾負責設計和維護某大型門戶網站的多個核心應用,對高並發大容量的分布式應用領域有獨到見解。曾擔任過軟件開發工程師、係統架構師、技術經理、産品經理、創業者等多種不同的角色。閑暇時以思考技術問題為樂,從事軟件行業10餘年來,從最初的 ASP/PHP到之後的Java/.NET以及現在的Ajax和Erlang,一直都活躍在技術的最前沿。2006年作為主要譯者參與瞭 AjaxcincAction(中譯本《Ajax實戰》,由人民郵電齣版社齣版)的翻譯工作。之後為Erlang強大的並發能力所吸引,是國內學習和傳播 Erlang技術的第一批人,迄今已有2年多的實際開發經驗。在2007年3月創建瞭Erlang中文社區(erlang-china.org),現在是國內Erlang愛好者聚集和分享資料的主要網站。
金尹,長期從事電信行業的大規模語音通信程序的研發,有豐富的並發/分布式網絡係統的開發經驗。業餘從事於數學與編程語言理論,以及並行計算方麵的研究。緻力於在國內推廣函數式語言的發展,分彆在2001年和2006年在《程序員》雜誌上介紹 Python、Erlang等前衛的編程理念。
第1章 引言
1.1 路綫圖
1.2 正式起航
1.3 緻謝
第2章 入門
2.1 概覽
2.1.1 階段1:茫然無緒
2.1.2 階段2:初窺門徑
2.1.3 階段2.5:觀其大略,不求甚解
2.1.4 階段3:運用自如
2.1.5 重中之重
2.2 Erlang安裝
2.2.1 二進製發布版
2.2.2 從源代碼創建Erlang
2.2.3 使用CEAN
2.3 本書代碼
2.4 啓動shell
2.5 簡單的整數運算
2.6 變量
2.6.1 變量不變
2.6.2 模式匹配
2.6.3 單一賦值為何有益於編寫質量更高的代碼
2.7 浮點數
2.8 原子
2.9 元組
2.9.1 創建元組
2.9.2 從元組中提取字段值
2.10 列錶
2.10.1 術語
2.10.2 定義列錶
2.10.3 從列錶中提取元素
2.11 字符串
2.12 再論模式匹配
第3章 順序型編程
3.1 模塊
3.2 購物係統——進階篇
3.3 同名不同目的函數
3.4 fun
3.4.1 以fun為參數的函數
3.4.2 返迴fun的函數
3.4.3 定義你自己的抽象流程控製
3.5 簡單的列錶處理
3.6 列錶解析
3.6.1 快速排序
3.6.2 畢達哥拉斯三元組
3.6.3 變位詞
3.7 算術錶達式
3.8 斷言
3.8.1 斷言序列
3.8.2 斷言樣例
3.8.3 true斷言的使用
3.8.4 過時的斷言函數
3.9 記錄
3.9.1 創建和更新記錄
3.9.2 從記錄中提取字段值
3.9.3 在函數中對記錄進行模式匹配
3.9.4 記錄隻是元組的僞裝
3.10 case/if錶達式
3.10.1 case錶達式
3.10.2 if錶達式
3.11 以自然順序創建列錶
3.12 纍加器
第4章 異常
4.1 異常
4.2 拋齣異常
4.3 try...catch
4.3.1 縮減版本
4.3.2 使用try...catch的編程慣例
4.4 catch
4.5 改進錯誤信息
4.6 try...catch的編程風格
4.6.1 經常會返迴錯誤的程序
4.6.2 齣錯幾率比較小的程序
4.7 捕獲所有可能的異常
4.8 新老兩種異常處理風格
4.9 棧跟蹤
第5章 順序型編程進階
5.1 BIF
5.2 二進製數據
5.3 比特語法
5.3.1 bit色彩的封包與解包
5.3.2 比特語法錶達式
5.3.3 高級比特語法樣例
5.4 小問題集錦
5.4.1 apply
5.4.2 屬性
5.4.3 塊錶達式
5.4.4 布爾類型
5.4.5 布爾錶達式
5.4.6 字符集
5.4.7 注釋
5.4.8 epp
5.4.9 轉義符
5.4.10 錶達式和錶達式序列
5.4.11 函數引用
5.4.12 包含文件
5.4.13 列錶操作符++和--
5.4.14 宏
5.4.15 在模式中使用匹配操作符
5.4.16 數值類型
5.4.17 操作符優先級
5.4.18 進程字典
5.4.19 引用
5.4.20 短路布爾錶達式
5.4.21 比較錶達式
5.4.22 下劃綫變量
第6章 編譯並運行程序
6.1 開啓和停止Erlang shell
6.2 配置開發環境
6.2.1 為文件加載器設定搜索路徑
6.2.2 在係統啓動時批量執行命令
6.3 運行程序的幾種不同方法
6.3.1 在Erlang shell中編譯運行
6.3.2 在命令提示符下編譯運行
6.3.3 把程序當作escript腳本運行
6.3.4 用命令行參數編程
6.4 使用makefile進行自動編譯
6.4.1 makefile模闆
6.4.2 定製makefile模闆
6.5 在Erlang shell中的命令編輯
6.6 解決係統死鎖
6.7 如何應對故障
6.7.1 未定義/遺失代碼
6.7.2 makefile不能工作
6.7.3 shell沒有響應
6.8 獲取幫助
6.9 調試環境
6.10 崩潰轉儲
第7章 並發
第8章 並發編程
8.1 並發原語
8.2 一個簡單的例子
8.3 客戶/服務器介紹
8.4 創建一個進程需要花費多少時間
8.5 帶超時的receive
8.5.1 隻有超時的receive
8.5.2 超時時間為0的receive
8.5.3 使用一個無限等待超時進行接收
8.5.4 實現一個計時器
8.6 選擇性接收
8.7 注冊進程
8.8 如何編寫一個並發程序
8.9 尾遞歸技術
8.10 使用MFA啓動進程
8.11 習題
第9章 並發編程中的錯誤處理
9.1 鏈接進程
9.2 on_exit處理程序
9.3 遠程錯誤處理
9.4 錯誤處理的細節
9.4.1 捕獲退齣的編程模式
9.4.2 捕獲退齣信號(進階篇)
9.5 錯誤處理原語
9.6 鏈接進程集
9.7 監視器
9.8 存活進程
第10章 分布式編程
10.1 名字服務
10.1.1 第一步:一個簡單的名字服務
10.1.2 第二步:在同一颱機器上,客戶端運行於一個節點而服務器運行於第二個節點
10.1.3 第三步:讓客戶機和服務器運行於同一個局域網內的不同機器上
10.1.4 第四步:在因特網上的不同主機上分彆運行客戶機和服務器
10.2 分布式原語
10.3 分布式編程中使用的庫
10.4 有cookie保護的係統
10.5 基於套接字的分布式模式
10.5.1 lib_chan
10.5.2 服務器代碼
第11章 IRC Lite
11.1 消息序列圖
11.2 用戶界麵
11.3 客戶端程序
11.4 服務器端組件
11.4.1 聊天控製器
11.4.2 聊天服務器
11.4.3 群組管理器
11.5 運行程序
11.6 聊天程序源代碼
11.6.1 聊天客戶端
11.6.2 Lib_chan配置
11.6.3 聊天控製器
11.6.4 聊天服務器
11.6.5 聊天群組
11.6.6 輸入輸齣窗口
11.7 習題
第12章 接口技術
12.1 端口
12.2 為一個外部C程序添加接口
12.2.1 C程序
12.2.2 Erlang程序
12.3 open_port
12.4 內聯驅動
12.5 注意
第13章 對文件編程
13.1 庫的組織結構
13.2 讀取文件的不同方法
13.2.1 從文件中讀取所有Erlang數據項
13.2.2 從文件的數據項中一次讀取一項
13.2.3 從文件中一次讀取一行數據
13.2.4 將整個文件的內容讀入到一個二進製數據中
13.2.5 隨機讀取一個文件
13.2.6 讀取ID3標記
13.3 寫入文件的不同方法
13.3.1 嚮一個文件中寫入一串Erlang數據項
13.3.2 嚮文件中寫入一行
13.3.3 一步操作寫入整個文件
13.3.4 在隨機訪問模式下寫入文件
13.4 目錄操作
13.5 查詢文件的屬性
13.6 復製和刪除文件
13.7 小知識
13.8 一個搜索小程序
第14章 套接字編程
14.1 使用TCP
14.1.1 從服務器上獲取數據
14.1.2 一個簡單的TCP服務器
14.1.3 改進服務器
14.1.4 注意
14.2 控製邏輯
14.2.1 主動型消息接收(非阻塞)
14.2.2 被動型消息接收(阻塞)
14.2.3 混閤型模式(半阻塞)
14.3 連接從何而來
14.4 套接字的齣錯處理
14.5 UDP
14.5.1 最簡單的UDP服務器和客戶機
14.5.2 一個計算階乘UDP的服務器
14.5.3 關於UDP協議的其他注意事項
14.6 嚮多颱機器廣播消息
14.7 SHOUTcast服務器
14.7.1 SHOUTcast協議
14.7.2 SHOUTcast服務器的工作機製
14.7.3 SHOUTcast服務器的僞代碼
14.7.4 運行SHOUTcast服務器
14.8 進一步深入
第15章 ETS和DETS:大量數據的存儲機製
15.1 錶的基本操作
15.2 錶的類型
15.3 ETS錶的效率考慮
15.4 創建ETS錶
15.5 ETS程序示例
15.5.1 三字索引迭代器
15.5.2 構造錶
15.5.3 構造錶有多快
15.5.4 訪問錶有多快
15.5.5 勝齣的是……
15.6 DETS
15.7 我們沒有提及的部分
15.8 代碼清單
第16章 OTP概述
16.1 通用服務器程序的進化路綫
16.1.1 server 1:原始服務器程序
16.1.2 server 2:支持事務的服務器程序
16.1.3 server 3:支持熱代碼替換的服務器程序
16.1.4 server 4:同時支持事務和熱代碼替換
16.1.5 server 5:壓軸好戲
16.2 gen_server起步
16.2.1 第一步:確定迴調模塊的名稱
16.2.2 第二步:寫接口函數
16.2.3 第三步:編寫迴調函數
16.3 gen_server迴調的結構
16.3.1 啓動服務器程序時發生瞭什麼
16.3.2 調用服務器程序時發生瞭什麼
16.3.3 調用和通知
16.3.4 發給服務器的原生消息
16.3.5 Hasta la Vista, Baby(服務器的終止)
16.3.6 熱代碼替換
16.4 代碼和模闆
16.4.1 gen_server模闆
16.4.2 my_bank
16.5 進一步深入
第17章 Mnesia:Erlang數據庫
17.1 數據庫查詢
17.1.1 選取錶中所有的數據
17.1.2 選取錶中的數據
17.1.3 按條件選取錶中的數據
17.1.4 從兩個錶選取數據(關聯查詢)
17.2 增刪錶中的數據
17.2.1 增加一行
17.2.2 刪除一行
17.3 Mnesia事務
17.3.1 取消一個事務
17.3.2 加載測試數據
17.3.3 do()函數
17.4 在錶中保存復雜數據
17.5 錶的類型和位置
17.5.1 創建錶
17.5.2 錶屬性的常見組閤
17.5.3 錶的行為
17.6 創建和初始化數據庫
17.7 錶查看器
17.8 進一步深入
17.9 代碼清單
第18章 構造基於OTP的係統
18.1 通用的事件處理
18.2 錯誤日誌
18.2.1 記錄一個錯誤
18.2.2 配置錯誤日誌
18.2.3 分析錯誤
18.3 警報管理
18.4 應用服務
18.4.1 素數服務
18.4.2 麵積服務
18.5 監控樹
18.6 啓動整個係統
18.7 應用程序
18.8 文件係統的組織
18.9 應用程序監視器
18.10 進一步深入
18.11 我們如何創建素數
第19章 多核小引
第20章 多核編程
20.1 如何在多核的CPU上更有效率地運行
20.1.1 使用大量進程
20.1.2 避免副作用
20.1.3 順序瓶頸
20.2 並行化順序代碼
20.3 小消息、大計算
20.4 映射—歸並算法和磁盤索引程序
20.4.1 映射—歸並算法
20.4.2 全文檢索
20.4.3 索引器的操作
20.4.4 運行索引器
20.4.5 評論
20.4.6 索引器的代碼
20.5 麵嚮未來的成長
附錄A 給我們的程序寫文檔
附錄B Microsoft Windows環境下的Erlang環境
附錄C 資源
附錄D 套接字應用程序
附錄E 其他
附錄F 模塊和函數參考
索引
· · · · · · (
收起)
評分
☆☆☆☆☆
隻看瞭開頭,覺得 XSLT 1.0 若是包含瞭列錶的概念,未必不會成為 Erlang
評分
☆☆☆☆☆
隻看瞭開頭,覺得 XSLT 1.0 若是包含瞭列錶的概念,未必不會成為 Erlang
評分
☆☆☆☆☆
erlang的書真的不多
評分
☆☆☆☆☆
贊爆瞭!!既有FP的傳統,又有很好的消息通訊機製,簡直是一把屠龍刀...不管做不做高性能方麵的應用,這本書都值得一讀,當開闊眼界也好啊~~~~~~~
評分
☆☆☆☆☆
2010年國慶讀完第一遍。確實對現有編程思維的衝擊很大,待繼續深入。
評分
☆☆☆☆☆
我本身并不是一个Erlang程序员,而且我想国内专门做Erlang开发的人应该很少吧。 大家都知道,Erlang是一个优秀的容错性,并发性很棒的语言,能够很棒地适应多核时代。 于是我看了这本书,但是在这本书里我没有看到太多我感兴趣的内容,我希望知道的是Erlang的实现原理,对待多...
評分
☆☆☆☆☆
我运行后,弹出四个对话窗口,然后就错误了! 下面是错误i的log: =ERROR REPORT==== 31-Aug-2011::09:30:56 === Error in process <0.53.0> with exit value: {undef,[{lib_md5,string,["axjxhxoabhkcythsqnvbqwhxbAsDT67aQ"]},{lib_chan,authenticate,4},{lib_chan,connect,5...
評分
☆☆☆☆☆
第五章 95页 5.3节 关于计算mp3文件同步帧的例子 FrameLength = framelength(Layer, BitRate, SampleRate, Padding), if FrameLength < 21 -> exit(frameSize); true -> {ok, FrameLength, {Layer,BitRate,SampleRate,Vsn,Bits}} end; 为什么FrameLength要小于21呢?
評分
☆☆☆☆☆
本书对erlang编程涉及到的各个方面,做了循序渐进的,深入浅出的描述。几乎没有什么废话,每一章都需要看,因为实用的erlang程序几乎要用到这里描述的每一个知识点。 花了一周时间看完,边看边敲代码,难度不大。 之后作一个实际的项目,把otp使用一下,基本上就掌握了。剩...
評分
☆☆☆☆☆
老头在书里明白的表示了对现在的erlang实现并不非常熟悉,尤其是一些偏门的细节,毕竟erlang的开发已经交由一个专门的小组做,老头可能专心研究容错和并行的理论去了,或者又有啥新的东西要设计。这样带来的好处是老头不像很多语言的创始人那样揪着自己得意却实际没人用的特性...