Erlang程序設計檢視原始碼討論檢視歷史
《Erlang程序設計》,[瑞典] Joe Armstro 著,出版社: 人民郵電出版社。
人民郵電出版社,1953年10月成立,隸屬於中國工信出版傳媒集團,是工業和信息化部主管的大型專業出版社[1]。建社以來,人民郵電出版社圍繞「立足工信事業,面向現代社會,傳播科學知識,引領美好生活」的出版宗旨,已發展成為集圖書、期刊、音像電子及數字出版於一體的綜合性出版大社[2]。
內容簡介
本書是講述下一代編程語言Erlang 的權威著作,主要涵蓋順序型編程、異常處理、編譯和運行代碼、並發編程、並發編程中的錯誤處理、分布式編程、多核編程等內容。本書將幫助讀者在消息傳遞的基礎上構建分布式的並發系統,免去鎖與互斥技術的羈絆,使程序在多核CPU 上高效運行。本書講述的各種設計方法和行為將成為設計容錯與分布式系統中的利器。
作者介紹
Joe Armstrong,Erlang最初的設計者和實現者,也是Erlang OTP系統項目的首席架構師。他擁有瑞典皇家理工學院博士學位,是容錯系統開發領域的世界級專家。此外,他還在開發旨在替代XML的標記語言ML9。現任職於愛立信公司。
目錄
第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 模塊和函數參考
索引
參考文獻
- ↑ 我國出版社的等級劃分和分類標準,知網出書,2021-03-01
- ↑ 人民郵電出版社簡介,人民郵電出版社