《代码的未来》是Ruby之父松本行弘的又一力作。作者对云计算、大数据时代下的各种编程语言以及相关技术进行了剖析,并对编程语言的未来发展趋势做出预测,内容涉及Go、VoltDB、node.js、CoffeeScript、Dart、MongoDB、摩尔定律、编程语言、多核、NoSQL等当今备受关注的话题。
《代码的未来》面向各层次程序设计人员和编程爱好者,也可供相关技术人员参考。
这这书我觉得是更新连载《松本行弘:技术的剖析》的合辑,两者之间《编码的将来》,我认为本名更合乎这这书的內容。
一开始见到书,打开文件目录,发觉这个是什么啊,全部1个时兴技术的合辑,从摩尔定律提到DSL,从C10K提到nosql。可是细心看出来,感受挺大,一些地区又茅塞顿开的觉得。
通常的技术类书籍或是稿子,全是讲"How",如何使用,构造怎样,小有讲的清"Why"的,而Matz这这书尽管讲了许多技术,可是绝大多数都能从繁杂的关键点中摆脱出去,只讲基本原理,说清了缘故,弥足珍贵的是,绝大多数常有Matz自身的看法,十分有实用价值。
将会是东方美学的逻辑思维较为相仿吧,一本书都看都不枯燥乏味,花了1个礼拜天看了了。
合适群体:对各类技术常有必须掌握,可是并未产生本身的专业知识多元性的初级开发人员,看这这书会十分有感受。
目录
- 第一章 编程的时间和空间
- 1.1 编程的本质 3
- 编程的本质是思考 4
- 创造世界的乐趣 4
- 快速提高的性能改变了社会 5
- 以不变应万变 8
- 摩尔定律的局限 9
- 社会变化与编程 10
- 1.2 未来预测 13
- 科学的未来预测 14
- IT 未来预测 14
- 极限未来预测 16
- 从价格看未来 16
- 从性能看未来 17
- 从容量看未来 18
- 从带宽看未来 19
- 小结 20
- 第二章 编程语言的过去、现在和未来
- 2.1 编程语言的世界 23
- 被历史埋没的先驱 25
- 编程语言的历史 26
- 编程语言的进化方向 30
- 未来的编程语言 32
- 20 年后的编程语言 34
- 学生们的想象 34
- 2.2 DSL(特定领域语言) 36
- 外部DSL 37
- 内部DSL 38
- DSL 的优势 39
- DSL 的定义 39
- 适合内部DSL 的语言 40
- 外部DSL 实例 42
- DSL 设计的构成要素 43
- Sinatra 46
- 小结 47
- 2.3 元编程 48
- Meta, Reflection 48
- 类对象 51
- 类的操作 52
- Lisp 53
- 数据和程序 54
- Lisp 程序 56
- 宏 56
- 宏的功与过 57
- 元编程的可能性与危险性 59
- 小结 60
- 2.4 内存管理 61
- 看似无限的内存 61
- GC 的三种基本方式 62
- 术语定义 62
- 标记清除方式 63
- 复制收集方式 64
- 引用计数方式 65
- 引用计数方式的缺点 65
- 进一步改良的应用方式 66
- 分代回收 66
- 对来自老生代的引用进行记录 67
- 增量回收 68
- 并行回收 69
- GC 大统一理论 69
- 2.5 异常处理 71
- “一定没问题的” 71
- 用特殊返回值表示错误 72
- 容易忽略错误处理 72
- Ruby 中的异常处理 73
- 产生异常 74
- 更高级的异常处理 75
- Ruby 中的后处理保证 76
- 其他语言中的异常处理 77
- Java 的检查型异常 77
- Icon 的异常和真假值 78
- Eiffel 的Design by Contract 80
- 异常与错误值 80
- 小结 81
- 2.6 闭包 82
- 函数对象 82
- 高阶函数 83
- 用函数参数提高通用性 84
- 函数指针的局限 85
- 作用域:变量可见范围 87
- 生存周期:变量的存在范围 88
- 闭包与面向对象 89
- Ruby 的函数对象 89
- Ruby 与JavaScript 的区别 90
- Lisp-1 与Lisp-2 91
- 第三章 编程语言的新潮流
- 3.1 语言的设计 97
- 客户端与服务器端 97
- 向服务器端华丽转身 98
- 在服务器端获得成功的四大理由 99
- 客户端的JavaScript 100
- 性能显著提升 101
- 服务器端的Ruby 102
- Ruby on Rails 带来的飞跃 102
- 服务器端的Go 103
- 静态与动态 104
- 动态运行模式 105
- 何谓类型 105
- 静态类型的优点 106
- 动态类型的优点 106
- 有鸭子样的就是鸭子 107
- Structural Subtyping 108
- 小结 108
- 3.2 Go 109
- New(新的) 109
- Experimental(实验性的) 109
- Concurrent(并发的) 110
- Garbage-collected(带垃圾回收的) 110
- Systems(系统) 111
- Go 的创造者们 111
- Hello World 112
- Go 的控制结构 113
- 类型声明 116
- 无继承式面向对象 118
- 多值与多重赋值 120
- 并发编程 122
- 小结 124
- 3.3 Dart 126
- 为什么要推出Dart ? 126
- Dart 的设计目标 129
- 代码示例 130
- Dart 的特征 132
- 基于类的对象系统 132
- 非强制性静态类型 133
- Dart 的未来 134
- 3.4 CoffeeScript 135
- 最普及的语言 135
- 被误解最多的语言 135
- 显著高速化的语言 136
- 对JavaScript 的不满 138
- CoffeeScript 138
- 安装方法 139
- 声明和作用域 139
- 分号和代码块 141
- 省略记法 142
- 字符串 143
- 数组和循环 143
- 类 145
- 小结 146
- 3.5 Lua 148
- 示例程序 149
- 数据类型 149
- 函数 150
- 表 150
- 元表 151
- 方法调用的实现 153
- 基于原型编程 155
- 和Ruby 的比较(语言篇) 157
- 嵌入式语言Lua 157
- 和Ruby 的比较(实现篇) 158
- 嵌入式Ruby 159
- 第四章 云计算时代的编程
- 4.1 可扩展性 163
- 信息的尺度感 163
- 大量数据的查找 164
- 二分法查找 165
- 散列表 167
- 布隆过滤器 169
- 一台计算机的极限 170
- DHT(分布式散列表) 171
- Roma 172
- MapReduce 173
- 小结 174
- 4.2 C10K 问题 175
- 何为C10K 问题 175
- C10K 问题所引发的“想当然” 177
- 使用epoll 功能 180
- 使用libev 框架 181
- 使用EventMachine 183
- 小结 185
- 4.3 HashFold 186
- HashFold 库的实现(Level 1) 187
- 运用多核的必要性 190
- 目前的Ruby 实现所存在的问题 191
- 通过进程来实现HashFold(Level 2) 191
- 抖动 193
- 运用进程池的HashFold(Level 3) 194
- 小结 197
- 4.4 进程间通信 198
- 进程与线程 198
- 同一台计算机上的进程间通信 199
- TCP IP 协议 201
- 用C 语言进行套接字编程 202
- 用Ruby 进行套接字编程 204
- Ruby 的套接字功能 205
- 用Ruby 实现网络服务器 208
- 小结 209
- 4.5 Rack 与Unicorn 210
- Rack 中间件 211
- 应用程序服务器的问题 212
- Unicorn 的架构 215
- Unicorn 的解决方案 215
- 性能 219
- 策略 220
- 小结 221
- 第五章 支撑大数据的数据存储技术
- 5.1 键- 值存储 225
- Hash 类 225
- DBM 类 226
- 数据库的ACID 特性 226
- CAP 原理 227
- CAP 解决方案——BASE 228
- 不能舍弃可用性 229
- 大规模环境下的键- 值存储 230
- 访问键- 值存储 230
- 键- 值存储的节点处理 231
- 存储器 232
- 写入和读取 233
- 节点追加 233
- 故障应对 233
- 终止处理 235
- 其他机制 235
- 性能与应用实例 236
- 小结 236
- 5.2 NoSQL 237
- RDB 的极限 237
- NoSQL 数据库的解决方案 238
- 形形色色的NoSQL 数据库 239
- 面向文档数据库 240
- MongoDB 的安装 241
- 启动数据库服务器 243
- MongoDB 的数据库结构 244
- 数据的插入和查询 244
- 用JavaScript 进行查询 245
- 高级查询 246
- 数据的更新和删除 249
- 乐观并发控制 250
- 5.3 用Ruby 来操作MongoDB 251
- 使用Ruby 驱动 251
- 对数据库进行操作 253
- 数据的插入 253
- 数据的查询 253
- 高级查询 254
- find 方法的选项 256
- 原子操作 257
- ActiveRecord 259
- OD Mapper 260
- 5.4 SQL 数据库的反击 264
- “云”的定义 264
- SQL 数据库的极限 264
- 存储引擎Spider 265
- SQL 数据库之父的反驳 265
- SQL 数据库VoltDB 268
- VoltDB 的架构 269
- VoltDB 中的编程 270
- Hello VoltDB! 271
- 性能测试 273
- 小结 275
- 5.5 memcached 和它的伙伴们 276
- 用于高速访问的缓存 276
- memcached 277
- 示例程序 278
- 对memcached 的不满 279
- memcached 替代服务器 280
- 另一种键- 值存储Redis 282
- Redis 的数据类型 284
- Redis 的命令与示例 285
- 小结 289
- 第六章 多核时代的编程
- 6.1 摩尔定律 293
- 呈几何级数增长 293
- 摩尔定律的内涵 294
- 摩尔定律的结果 295
- 摩尔定律所带来的可能性 296
- 为了提高性能 297
- 摩尔定律的极限 302
- 超越极限 303
- 不再有免费的午餐 304
- 6.2 UNIX 管道 305
- 管道编程 306
- 多核时代的管道 308
- xargs——另一种运用核心的方式 309
- 注意瓶颈 311
- 阿姆达尔定律 311
- 多核编译 312
- ccache 313
- distcc 313
- 编译性能测试 314
- 小结 315
- 6.3 非阻塞I/O 316
- 何为非阻塞I O 316
- 使用read(2) 的方法 317
- 边沿触发与电平触发 319
- 使用read(2) + select 的方法 319
- 使用read+O_NONBLOCK 标志 321
- Ruby 的非阻塞I O 322
- 使用aio_read 的方法 323
- 6.4 node.js 330
- 减负 330
- 拖延 331
- 委派 332
- 非阻塞编程 333
- node.js 框架 333
- 事件驱动编程 334
- 事件循环的利弊 335
- node.js 编程 335
- node.js 网络编程 337
- node.js 回调风格 339
- node.js 的优越性 340
- EventMachine 与Rev 341
- 6.5 ZeroMQ 342
- 多CPU 的必要性 342
- 阿姆达尔定律 343
- 多CPU 的运用方法 343
- 进程间通信 345
- 管道 345
- SysV IPC 346
- 套接字 347
- UNIX 套接字 349
- ZeroMQ 349
- ZeroMQ 的连接模型 350
- ZeroMQ 的安装 352
- ZeroMQ 示例程序 352
- 小结 354
- 版权声明 356