Erlang程序设计
分類: 图书,计算机/网络,程序设计,其他,
作者: (瑞典)阿姆斯特朗著,赵东伟,金尹译
出 版 社: 人民邮电出版社
出版时间: 2008-12-1字数: 691000版次: 1页数: 427印刷时间: 2008/12/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787115188694包装: 平装编辑推荐
Erlang之父权威著作,领先一步,精通下一代主流编程语言,从这里开始,拥抱未来。
在多核、并发、分布为王的时代,谁将成为下一个主流编程语言?来自全世界的众多专家都认为,Erlang最有可能在竞争中胜出。
Erlang开源语言系出名门,通信巨头爱立信公司用它开发出了可靠性惊人的交换机系统AXD301。它天生就是面向并发、分布和高容错的,兼有函数式语言和脚本语言的各种优点,而且已经用于商业开发多年,具有稳定性极高的虚拟机和平台库。有了这些天时地利,无怪乎Erlang能够迅速成为热门的开发语言,除了广泛应用于通信行业之外,它已经进入了各个领域:Facebook用它实现了聊天系统,Yahoo用它重写了Delicious,Amazon用它开发了云计算数据服务SimpleDB,还有多人游戏、测试工具、电子支付、数据采集与监控、企业消息、电子邮件、空中交通管制……
本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,较深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、MNesia、Ets和Dets等主题,更为精彩的是,大师亲自操刀,构建了MapReduce实例和多人聊天实例,一定让你大呼过瘾。
内容简介
本书是讲述下一代编程语言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.2Erlang安装
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.4fun
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.3true断言的使用
3.8.4过时的断言函数
3.9记录
3.9.1创建和更新记录
3.9.2从记录中提取字段值
3.9.3在函数中对记录进行模式匹配
3.9.4记录只是元组的伪装
3.10case/if表达式
3.10.1case表达式
3.10.2if表达式
3.11以自然顺序创建列表
3.12累加器
第4章异常
4.1异常
4.2抛出异常
4.3try...catch
4.3.1缩减版本
4.3.2使用try...catch的编程惯例
4.4catch
4.5改进错误信息
4.6try...catch的编程风格
4.6.1经常会返回错误的程序
4.6.2出错几率比较小的程序
4.7捕获所有可能的异常
4.8新老两种异常处理风格
4.9栈跟踪
第5章顺序型编程进阶
5.1BIF
5.2二进制数据
5.3比特语法
5.3.1bit色彩的封包与解包
5.3.2比特语法表达式
5.3.3高级比特语法样例
5.4小问题集锦
5.4.1apply
5.4.2属性
5.4.3块表达式
5.4.4布尔类型
5.4.5布尔表达式
5.4.6字符集
5.4.7注释
5.4.8epp
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.1makefile模板
6.4.2定制makefile模板
6.5在Erlang shell中的命令编辑
6.6解决系统死锁
6.7如何应对故障
6.7.1未定义/遗失代码
6.7.2makefile不能工作
6.7.3shell没有响应
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.2on_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.1lib_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.2Lib_chan配置
11.6.3聊天控制器
11.6.4聊天服务器
11.6.5聊天群组
11.6.6输入输出窗口
11.7习题
第12章接口技术
12.1端口
12.2为一个外部C程序添加接口
12.2.1C程序
12.2.2Erlang程序
12.3open_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.5UDP
14.5.1最简单的UDP服务器和客户机
14.5.2一个计算阶乘UDP的服务器
14.5.3关于UDP协议的其他注意事项
14.6向多台机器广播消息
14.7SHOUTcast服务器
14.7.1SHOUTcast协议
14.7.2SHOUTcast服务器的工作机制
14.7.3SHOUTcast服务器的伪代码
14.7.4运行SHOUTcast服务器
14.8进一步深入
第15章ETS和DETS:大量数据的存储机制
15.1表的基本操作
15.2表的类型
15.3ETS表的效率考虑
15.4创建ETS表
15.5ETS程序示例
15.5.1三字索引迭代器
15.5.2构造表
15.5.3构造表有多快
15.5.4访问表有多快
15.5.5胜出的是……
15.6DETS
15.7我们没有提及的部分
15.8代码清单
第16章OTP概述
16.1通用服务器程序的进化路线
16.1.1server 1:原始服务器程序
16.1.2server 2:支持事务的服务器程序
16.1.3server 3:支持热代码替换的服务器程序
16.1.4server 4:同时支持事务和热代码替换
16.1.5server 5:压轴好戏
16.2gen_server起步
16.2.1第一步:确定回调模块的名称
16.2.2第二步:写接口函数
16.2.3第三步:编写回调函数
16.3gen_server回调的结构
16.3.1启动服务器程序时发生了什么
16.3.2调用服务器程序时发生了什么
16.3.3调用和通知
16.3.4发给服务器的原生消息
16.3.5Hasta la Vista, Baby(服务器的终止)
16.3.6热代码替换
16.4代码和模板
16.4.1gen_server模板
16.4.2my_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.3Mnesia事务
17.3.1取消一个事务
17.3.2加载测试数据
17.3.3do()函数
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给我们的程序写文档
附录BMicrosoft Windows环境下的Erlang环境
附录C资源
附录D套接字应用程序
附录E其他
附录F模块和函数参考
索引
媒体评论
“Erlang让我有醍醐灌顶之感,它促使我开始以完全不同的方式思考问题。Amstrong能够亲自写作本书,实乃社区之福。”
——Dave Thomas,软件开发大师,《程序员修炼之道》艺术作者
“向所有程序员强烈推荐本书,我们都将从中获益匪浅。”
——Gary Pollice,IBM Rational开发团队前核心成员,Worcester理工学院教授
Erlang是目前唯一成熟可靠的能够开发高扩展性并发软件系统的语言,它将成为下一个Java。
——Ralph Johnson,软件开发大师《设计模式》作者之一
书摘插图
第1章引言
1.2正式起航
从前,一名程序员偶然读到了一本古怪的程序语言图书。相等其实不是相等,变量实际上不能改变,它的语法一切都那么陌生。更糟糕的是,它甚至都不是面向对象的。这些程序,呃,实在太另类了……
另类的不仅仅是程序,编程的教学步骤也特立独行。它的作者一直喋喋不休地教授并发、分布和容错,不断地唠叨着一种叫做COP(Concurrency Oriented Programming,面向并发编程)的方法——管它叫什么呢。
不过有些例子看上去很好玩。那天夜里,这个程序员注视着那个聊天程序的小例子。它是多么的小巧可爱而又通俗易懂,只是那些语法有那么一丁点儿古怪,但它确实简单到不能再简单了。
开始编程并不困难,用不了几行代码,文件共享和加密通信便跃然纸上。于是这个程序员开始敲起了他的键盘……
……