1. 程式人生 > >代碼的未來pdf

代碼的未來pdf

預測 rail 存儲 mongodb 天津 nat con pad ping

下載地址:網盤下載

作者簡介 · · · · · ·

松本行弘(Yukihiro Matsumoto)

Ruby語言發明者,亦是亞洲首屈一指的編程語言發明者。現兼任網絡應用通信研究所(NaCl)研究員、樂天技術研究所研究員、Heroku首席架構師等。昵稱“Matz”。討厭東京,喜歡溫泉。

譯者簡介:

周自恒

IT、編程愛好者,技術宅,初中時曾在NOI(國家信息學奧賽)天津賽區獲一等獎,大學畢業後曾任IT咨詢顧問,精通英語和日語,譯著有《30天自制操作系統》、《大數據的沖擊》、《Android應用開發入門》。

目錄 · · · · · ·

第一章 編程的時間和空間
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

下載地址:網盤下載

代碼的未來pdf