书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统,免去锁与互斥技术的羁绊,使程序在多核CPU 上高效运行。本书讲述的各种设计方法和行为将成为设计容错与分布式系统中的利器。.
在多核、并发、分布为王的时代,谁将成为下一个主流编程语言?来自全世界的众多专家都认为,Erlang最有可能在竞争中胜出。
Erlang开源语言系出名门,通信巨头爱立信公司用它开发出了可靠性惊人的交换机系统AXD301。它天生就是面向并发、分布和高容错的,兼有函数式语言和脚本语言的各种优点,而且已经用于商业开发多年,具有稳定性极高的虚拟机和平台库。有了这些天时地利,无怪乎Erlang能够迅速成为热门的开发语言,除了广泛应用于通信行业之外,它已经进入了各个领域:Facebook用它实现了聊天系统,Yahoo用它重写了Delicious,Amazon用它开发了云计算数据服务SimpleDB,还有多人游戏、测试工具、电子支付、数据采集与监控、企业消息、电子邮件、空中交通管制……..
本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,较深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、MNesia、Ets和Dets等主题,更为精彩的是,大师亲自操刀,构建了MapReduce实例和多人聊天实例,一定让你大呼过瘾。...
第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 模块和函数参考
索引
《暗黑家族》内容简介:怪死的姐姐的钱包里有一张纸条—— “这个家里住着恶魔。”原本幸福的家庭因姐姐的离去逐渐走向崩坏,潜藏于
《背包为家》内容简介:本书是儿童文学著名作家张国龙新近创作的一本随笔美文集,共分为背包回家、遥想他乡、天涯情旅三卷,其中所
《网页美术设计原理及实战策略》是作者基于10余年美术设计和网页设计教学经验编写的关于网页美术设计原理的教材,其中涉及网页美
《知堂回想录(下)》内容简介:《知堂回想录》是周作人晚年回顾自己一生重要经历,写成之内容丰富的传世巨作。最初只有“北大感旧
《第N+1个》内容简介:12名受害人,凶手作案手法相同,犯罪现场相似,绵延一年,警方却毫无头绪。一部名为《第N 1个》的小说在风口
EXCEL应用大全 本书特色 《Excel应用大全》一书适合各个层次的Excel用户,即可作为初学者的入门指南,又可作为中、高级用户的参考手册。书中大量的实例还...
《色彩感知学》内容简介:色彩学习从视觉上论证客观事实与主观感受之间的落差——观看的心理因素。是关于“看”的哲学和心理学。
Thisbookexplorestheintuitiveappealofneuralnetworksandthegeneticalgorithminfinanc...
《结构思考力Ⅱ》内容简介:本书是有关结构思维的,由李忠秋老师亲自执笔,结构思考力系列丛书之一。它告诉我们只要在清晰思考的基
《亲子关系:决定孩子一生幸福的密码》内容简介:本书主要分为“好的亲子关系是家庭教育成功的基石”、“父母心中的亲子关系困惑”
《做个风格插画家》共有三个单元,第一单元采访5位国际顶尖时尚的插画家,在剖析一位成功插画家的过程经历之余,也可以看见他们如
《丝绸之路:从蓬莱到罗马》内容简介:山东蓬莱是古代海上丝绸之路的一个起点,也是陆上丝绸之路的东部起点;而罗马作为西欧文明的
手感設計之所以會成為日本設計的特色,就在於日本人將設計不只是視之為功能的詮釋品而已。設計代表了文化、便利生活的器具、成為
《中国客家对联大典(第三卷)(精)》内容简介:本书收录的对联是全世界历代客家人或含有客家元素的对联作品。这里包括全世界客家
《视觉艺术原理(第8版)》,精心融汇了以前各版的优势,强调了《视觉艺术原理(第8版)》在全球视觉艺术领域中的引领地位。并率先把
数据驱动的金融时间序列预测模型研究 本书特色 以非线性动力学的观点看来,现代金融理论中金融系统的不确定性恰恰源于其自身就是一个受多种因素综合影响的具有开放性质的...
《表演与偷窥》内容简介:本书是小白最新结集的随笔集,延续作者上一本畅销随笔集《好色的哈姆莱特》的特点——“以男女之事的瓶子
本书着重讲解采用波形级仿真技术来评估通信系统性能的原理、方法和实现技术。回顾和总结了相关理论基础,重点讨论实用性的方法,
物联网技术概论 本书特色 彭力编著的《物联网技术概论》围绕20多个核心知识点,分为10章展开教学和物联网技术学习之旅。第1章概要介绍物联网的相关知识点,...
《网页配色实用手册》在日常生活中,色彩早已广泛地深入到人们的精神生活和物质生活中,它是一种能够激发情感、刺激感官的重要元