读书记录:
我于2015/1/9日购买了本书, 经过2个晚上, 1个白天的时间, 通读完了<<代码的未来>>, 只余NoSQL, MongoDB, SQL, Memcached4章共30页还未读完.
书中对未来的预测非常让我信服, 即未来的编程语言应该能够方便进行多核和云计算的开发.
matz对当前以及未来几年技术趋势把握非常精准, 对当下非常流行的技术趋势都研究颇深.
matz先概括性地讲解了编程的一些问题:
编程的时间和空间
- 编程的本质
- 未来的预测
编程语言的过去, 现在和未来
讲述了编程语言的起源, 发展, 兴衰起伏.
-
编程语言的时间
在编程语言的世界一章中, 探讨了编程时间的先驱, 编程语言的历史, 以及编程语言从过去到现在的进化方向, 最后对20年后和未来的编程语言进行了预测. -
DSL: Domain Specify Language, 领域建模语言
matz从Unix的内部DSL, 如shell, awk, seq等迷你DSL讲起, 再讲述了DSL的优势, 以及定义后, 介绍了Ruby作为最好的DSL语言的应用. -
元编程
Meta, Relection
类对象
类的操作
Lisp
数据和程序
Lisp程序, S表达式
宏
宏的功与过
元编程的可能性与危险性
这一章主要讲述了语言的元编程能力, 重点讲述了ruby的元编程, 以及与元编程的鼻祖Lisp的宏(S表达式)比较
- 内存的管理
讲述GC的定义, 方式以及常用的GC方式, 文章谈到了静态语言和动态语言各自在GC上的使用方式, 以及GC优化手段. 包括java的GC.
内容:
- 看似无限的内存
- GC的三种基本方式
- 术语定义
- 标记清除方式, 复制收集方式
- 引用计数方式, 引用计数方式的缺点
- 进一步改良的应用方式
- 分代回收
- 对来自老生代的引用进行记录
- 增量回收
- 并行回收
- GC大一统理论
第三章 编程语言新的潮流
- 语言的设计
以java,javascript, ruby, go三种语言来探讨语言的设计问题
静态和动态类型的区别
类型在静态类型和动态类型中的应用
静态和动态类型语言的优缺点
Duck type, 鸭式辩形
Structural Subtyping
讨论一下问题:
作为客户端语言发布的java为何在服务器端获得成功?
Rails如何让ruby火起来?
Go在服务器端的应用
-
Go语言
本章主要是Go语言的介绍和入门知识, matz认为go很有前途
New
Experimental(实验性)
Concurrent
GC
Systems -
Dart
很想java的强类型语言, matz不看好 -
CoffeeScript
对javascript的不满导致的coffeescript的诞生, coffee的入门介绍. matz认为coffee参考了ruby和python(但主要是参考了python), coffee的设计非常精妙和恰到好处, 某些方面比ruby更好
内容:
- 声明和作用域
- 分号和代码块
- 省略记法
- 字符串
- 数组和循环
- 类
第四章 云时代的编程
4.1 可扩展性
- 信息的尺感度
- 大量数据的查找
- 二分法查找
- 散列表
- 布隆过滤器
- 一台计算机的极限
- DHT(分布式散列表)
- Roma
- MapReduce
4.2 C10K问题
- 何为C10K问题?
- C10K问题引发的想当然
- 使用epoll功能
- 使用libev
- 使用EventMachine
4.3 HashFold
- HashFold库的实现(Level 1)
- 运用多核的必要性
- 目前ruby实现存在的问题
- 通过进程来实现HashFold(Level 2)
- 抖动
- 运用进程池的HashFold(Level 3)
进程间通信
- 进程与线程
- 同一台计算机上的进程通信
- TCP/IP协议
- 用C语言进行套接字编程
- 用Ruby进行套接字编程
- Ruby的socket功能
- 用Ruby实现网络服务器
Rack和Unicorn
- Rack中间件
- 应用程序服务器的问题
- Unicorn架构
- Unicorn的解决方案
- 性能
- 策略
第五章 支撑大数据的数据存储技术
5.1 键-值存储
- Hash类
- DBM类
- 数据库的ACID特性
- CAP原理
- CAP的解决方案-BASE
- 不能舍弃可用性
- 大规模环境下的键-值存储, 以Roma为例
- 访问键-值存储
- 键-值存储的节点处理
- 存储器
- 写入和读取
- 节点追加
- 故障应对
- 终止处理
- 其他机制
- 性能和应用案例
5.2 NoSQL
- RDB的极限
- NoSQL数据库的解决方案
- 形形色色的各类NoSQL数据库
-面向文档的数据库 - MongoDB安装和启动
- MongoDB的数据库结构
- 数据的插入和查询
- 用javascript进行查询
- 高级查询
- 数据的更新和删除
- 乐观并发控制
5.3 用Ruby来操作MongoDB
- 使用Ruby驱动
- 对数据库进行操作
- 数据的插入
- 数据的查询
- 高级查询
- find方法的选项
- 原子操作
- ActiveRecord
- OD Mapper
5.4 SQL数据库的反击
- "云"的定义
- SQL数据库的极限
- 存储引擎Spider
- SQL数据库之父的反驳
- SQL数据库VoltDB
- VoltDB的架构
- VoltDB中的编程
- Hello VoltDB
- 性能测试
memcached和它的伙伴们
- 用于高速访问的缓存
- memcached
- 对memcached的不满
- memcached的替代服务器
- Redis
- Redis的数据类型
- Redis的命令和示例
第六章 多核时代的编程
6.1 摩尔定律
- 呈几何数增长
- 摩尔定律的内涵
- 摩尔定律的结果
- 摩尔定律所带来的可能性
- 为了提高性能
- 摩尔定律的极限
- 超越极限
- 不再有免费的午餐
6.2 Unix管道
- 管道编程
- 多核时代的管道
- xargs-另一种运用核心的方式
- 注意瓶颈
- 阿姆达尔定律
- 多核编译
- ccache
- distcc
- 编译性能测试
5.3 非阻塞I/O
- 何为非阻塞I/O?
- 使用read(2)方法
- 边沿触发和水平触发
- 使用read(2)和select的方法
- 使用read+O_NONBLOCK标志
- Ruby的非阻塞
- 使用aio_read
5.4 node.js
- matz的减负, 拖延, 委派
- 非阻塞编程
- node.js框架
- 事件驱动编程
- 事件循环的利弊
- node.js的编程
- node.js的网络编程
- node.js的回调风格
- node.js的优越性
- EventMachine与Rev
5.5 ZeroMQ
- 多CPU的必要性
- 阿姆达尔定律
- 多CPU的运用方法
- 进程间通信
- 管道
- SysV IPC
- Socket
- Unix Socket
- ZeroMQ, 连接模型
网友评论