Erlang程序设计(第2版)

Erlang程序设计(第2版) pdf epub mobi txt 电子书 下载 2025

[瑞典] Joe,Armstrong 著,牛化成 译
图书标签:
  • Erlang
  • 并发编程
  • 函数式编程
  • OTP
  • 电信
  • 分布式系统
  • 容错性
  • 开发
  • 编程语言
  • 第二版
想要找书就要到 图书大百科
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115354570
版次:1
商品编码:11477306
包装:平装
丛书名: 图灵程序设计丛书
开本:16开
出版时间:2014-06-01
页数:428
正文语种:中文

具体描述

编辑推荐

  

在多核、并发、分布为王的时代,谁将成为下一个主流编程语言?来自全世界的众多专家都认为,Erlang有可能在竞争中胜出。


  

Erlang开源语言系出名门,通信巨头爱立信公司用它开发出了可靠性惊人的交换机系统AXD301。它天生就是面向并发、分布和高容错的,兼有函数式语言和脚本语言的各种优点,而且已经用于商业开发多年,具有稳定性极高的虚拟机和平台库。有了这些天时地利,无怪乎Erlang能够迅速成为热门的开发语言,除了广泛应用于通信行业之外,它已经进入了各个领域:Facebook用它实现了聊天系统,Yahoo用它重写了Delicious,网站用它开发了云计算数据服务SimpleDB,还有多人游戏、测试工具、电子支付、数据采集与监控、企业消息、电子邮件、空中交通管制……

内容简介

  

本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。第2版全新改写,反应了自第1版面世以来Erlang历经的所有变化,添加了大量针对初学者的内容,并在每章后都附上了练习题。


  《Erlang程序设计(第2版)》适合Erlang初学者和中级水平Erlang程序员学习参考。

作者简介

Joe Armstrong


Erlang最初的设计者和实现者,也是Erlang OTP系统项目的首席架构师。他拥有瑞典皇家理工学院博士学位,是容错系统开发领域的世界级专家。现就职于爱立信公司。

内页插图

精彩书评

  

“Erlang是目前成熟可靠的能够开发高扩展性并发软件系统的语言,它将成为下一个Java。”——Ralph Johnson,软件开发大师,《设计模式》作者之一

“Joe的《Erlang程序设计》一书影响巨大。第2版做了重要更新,万众期待,不但涵盖核心语言和框架的基本内容,还涉及rebar和cowboy这样的关键社区项目。有经验的Erlang程序员也能在书里找到各种有用的提示和新见解,初学者则会喜欢Joe在介绍和阐释关键语言概念时所使用的清楚和有条理的方式。”——Alexander Gounares,AOL前CTO,比尔?盖茨的顾问,Concurix公司的创始人兼CEO

“一部佳作。对函数式编程的介绍理性且实用。”——Gilad Bracha,Java语言和Java虚拟机规范的共同作者,Newspeak语言的创造者,Dart语言团队成员

“本书是理解如何进行Actor编程的优秀资源,不仅适用于Erlang开发人员,还适用于那些想要理解Actor为何如此重要,以及为何它们是构建反应式、可扩展、可恢复和事件驱动型系统的重要工具的程序员。”——Jonas Boner,Akka项目和AspectWerkz面向方面编程框架创立者,Typesafe联合创始人兼CTO

“Erlang让我有醍醐灌顶之感,它促使我开始以完全不同的方式思考问题,Armstrong能够亲自写作本书,实乃Erlang爱好者之福。”——David Thomas,软件开发大师,《程序员修炼之道》作者

目录

目 录

第一部分 为何用Erlang

第1章 什么是并发 2
1.1 给并发建模 2
1.1.1 开始模拟 3
1.1.2 发送消息 4
1.1.3 接收消息 4
1.2 并发的益处 4
1.3 并发程序和并行计算机 5
1.4 顺序和并发编程语言 6
1.5 小结 6

第2章 Erlang速览 7
2.1 Shell 7
2.1.1 =操作符 8
2.1.2 变量和原子的语法 8
2.2 进程、模块和编译 9
2.2.1 在shell里编译并运行Hello World 9
2.2.2 在Erlang shell外编译 9
2.3 你好,并发 10
2.3.1 文件服务器进程 10
2.3.2 客户端代码 13
2.3.3 改进文件服务器 14
2.4 练习 14

第二部分 顺序编程

第3章 基本概念 16
3.1 启动和停止Erlang shell 16
3.1.1 在shell里执行命令 17
3.1.2 可能出错的地方 17
3.1.3 在Erlang shell里编辑命令 18
3.2 简单的整数运算 18
3.3 变量 19
3.3.1 Erlang的变量不会变 20
3.3.2 变量绑定和模式匹配 20
3.3.3 为什么一次性赋值让程序变得更好 21
3.4 浮点数 22
3.5 原子 22
3.6 元组 23
3.6.1 创建元组 24
3.6.2 提取元组的值 25
3.7 列表 26
3.7.1 专用术语 26
3.7.2 定义列表 27
3.7.3 提取列表元素 27
3.8 字符串 27
3.9 模式匹配再探 29
3.10 练习 30

第4章 模块与函数 31
4.1 模块是存放代码的地方 31
4.1.1 常见错误 33
4.1.2 目录和代码路径 33
4.1.3 给代码添加测试 33
4.1.4 扩展程序 34
4.1.5 分号放哪里 36
4.2 继续购物 36
4.3 fun:基本的抽象单元 39
4.3.1 以fun作为参数的函数 40
4.3.2 返回fun的函数 41
4.3.3 定义你自己的控制抽象 42
4.4 简单列表处理 42
4.5 列表推导 45
4.5.1 Quicksort 46
4.5.2 毕达哥拉斯三元数组 47
4.5.3 回文构词 48
4.6 内置函数 48
4.7 关卡 49
4.7.1 关卡序列 49
4.7.2 关卡示例 50
4.7.3 true关卡的作用 51
4.8 case和if表达式 52
4.8.1 case表达式 52
4.8.2 if表达式 53
4.9 构建自然顺序的列表 54
4.10 归集器 55
4.11 练习 56

第5章 记录与映射组 57
5.1 何时使用映射组或记录 57
5.2 通过记录命名元组里的项 58
5.2.1 创建和更新记录 59
5.2.2 提取记录字段 59
5.2.3 在函数里模式匹配记录 59
5.2.4 记录是元组的另一种形式 60
5.3 映射组:关联式键-值存储 60
5.3.1 映射组语法 60
5.3.2 模式匹配映射组字段 62
5.3.3 操作映射组的内置函数 63
5.3.4 映射组排序 64
5.3.5 以JSON为桥梁 64
5.4 练习 66

第6章 顺序程序的错误处理 67
6.1 处理顺序代码里的错误 67
6.2 用try...catch捕捉异常错误 69
6.2.1 try...catch具有一个值 69
6.2.2 简写法 70
6.2.3 try...catch编程样例 71
6.3 用catch捕捉异常错误 72
6.4 针对异常错误的编程样式 72
6.4.1 改进错误消息 72
6.4.2 经常返回错误时的代码 73
6.4.3 错误可能有但罕见时的代码 73
6.4.4 捕捉一切可能的异常错误 74
6.5 栈跟踪 74
6.6 抛错要快而明显,也要文明 75
6.7 练习 75

第7章 二进制型与位语法 76
7.1 二进制型 76
7.2 位语法 78
7.2.1 打包和解包16位颜色 78
7.2.2 位语法表达式 79
7.2.3 位语法的真实例子 81
7.3 位串:处理位级数据 85
7.4 练习 87

第8章 Erlang顺序编程补遗 88
8.1 apply 89
8.2 算术表达式 90
8.3 元数 91
8.4 属性 91
8.4.1 预定义的模块属性 91
8.4.2 用户定义的模块属性 93
8.5 块表达式 94
8.6 布尔值 94
8.7 布尔表达式 95
8.8 字符集 95
8.9 注释 95
8.10 动态代码载入 96
8.11 Erlang的预处理器 99
8.12 转义序列 99
8.13 表达式和表达式序列 100
8.14 函数引用 101
8.15 包含文件 101
8.16 列表操作:++和-- 102
8.17 宏 102
8.18 模式的匹配操作符 104
8.19 数字 105
8.19.1 整数 105
8.19.2 浮点数 105
8.20 操作符优先级 106
8.21 进程字典 106
8.22 引用 108
8.23 短路布尔表达式 108
8.24 比较数据类型 108
8.25 元组模块 109
8.26 下划线变量 109
8.27 练习 110

第9章 类型 111
9.1 指定数据和函数类型 111
9.2 Erlang的类型表示法 113
9.2.1 类型的语法 113
9.2.2 预定义类型 114
9.2.3 指定函数的输入输出类型 114
9.2.4 导出类型和本地类型 116
9.2.5 不透明类型 116
9.3 dialyzer教程 117
9.3.1 错误使用内置函数的返回值 118
9.3.2 内置函数的错误参数 119
9.3.3 错误的程序逻辑 119
9.3.4 使用dialyzer 120
9.3.5 干扰dialyzer的事物 120
9.4 类型推断与成功分型 121
9.5 类型系统的局限性 123
9.6 练习 125

第10章 编译和运行程序 126
10.1 改变开发环境 126
10.1.1 设置载入代码的搜索路径 126
10.1.2 在系统启动时执行一组命令 127
10.2 运行程序的不同方式 128
10.2.1 在Erlang shell里编译和运行 128
10.2.2 在命令提示符界面里编译和运行 129
10.2.3 作为Escript运行 130
10.2.4 带命令行参数的程序 131
10.3 用makefile使编译自动化 132
10.4 当坏事发生 135
10.4.1 停止Erlang 135
10.4.2 未定义(缺失)的代码 135
10.4.3 shell没有反应 136
10.4.4 我的makefile不工作 137
10.4.5 Erlang崩溃而你想阅读故障转储文件 137
10.5 获取帮助 138
10.6 调节运行环境 138
10.7 练习 139

第三部分 并发和分布式程序

第11章 现实世界中的并发 142

第12章 并发编程 145
12.1 基本并发函数 145
12.2 客户端-服务器介绍 147
12.3 进程很轻巧 151
12.4 带超时的接收 153
12.4.1 只带超时的接收 154
12.4.2 超时值为0的接收 154
12.4.3 超时值为无穷大的接收 155
12.4.4 实现一个定时器 155
12.5 选择性接收 156
12.6 注册进程 157
12.7 关于尾递归的说明 158
12.8 用MFA或Fun进行分裂 160
12.9 练习 160

第13章 并发程序中的错误 161
13.1 错误处理的理念 161
13.1.1 让其他进程修复错误 162
13.1.2 任其崩溃 162
13.1.3 为何要崩溃 162
13.2 错误处理的术语含义 163
13.3 创建连接 164
13.4 同步终止的进程组 164
13.5 设立防火墙 165
13.6 监视 166
13.7 基本错误处理函数 166
13.8 容错式编程 167
13.8.1 在进程终止时执行操作 167
13.8.2 让一组进程共同终止 168
13.8.3 生成一个永不终止的进程 169
13.9 练习 170

第14章 分布式编程 171
14.1 两种分布式模型 171
14.2 编写一个分布式程序 172
14.3 创建名称服务器 173
14.3.1 第1阶段:一个简单的名称服务器 173
14.3.2 第2阶段:客户端在一个节点,服务器在相同主机的另一个节点 174
14.3.3 第3阶段:同一局域网内不同机器上的客户端和服务器 175
14.3.4 第4阶段:跨互联网不同主机上的客户端和服务器 176
14.4 分布式编程的库和内置函数 177
14.4.1 远程分裂示例 178
14.4.2 文件服务器再探 180
14.5 cookie保护系统 181
14.6 基于套接字的分布式模型 182
14.6.1 用lib_chan控制进程 182
14.6.2 服务器代码 183
14.7 练习 185

第四部分 编程库与框架

第15章 接口技术 188
15.1 Erlang如何与外部程序通信 188
15.2 用端口建立外部C程序接口 190
15.2.1 C程序 191
15.2.2 Erlang程序 193
15.2.3 编译和链接端口程序 195
15.2.4 运行程序 195
15.3 在Erlang里调用shell脚本 196
15.4 高级接口技术 196
15.5 练习 197

第16章 文件编程 198
16.1 操作文件的模块 198
16.2 读取文件的几种方法 199
16.2.1 读取文件里的所有数据类型 199
16.2.2 分次读取文件里的数据类型 200
16.2.3 分次读取文件里的行 202
16.2.4 读取整个文件到二进制型中 202
16.2.5 通过随机访问读取文件 203
16.3 写入文件的各种方式 205
16.3.1 把数据列表写入文件 206
16.3.2 把各行写入文件 207
16.3.3 一次性写入整个文件 207
16.3.4 写入随机访问文件 209
16.4 目录和文件操作 209
16.4.1 查找文件信息 210
16.4.2 复制和删除文件 211
16.5 其他信息 211
16.6 一个查找工具函数 212
16.7 练习 214

第17章 套接字编程 216
17.1 使用TCP 216
17.1.1 从服务器获取数据 216
17.1.2 一个简单的TCP服务器 219
17.1.3 顺序和并行服务器 222
17.1.4 注意事项 223
17.2 主动和被动套接字 224
17.2.1 主动消息接收(非阻塞式) 224
17.2.2 被动消息接收(阻塞式) 225
17.2.3 混合消息接收(部分阻塞式) 225
17.3 套接字错误处理 226
17.4 UDP 227
17.4.1 最简单的UDP服务器与客户端 227
17.4.2 一个UDP阶乘服务器 228
17.4.3 UDP数据包须知 230
17.5 对多台机器广播 230
17.6 一个SHOUTcast服务器 231
17.6.1 SHOUTcast协议 232
17.6.2 SHOUTcast服务器的工作原理 232
17.6.3 SHOUTcast服务器的伪代码 233
17.6.4 运行SHOUTcast服务器 234
17.7 练习 235

第18章 用WebSocket和Erlang进行浏览 236
18.1 创建一个数字时钟 237
18.2 基本交互 239
18.3 浏览器里的Erlang shell 240
18.4 创建一个聊天小部件 241
18.5 简化版IRC 244
18.6 浏览器里的图形 247
18.7 浏览器-服务器协议 249
18.7.1 从Erlang发送消息到浏览器 249
18.7.2 从浏览器到Erlang的消息 250
18.8 练习 251

第19章 用ETS和DETS存储数据 252
19.1 表的类型 252
19.2 影响ETS表效率的因素 254
19.3 创建一个ETS表 255
19.4 ETS示例程序 255
19.4.1 三字母组合迭代函数 256
19.4.2 创建一些表 257
19.4.3 创建表所需的时间 258
19.4.4 访问表所需的时间 258
19.4.5 获胜者是…… 259
19.5 保存元组到磁盘 260
19.6 其余操作 262
19.7 练习 263

第20章 Mnesia:Erlang数据库 264
20.1 创建初始数据库 264
20.2 数据库查询 265
20.2.1 选择表里的所有数据 266
20.2.2 从表里选择数据 267
20.2.3 从表里有条件选择数据 268
20.2.4 从两个表里选择数据(联接) 268
20.3 添加和移除数据库里的数据 269
20.3.1 添加行 269
20.3.2 移除行 270
20.4 Mnesia事务 270
20.4.1 中止事务 271
20.4.2 载入测试数据 273
20.4.3 do()函数 273
20.5 在表里保存复杂数据 274
20.6 表的类型和位置 275
20.6.1 创建表 276
20.6.2 常用的表属性组合 277
20.6.3 表的行为 278
20.7 表查看器 278
20.8 深入挖掘 279
20.9 练习 279

第21章 性能分析、调试与跟踪 280
21.1 Erlang代码的性能分析工具 281
21.2 测试代码覆盖 281
21.3 生成交叉引用 283
21.4 编译器诊断信息 283
21.4.1 头部不匹配 284
21.4.2 未绑定变量 284
21.4.3 未结束字符串 284
21.4.4 不安全变量 284
21.4.5 影子变量 285
21.5 运行时诊断 286
21.6 调试方法 287
21.6.1 io:format调试 288
21.6.2 转储至文件 289
21.6.3 使用错误记录器 289
21.7 Erlang调试器 289
21.8 跟踪消息与进程执行 291
21.9 Erlang代码的测试框架 294
21.10 练习 295

第22章 OTP介绍 296
22.1 通用服务器之路 297
22.1.1 Server 1:基本的服务器 297
22.1.2 Server 2:实现事务的服务器 298
22.1.3 Server 3:实现热代码交换的服务器 299
22.1.4 Server 4:事务与热代码交换 301
22.1.5 Server 5:更多乐趣 302
22.2 gen_server入门 304
22.2.1 确定回调模块名 304
22.2.2 编写接口方法 305
22.2.3 编写回调方法 305
22.3 gen_server的回调结构 308
22.3.1 启动服务器 308
22.3.2 调用服务器 308
22.3.3 调用和播发 309
22.3.4 发给服务器的自发性消息 310
22.3.5 后会有期,宝贝 310
22.3.6 代码更改 311
22.4 填写gen_server模板 311
22.5 深入探索 313
22.6 练习 313

第23章 用OTP构建系统 315
23.1 通用事件处理 316
23.2 错误记录器 318
23.2.1 记录错误 318
23.2.2 配置错误记录器 319
23.2.3 分析错误 323
23.3 警报管理 324
23.4 应用程序服务器 326
23.4.1 质数服务器 326
23.4.2 面积服务器 327
23.5 监控树 328
23.6 启动系统 331
23.7 应用程序 335
23.8 文件系统组织方式 336
23.9 应用程序监视器 337
23.10 怎样计算质数 338
23.11 深入探索 340
23.12 练习 341

第五部分 构建应用程序

第24章 编程术语 344
24.1 保持Erlang世界观 344
24.2 多用途服务器 346
24.3 有状态的模块 348
24.4 适配器变量 349
24.5 表意编程 351
24.6 练习 353

第25章 第三方程序 354
25.1 制作可共享代码存档并用rebar管理代码 354
25.1.1 安装rebar 354
25.1.2 在GitHub上创建一个新项目 355
25.1.3 在本地克隆这个项目 355
25.1.4 制作一个OTP应用程序 356
25.1.5 宣传你的项目 356
25.2 整合外部程序与我们的代码 357
25.3 生成依赖项本地副本 358
25.4 用cowboy构建嵌入式Web服务器 359
25.5 练习 364

第26章 多核CPU编程 366
26.1 给Erlang程序员的好消息 367
26.2 如何在多核CPU中使程序高效运行 367
26.2.1 使用大量进程 368
26.2.2 避免副作用 368
26.2.3 避免顺序瓶颈 369
26.3 让顺序代码并行 370
26.4 小消息,大计算 372
26.5 用mapreduce使计算并行化 376
26.6 练习 380

第27章 福尔摩斯的最后一案 381
27.1 找出数据的相似度 381
27.2 sherlock演示 382
27.2.1 获取并预处理数据 382
27.2.2 寻找最像给定文件的邮件 383
27.2.3 搜索指定作者、日期或标题的邮件 385
27.3 数据分区的重要性 386
27.4 给邮件添加关键词 386
27.4.1 词汇的重要性:TF*IDF权重 387
27.4.2 余弦相似度:两个权重向量的相似程度 388
27.4.3 相似度查询 389
27.5 实现方式概览 389
27.6 练习 390
27.7 总结 391

附录A OTP模板 392
附录B 一个套接字应用程序 398
附录C 一种简单的执行环境 413

精彩书摘

文件的第一行是模块声明。声明里的模块名必须与存放该模块的主文件名相同。
第二行是导出声明。Name/N这种记法是指一个带有N个参数的函数Name,N被称为函数的元数(arity)。export的参数是由Name/N项目组成的一个列表。因此,—export((area/1))的意思是带有一个参数的函数area可以在此模块之外调用。
未从模块里导出的函数只能在模块内调用。已导出函数就相当于面向对象编程语言(OOPL)里的公共方法,未导出函数则相当于OOPL里的私有方法。
area函数有两个子句。这些子句由一个分号隔开,最后的子句以句号加空白结束。每条子句都有一个头部和一个主体,两者用箭头(—>)分隔。头部包含一个函数名,后接零个或更多个模式,主体则包含一列表达式(8.13节对表达式进行了定义),它们会在头部里的模式与调用参数成功匹配时执行。这些子句会根据它们在函数定义里出现的顺序进行匹配。
注意之前用于shell示例里的模式是如何成为area函数定义的一部分的。每个模式都精确对应一条子句。



前言/序言

越来越多的新硬件是并行的,所以新的编程语言必须支持并发性,否则它们将会灭亡。




“处理器行业的发展方向是不断添加更多的核心,但是没人知道如何给它们编程。我的意思是:双核?可以。四核?很难。八核?算了吧。”


——史蒂夫·乔布斯




乔布斯说得不对,我们其实知道如何给多核编程。我们在Erlang里就这么做,而且核心越多,许多程序就跑得越快。




Erlang从一开始就被设计用于自下而上地编写并发式、分布式、容错、可扩展和软实时(soft real-time)系统的程序。软实时系统是指电话交换机和银行业务系统这样的系统,对它们而言,快速的响应时间很重要,但偶尔错过了时限也不是什么灾难性的。Erlang系统已经被大规模部署,并且控制了全世界许多重要的移动通信网络。




如果你的问题是并发的,或者正在组建多用户的系统,或者你组建的系统需要随时间而改变,那么使用Erlang也许会为你节省大量的工作,因为Erlang就是特别为组建这些系统而设计的。


“问题在于可变状态,傻瓜。”


——摘自Brian Goetz所著《Java并发编程实战》




Erlang是函数式编程语言。函数式编程禁止代码存在副作用。副作用和并发性不能共存。在Erlang里,改变单个进程内部的状态是允许的,但一个进程改动另一个的状态则不行。Erlang里没有互斥没有同步方法,也没有内存共享式编程的各种设备。




各个进程能且只能用一种方法进行交互,那就是交换消息。进程之间不共享任何数据。这就是我们可以把Erlang程序轻松部署到多核或网络的原因。




编写Erlang程序时,实现的方式不是让单个进程执行所有任务,而是生成大量只做简单事情的小进程,并让它们互相通信。











《Erlang程序设计(第2版)》 引言 在快速发展的软件开发领域,对高并发、高可用性、容错性以及分布式系统的需求日益增长。Erlang,作为一种函数式、并发导向的编程语言,凭借其独特的“进程模型”和“信息传递”机制,在电信、金融、即时通讯等对稳定性要求极高的行业中赢得了广泛赞誉。本书《Erlang程序设计(第2版)》正是为希望深入理解并掌握Erlang语言精髓的开发者而精心打造。它不仅涵盖了Erlang语言的基础知识,更深入探讨了构建健壮、可伸缩系统的核心理念和实践技巧。 第一部分:Erlang语言基础 本部分将带领读者从零开始,逐步熟悉Erlang语言的语法、数据类型以及核心概念。 Erlang环境搭建与基础语法: 我们将介绍如何安装Erlang/OTP开发环境,并演示如何使用Erlang shell进行交互式编程。读者将学习Erlang的基本语法规则,包括变量的绑定、原子、整数、浮点数、列表、元组等数据结构的运用。函数定义、模式匹配以及函数调用等基本编程 constructs 将被详细讲解。 函数式编程范式: Erlang是一种纯粹的函数式语言,强调不可变性、没有副作用以及高阶函数。本章将深入探讨函数式编程的核心思想,例如递归、匿名函数(lambda)、列表推导式等,并展示如何在Erlang中运用这些技术来编写简洁、清晰的代码。 Erlang的并发模型: Erlang最引人注目的特性之一就是其轻量级进程(Process)模型。本章将详细介绍Erlang进程的概念,了解它们如何独立运行,并通过消息传递进行通信。我们将学习如何创建、管理进程,以及如何利用`spawn/1`、`send/2`、`receive`等原语实现进程间的异步通信。 OTP(Open Telecom Platform)概览: OTP是Erlang生态系统中至关重要的部分,它提供了一系列强大的工具、库和设计模式,用于构建可伸缩、容错的系统。本章将对OTP的核心组件,如Supervisor、GenServer、Application等进行初步介绍,为后续深入学习打下基础。 模式匹配与错误处理: 模式匹配是Erlang中一种强大的控制流结构,它使得代码更加清晰和简洁。本章将深入讲解模式匹配的应用场景,包括函数参数匹配、变量绑定、结构化数据解构等。同时,我们将学习Erlang内置的错误处理机制,如`try/catch`、`error/1`、`exit/1`以及如何通过捕获异常来提高程序的健壮性。 第二部分:构建健壮的Erlang应用 在掌握了Erlang的基础知识后,本部分将聚焦于如何利用OTP框架来构建真正可伸缩、高可用且易于维护的分布式系统。 GenServer:构建状态化进程: GenServer是OTP中最常用的行为(Behavior)之一,它为构建具有状态的服务器进程提供了一个标准化的接口。本章将详细讲解GenServer的回调函数,包括`init/1`、`handle_call/3`、`handle_cast/2`、`handle_info/2`等,以及如何利用GenServer来管理和操作进程内部的状态。我们将通过实际案例演示如何使用GenServer实现简单的数据库、缓存或RPC服务。 Supervisor:实现容错与自愈: 容错性是Erlang系统的基石。Supervisor是OTP中用于监控和管理子进程(worker)的关键组件。本章将深入探讨Supervisor的工作原理,包括不同的重启策略(`one_for_one`、`one_for_all`、`rest_for_one`)、`max_restarts`和`max_time`等参数的含义。我们将学习如何设计合理的Supervisor树来保证应用程序在遇到故障时能够自动恢复,从而实现高可用性。 Application:组织和管理Erlang项目: Application是OTP中用于组织和管理Erlang代码和资源的最高层级抽象。本章将讲解如何定义和启动Erlang Application,包括`application.erl`文件的结构、`start/2`和`stop/1`回调函数。我们将学习如何将多个OTP组件组合成一个完整的Application,并理解Application之间的依赖关系。 分布式Erlang:构建集群系统: Erlang天生支持分布式计算。本章将深入讲解Erlang的分布式特性,包括节点(Node)的概念、节点的连接与通信、`net_kernel`模块的使用。我们将学习如何创建Erlang集群,并在集群中的节点间进行进程通信、远程函数调用以及状态同步。 OTP设计模式与最佳实践: 除了核心的OTP组件,Erlang社区还发展出了一系列成熟的设计模式和最佳实践,用于构建高质量的Erlang应用程序。本章将介绍一些重要的模式,例如“Actor模型”的进一步阐释、“烟囱”(Chimney)模式用于构建复杂的通信流水线、以及“有限状态机”(FSM)的实现。同时,我们将讨论代码风格、测试策略以及性能优化等方面的内容。 第三部分:高级主题与实际应用 本部分将进一步拓展读者的视野,探索Erlang在更复杂场景下的应用,并提供一些实用的开发技巧。 Erlang/OTP库与工具: 除了OTP核心框架,Erlang还拥有丰富的第三方库和工具,极大地提高了开发效率。本章将介绍一些常用的库,例如用于网络编程的`inets`、用于数据库访问的`mnesia`或`couchdb`,以及用于消息队列的`rabbitmq`(其底层正是用Erlang编写)。同时,我们还会介绍一些有用的开发工具,如`rebar3`(构建和依赖管理工具)、`dialyzer`(静态类型分析工具)等。 Erlang与Web开发: 随着微服务架构的兴起,Erlang在Web开发领域也展现出强大的潜力。本章将介绍如何使用Erlang构建高性能的Web服务,包括使用`Cowboy`、`Yaws`等Web服务器,以及如何通过RESTful API与前端或其他服务进行交互。 Erlang在并发场景下的性能优化: 虽然Erlang的并发模型本身就非常高效,但在处理大规模并发请求时,仍然需要关注性能优化。本章将深入探讨Erlang进程调度、垃圾回收机制,以及如何通过消息队列、数据结构的选择、避免长时间阻塞操作等技巧来进一步提升应用程序的性能。 Erlang与系统集成: 在实际项目中,Erlang系统往往需要与其他系统进行集成。本章将介绍Erlang与C/C++等语言的互操作性,包括使用`NIFs`(Native Implemented Functions)来调用本地代码,以及通过RPC(Remote Procedure Call)或其他消息传递机制与其他进程或系统进行通信。 实际案例分析: 为了让读者更好地理解Erlang的强大之处,本章将深入分析几个现实世界中的Erlang成功案例。这些案例将涵盖不同行业和应用场景,例如高可用性的即时通讯系统、大规模分布式数据库、高性能的网络代理等,从实际项目中提炼出Erlang的应用价值和解决方案。 结论 《Erlang程序设计(第2版)》旨在为读者提供一个全面、深入的学习路径,帮助您成为一名熟练的Erlang开发者。通过本书的学习,您将不仅能够掌握Erlang语言的语法和特性,更重要的是,您将领悟到构建真正高并发、高可用、可伸缩和容错系统的设计理念和工程实践。无论您是初次接触Erlang,还是希望进一步提升Erlang技能的开发者,本书都将是您不可或缺的指南。我们鼓励您积极动手实践,通过编写代码、参与项目,将书中的知识转化为实际的生产力,拥抱Erlang带来的强大能力。

用户评价

评分

在学习过程中,遇到问题并寻求解答是不可避免的。因此,一本好的技术书籍应该提供一些支持读者的资源。我希望这本书能够提供一个活跃的社区或者论坛,让读者可以与其他学习者交流心得,讨论问题,甚至分享自己的学习成果。如果作者或者出版社能够定期更新书籍内容,或者提供一些额外的学习资料,那将是锦上添花。我也希望这本书能够及时地包含Erlang语言的一些最新特性和发展趋势,这样我学习到的知识就不会很快过时。一本能够随着技术的发展而不断进步的书籍,其价值是长久的。

评分

这本书的封面设计相当有吸引力,深蓝色的背景配上简洁的Erlang Logo,给人一种专业而深邃的感觉。我是在一次偶然的机会下,在一家本地的独立书店里被它吸引的。当时我正寻找一些关于函数式编程的书籍,想拓宽一下技术视野,而这本书就静静地摆放在编程语言那一区的显眼位置。翻开扉页,作者的署名和出版信息清晰可见,字体和排版都显得很用心,能感受到出版社在细节上的投入。我喜欢这种纸质书的触感,以及它所带来的那种沉浸式的阅读体验,远胜于屏幕上的冰冷文字。书本的厚度适中,拿在手里有分量,预示着内容的充实。书页的纸张质量也相当不错,摸起来光滑细腻,印刷清晰,即使长时间阅读也不会感到疲劳。我注意到书的装订也很牢固,看起来能够经受住反复翻阅的考验,这对于一本需要经常查阅的技术书籍来说至关重要。总的来说,这本书在物理层面上就已经给我留下了非常好的第一印象,它不仅仅是一堆纸张的堆叠,更像是一件精心制作的工艺品,充满了对知识和读者的尊重。

评分

对于一本技术书籍来说,语言的流畅度和可读性是至关重要的。我个人不太喜欢那种晦涩难懂、充满术语的书籍,因为这会极大地影响学习效率。我更倾向于那种用清晰、简洁的语言解释复杂概念的书籍,即使是对于初学者也能够理解。我希望这本书的作者能够用一种循序渐进的方式来引导读者,从基础概念讲起,逐步深入到更高级的主题。同时,我也希望书中能够包含大量的代码示例,这些示例应该具有代表性,能够清晰地展示Erlang的语法和特性。如果这些示例能够结合一些实际的场景,那就更好了,这样我就可以更容易地理解这些概念在真实世界中的应用。我还需要能够方便地找到这些代码示例,比如通过在线代码库或者书中直接提供链接。

评分

我最近在学习一些更现代的编程范式,尤其对并发和分布式系统很感兴趣。市面上关于这方面的内容很多,但真正能够深入浅出、理论与实践相结合的书籍却不那么多。我特别看重一本技术书籍是否能够提供清晰的思路和实用的指导,而不是简单地堆砌概念。我希望这本书能帮助我理解Erlang的核心思想,例如它的actor模型、消息传递机制,以及如何利用这些特性来构建高可用、高并发的系统。我之前也接触过一些并发相关的概念,但总感觉不够系统和深入。所以我期待这本书能够填补我在这方面的知识空白,让我能够更自信地去设计和实现复杂的分布式应用。我也希望它能介绍一些Erlang生态系统中常用的工具和库,这样我就可以在学习理论的同时,也能动手实践,将学到的知识应用到实际项目中。毕竟,编程是一门实践性很强的学科,纸上谈兵是远远不够的。

评分

我一直坚信,一本好的技术书籍不仅仅是知识的载体,更是思想的启迪者。我希望这本书能够让我对Erlang产生一种由衷的兴趣,不仅仅是把它当作一门工具来学习,更能去理解它背后的设计哲学和软件工程的智慧。我渴望了解Erlang是如何在电信行业中打下坚实基础的,以及它在当今云计算、大数据时代依然保持强大生命力的原因。我希望作者能够分享一些关于Erlang在实际项目中的经验和教训,这些经验和教训往往比纯理论的讲解更有价值。通过阅读这本书,我希望能建立起对Erlang一个全面而深刻的认识,不仅仅停留在语法层面,更能理解它在构建可靠、可扩展系统方面的优势和独特之处。

评分

erlang最经典的工具书,我是在看了200页电子版之后选择入手的,绝对值得推荐

评分

书非常好,是学习erlang的好书

评分

应该不错,味道有点大

评分

帮公司买的,可以不错

评分

挺不错的,挺不错的

评分

和golang同时买的,现在还没有来及看~~~

评分

很不错的书,赞

评分

想要学Erlang,在网上查到很多人推荐这本书,就买来看看,感觉不错.很适合初学者学习.

评分

好好学习天天向上,京东速度好快,赞

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.teaonline.club All Rights Reserved. 图书大百科 版权所有