第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 模塊和函數參考
索引
· · · · · · (
收起)