代码的未来 PDF 文档
本书是 Ruby 之父松本行弘的又一力作。作者对云计算、大数据时代下的各种编程语言以及相关技术进行了剖析,并对编程语言的未来发展趋势做出预测,内容涉及 Go、VoltDB、node.js、CoffeeScript、Dart、MongoDB、摩尔定律、编程语言、多核、NoSQL 等当今备受关注的话题。
本书面向各层次程序设计人员和编程爱好者,也可供相关技术人员参考。
依靠其简洁、优雅的语言特色,以及 Rails 等开发框架的成功,Ruby 在 Web 开发领域早已成为一种人气颇高的动态脚本语言。然而,当今世界上流行的编程语言中,只有 Ruby 来自亚洲,作为 Ruby 语言的发明者,松本行弘(Matz)表示自己常因此而感到孤独。
作为这本书的译者,2012 年 11 月借中国 Ruby 大会的机会,我有幸以图灵特派记者的身份对 Matz 进行了一次专访①。穿着 UNIQLO 的格子衬衫,充满技术宅范儿的 Matz,平时看起来不苟言笑,谈起技术话题来就好像打开了话匣子一般滔滔不绝,在 Twitter 上的发言也相当活跃。在访谈中,Matz 谈到了 Ruby 的发展方向,他希望 Ruby 能够在 Web 开发之外的领域(科学计算、高性能计算和嵌入式系统)有更多的发展,同时他也希望中国的程序员们能够积极为开源社区做出贡献,努力成为能够影响世界的工程师。
在线阅读: https://www.wenjiangs.com/docs/daima-de-weilai
目录
第 1 章 编程的时间和空间
1.1 编程的本质
编程的本质是思考
创造世界的乐趣
快速提高的性能改变了社会
以不变应万变
摩尔定律的局限
社会变化与编程
1.2 未来预测
科学的未来预测
IT 未来预测
极限未来预测
从价格看未来
从性能看未来
从容量看未来
从带宽看未来
小结
第 2 章 编程语言的过去、现在和未来
2.1 编程语言的世界
被历史埋没的先驱
编程语言的历史
编程语言的进化方向
未来的编程语言
20 年后的编程语言
学生们的想象
2.2 DSL(特定领域语言)
外部 DSL
内部 DSL
DSL 的优势
DSL 的定义
适合内部 DSL 的语言
外部 DSL 实例
DSL 设计的构成要素
Sinatra
小结
2.3 元编程
Meta, Reflection
类对象
类的操作
Lisp
数据和程序
Lisp 程序
宏
宏的功与过
元编程的可能性与危险性
小结
看似无限的内存
2.4 内存管理
GC 的三种基本方式
术语定义
标记清除方式
复制收集方式
引用计数方式
引用计数方式的缺点
进一步改良的应用方式
分代回收
对来自老生代的引用进行记录
增量回收
并行回收
GC 大统一理论
“一定没问题的”
2.5 异常处理
用特殊返回值表示错误
容易忽略错误处理
Ruby 中的异常处理
产生异常
更高级的异常处理
Ruby 中的后处理保证
其他语言中的异常处理
Java 的检查型异常
Icon 的异常和真假值
Eiffel 的 Design by Contract
异常与错误值
小结
2.6 闭包
函数对象
高阶函数
用函数参数提高通用性
函数指针的局限
作用域:变量可见范围
生存周期:变量的存在范围
闭包与面向对象
Ruby 的函数对象
Ruby 与 JavaScript 的区别
Lisp-1 与 Lisp-2
第 3 章 编程语言的新潮流
3.1 语言的设计
客户端与服务器端
向服务器端华丽转身
在服务器端获得成功的四大理由
客户端的 JavaScript
性能显著提升
服务器端的 Ruby
Ruby on Rails 带来的飞跃
服务器端的 Go
静态与动态
动态运行模式
何谓类型
静态类型的优点
动态类型的优点
有鸭子样的就是鸭子
Structural Subtyping
小结
New(新的)
Experimental(实验性的)
3.2 Go
Concurrent(并发的)
Garbage-collected(带垃圾回收的)
Systems(系统)
Go 的创造者们
Hello World
Go 的控制结构
类型声明
无继承式面向对象
多值与多重赋值
并发编程
小结
3.3 Dart
为什么要推出 Dart?
Dart 的设计目标
代码示例
Dart 的特征
基于类的对象系统
非强制性静态类型
Dart 的未来
最普及的语言
被误解最多的语言
3.4 CoffeeScript
显著高速化的语言
对 JavaScript 的不满
CoffeeScript
安装方法
声明和作用域
分号和代码块
省略记法
字符串
数组和循环
类
小结
3.5 Lua
示例程序
数据类型
函数
表
元表
方法调用的实现
基于原型编程
和 Ruby 的比较(语言篇)
嵌入式语言 Lua
和 Ruby 的比较(实现篇)
嵌入式 Ruby
第 4 章 云计算时代的编程
4.1 可扩展性
信息的尺度感
大量数据的查找
二分法查找
散列表
布隆过滤器
一台计算机的极限
DHT(分布式散列表)
Roma
MapReduce
小结
何为 C10K 问题
4.2 C10K 问题
C10K 问题所引发的“想当然”
使用 epoll 功能
使用 libev 框架
使用 EventMachine
小结
4.3 HashFold
HashFold 库的实现(Level 1)
运用多核的必要性
目前的 Ruby 实现所存在的问题
通过进程来实现 HashFold(Level 2)
抖动
运用进程池的 HashFold(Level 3)
小结
4.4 进程间通信
进程与线程
同一台计算机上的进程间通信
TCP/IP 协议
用 C 语言进行套接字编程
用 Ruby 进行套接字编程
Ruby 的套接字功能
用 Ruby 实现网络服务器
小结
4.5 Rack 与 Unicorn
Rack 中间件
应用程序服务器的问题
Unicorn 的架构
Unicorn 的解决方案
性能
策略
小结
第 5 章 支撑大数据的数据存储技术
5.1 键- 值存储
Hash 类
DBM 类
数据库的 ACID 特性
CAP 原理
CAP 解决方案——BASE
不能舍弃可用性
大规模环境下的键-值存储
访问键-值存储
键-值存储的节点处理
存储器
写入和读取
节点追加
故障应对
终止处理
其他机制
性能与应用实例
小结
RDB 的极限
5.2 NoSQL
NoSQL 数据库的解决方案
形形色色的 NoSQL 数据库
面向文档数据库
MongoDB 的安装
启动数据库服务器
MongoDB 的数据库结构
数据的插入和查询
用 JavaScript 进行查询
高级查询
数据的更新和删除
乐观并发控制
使用 Ruby 驱动
5.3 用 Ruby 来操作 MongoDB
对数据库进行操作
数据的插入
数据的查询
高级查询
find 方法的选项
原子操作
ActiveRecord
OD Mapper
5.4 SQL 数据库的反击
“云”的定义
SQL 数据库的极限
存储引擎 Spider
SQL 数据库之父的反驳
SQL 数据库 VoltDB
VoltDB 的架构
VoltDB 中的编程
Hello VoltDB!
性能测试
小结
5.5 memcached 和它的伙伴们
用于高速访问的缓存
memcached
示例程序
对 memcached 的不满
memcached 替代服务器
另一种键-值存储 Redis
Redis 的数据类型
Redis 的命令与示例
小结
第 6 章 多核时代的编程
6.1 摩尔定律
呈几何级数增长
摩尔定律的内涵
摩尔定律的结果
摩尔定律所带来的可能性
为了提高性能
摩尔定律的极限
超越极限
不再有免费的午餐
6.2 UNIX 管道
管道编程
多核时代的管道
xargs——另一种运用核心的方式
注意瓶颈
阿姆达尔定律
多核编译
ccache
distcc
编译性能测试
小结
6.3 非阻塞 I / O
何为非阻塞 I/O
使用 read(2) 的方法
边沿触发与电平触发
使用 read(2) + select 的方法
使用 read+O_NONBLOCK 标志
Ruby 的非阻塞 I/O
使用 aio_read 的方法
6.4 node.js
减负
拖延
委派
非阻塞编程
node.js 框架
事件驱动编程
事件循环的利弊
node.js 编程
node.js 网络编程
node.js 回调风格
node.js 的优越性
EventMachine 与 Rev
6.5 ZeroMQ
多 CPU 的必要性
阿姆达尔定律
多 CPU 的运用方法
进程间通信
管道
SysV IPC
套接字
UNIX 套接字
ZeroMQ
ZeroMQ 的连接模型
ZeroMQ 的安装
ZeroMQ 示例程序
小结
版权声明
图书介绍
下载地址:https://www.wenjiangs.com/wp-content/uploads/2024/03/WnQlL5AQPsAgbiH0.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论