讀書記錄:
我于2015/1/9日購買了本書, 經(jīng)過2個晚上, 1個白天的時間, 通讀完了<<代碼的未來>>, 只余NoSQL, MongoDB, SQL, Memcached4章共30頁還未讀完.
書中對未來的預(yù)測非常讓我信服, 即未來的編程語言應(yīng)該能夠方便進行多核和云計算的開發(fā).
matz對當前以及未來幾年技術(shù)趨勢把握非常精準, 對當下非常流行的技術(shù)趨勢都研究頗深.
matz先概括性地講解了編程的一些問題:
編程的時間和空間
- 編程的本質(zhì)
- 未來的預(yù)測
編程語言的過去, 現(xiàn)在和未來
講述了編程語言的起源, 發(fā)展, 興衰起伏.
編程語言的時間
在編程語言的世界一章中, 探討了編程時間的先驅(qū), 編程語言的歷史, 以及編程語言從過去到現(xiàn)在的進化方向, 最后對20年后和未來的編程語言進行了預(yù)測.DSL: Domain Specify Language, 領(lǐng)域建模語言
matz從Unix的內(nèi)部DSL, 如shell, awk, seq等迷你DSL講起, 再講述了DSL的優(yōu)勢, 以及定義后, 介紹了Ruby作為最好的DSL語言的應(yīng)用.元編程
Meta, Relection
類對象
類的操作
Lisp
數(shù)據(jù)和程序
Lisp程序, S表達式
宏
宏的功與過
元編程的可能性與危險性
這一章主要講述了語言的元編程能力, 重點講述了ruby的元編程, 以及與元編程的鼻祖Lisp的宏(S表達式)比較
- 內(nèi)存的管理
講述GC的定義, 方式以及常用的GC方式, 文章談到了靜態(tài)語言和動態(tài)語言各自在GC上的使用方式, 以及GC優(yōu)化手段. 包括java的GC.
內(nèi)容:
- 看似無限的內(nèi)存
- GC的三種基本方式
- 術(shù)語定義
- 標記清除方式, 復(fù)制收集方式
- 引用計數(shù)方式, 引用計數(shù)方式的缺點
- 進一步改良的應(yīng)用方式
- 分代回收
- 對來自老生代的引用進行記錄
- 增量回收
- 并行回收
- GC大一統(tǒng)理論
第三章 編程語言新的潮流
- 語言的設(shè)計
以java,javascript, ruby, go三種語言來探討語言的設(shè)計問題
靜態(tài)和動態(tài)類型的區(qū)別
類型在靜態(tài)類型和動態(tài)類型中的應(yīng)用
靜態(tài)和動態(tài)類型語言的優(yōu)缺點
Duck type, 鴨式辯形
Structural Subtyping
討論一下問題:
作為客戶端語言發(fā)布的java為何在服務(wù)器端獲得成功?
Rails如何讓ruby火起來?
Go在服務(wù)器端的應(yīng)用
Go語言
本章主要是Go語言的介紹和入門知識, matz認為go很有前途
New
Experimental(實驗性)
Concurrent
GC
SystemsDart
很想java的強類型語言, matz不看好CoffeeScript
對javascript的不滿導(dǎo)致的coffeescript的誕生, coffee的入門介紹. matz認為coffee參考了ruby和python(但主要是參考了python), coffee的設(shè)計非常精妙和恰到好處, 某些方面比ruby更好
內(nèi)容:
- 聲明和作用域
- 分號和代碼塊
- 省略記法
- 字符串
- 數(shù)組和循環(huán)
- 類
第四章 云時代的編程
4.1 可擴展性
- 信息的尺感度
- 大量數(shù)據(jù)的查找
- 二分法查找
- 散列表
- 布隆過濾器
- 一臺計算機的極限
- DHT(分布式散列表)
- Roma
- MapReduce
4.2 C10K問題
- 何為C10K問題?
- C10K問題引發(fā)的想當然
- 使用epoll功能
- 使用libev
- 使用EventMachine
4.3 HashFold
- HashFold庫的實現(xiàn)(Level 1)
- 運用多核的必要性
- 目前ruby實現(xiàn)存在的問題
- 通過進程來實現(xiàn)HashFold(Level 2)
- 抖動
- 運用進程池的HashFold(Level 3)
進程間通信
- 進程與線程
- 同一臺計算機上的進程通信
- TCP/IP協(xié)議
- 用C語言進行套接字編程
- 用Ruby進行套接字編程
- Ruby的socket功能
- 用Ruby實現(xiàn)網(wǎng)絡(luò)服務(wù)器
Rack和Unicorn
- Rack中間件
- 應(yīng)用程序服務(wù)器的問題
- Unicorn架構(gòu)
- Unicorn的解決方案
- 性能
- 策略
第五章 支撐大數(shù)據(jù)的數(shù)據(jù)存儲技術(shù)
5.1 鍵-值存儲
- Hash類
- DBM類
- 數(shù)據(jù)庫的ACID特性
- CAP原理
- CAP的解決方案-BASE
- 不能舍棄可用性
- 大規(guī)模環(huán)境下的鍵-值存儲, 以Roma為例
- 訪問鍵-值存儲
- 鍵-值存儲的節(jié)點處理
- 存儲器
- 寫入和讀取
- 節(jié)點追加
- 故障應(yīng)對
- 終止處理
- 其他機制
- 性能和應(yīng)用案例
5.2 NoSQL
- RDB的極限
- NoSQL數(shù)據(jù)庫的解決方案
- 形形色色的各類NoSQL數(shù)據(jù)庫
-面向文檔的數(shù)據(jù)庫 - MongoDB安裝和啟動
- MongoDB的數(shù)據(jù)庫結(jié)構(gòu)
- 數(shù)據(jù)的插入和查詢
- 用javascript進行查詢
- 高級查詢
- 數(shù)據(jù)的更新和刪除
- 樂觀并發(fā)控制
5.3 用Ruby來操作MongoDB
- 使用Ruby驅(qū)動
- 對數(shù)據(jù)庫進行操作
- 數(shù)據(jù)的插入
- 數(shù)據(jù)的查詢
- 高級查詢
- find方法的選項
- 原子操作
- ActiveRecord
- OD Mapper
5.4 SQL數(shù)據(jù)庫的反擊
- "云"的定義
- SQL數(shù)據(jù)庫的極限
- 存儲引擎Spider
- SQL數(shù)據(jù)庫之父的反駁
- SQL數(shù)據(jù)庫VoltDB
- VoltDB的架構(gòu)
- VoltDB中的編程
- Hello VoltDB
- 性能測試
memcached和它的伙伴們
- 用于高速訪問的緩存
- memcached
- 對memcached的不滿
- memcached的替代服務(wù)器
- Redis
- Redis的數(shù)據(jù)類型
- Redis的命令和示例
第六章 多核時代的編程
6.1 摩爾定律
- 呈幾何數(shù)增長
- 摩爾定律的內(nèi)涵
- 摩爾定律的結(jié)果
- 摩爾定律所帶來的可能性
- 為了提高性能
- 摩爾定律的極限
- 超越極限
- 不再有免費的午餐
6.2 Unix管道
- 管道編程
- 多核時代的管道
- xargs-另一種運用核心的方式
- 注意瓶頸
- 阿姆達爾定律
- 多核編譯
- ccache
- distcc
- 編譯性能測試
5.3 非阻塞I/O
- 何為非阻塞I/O?
- 使用read(2)方法
- 邊沿觸發(fā)和水平觸發(fā)
- 使用read(2)和select的方法
- 使用read+O_NONBLOCK標志
- Ruby的非阻塞
- 使用aio_read
5.4 node.js
- matz的減負, 拖延, 委派
- 非阻塞編程
- node.js框架
- 事件驅(qū)動編程
- 事件循環(huán)的利弊
- node.js的編程
- node.js的網(wǎng)絡(luò)編程
- node.js的回調(diào)風格
- node.js的優(yōu)越性
- EventMachine與Rev
5.5 ZeroMQ
- 多CPU的必要性
- 阿姆達爾定律
- 多CPU的運用方法
- 進程間通信
- 管道
- SysV IPC
- Socket
- Unix Socket
- ZeroMQ, 連接模型