《代碼的未來(lái)》是Ruby之父松本行弘的又一力作。作者對(duì)云計(jì)算、大數(shù)據(jù)時(shí)代下的各種編程語(yǔ)言以及相關(guān)技術(shù)進(jìn)行了剖析,并對(duì)編程語(yǔ)言的未來(lái)發(fā)展趨勢(shì)做出預(yù)測(cè),內(nèi)容涉及Go、VoltDB、node.js、CoffeeScript、Dart、MongoDB、摩爾定律、編程語(yǔ)言、多核、NoSQL等當(dāng)今備受關(guān)注的話題。 《代碼的未來(lái)》面向各層次程序設(shè)計(jì)人員和編程愛(ài)好者,也可供相關(guān)技術(shù)人員參考。
作者簡(jiǎn)介 松本行弘(Yukihiro Matsumoto) Ruby語(yǔ)言發(fā)明者,亦是亞洲首屈一指的編程語(yǔ)言發(fā)明者,F(xiàn)兼任網(wǎng)絡(luò)應(yīng)用通信研究所(NaCl)研究員、樂(lè)天技術(shù)研究所研究員、Heroku首席架構(gòu)師等。昵稱(chēng)“Matz”。討厭東京,喜歡溫泉。 譯者簡(jiǎn)介: 周自恒 IT、編程愛(ài)好者,技術(shù)宅,初中時(shí)曾在NOI(國(guó)家信息學(xué)奧賽)天津賽區(qū)獲一等獎(jiǎng),大學(xué)畢業(yè)后曾任IT咨詢(xún)顧問(wèn),精通英語(yǔ)和日語(yǔ),譯著有《30天自制操作系統(tǒng)》、《大數(shù)據(jù)的沖擊》、《Android應(yīng)用開(kāi)發(fā)入門(mén)》。
目錄: 第一章 編程的時(shí)間和空間 1.1 編程的本質(zhì) 3 編程的本質(zhì)是思考 4 創(chuàng)造世界的樂(lè)趣 4 快速提高的性能改變了社會(huì) 5 以不變應(yīng)萬(wàn)變 8 摩爾定律的局限 9 社會(huì)變化與編程 10 1.2 未來(lái)預(yù)測(cè) 13 科學(xué)的未來(lái)預(yù)測(cè) 14 IT 未來(lái)預(yù)測(cè) 14 極限未來(lái)預(yù)測(cè) 16 從價(jià)格看未來(lái) 16 從性能看未來(lái) 17 從容量看未來(lái) 18 從帶寬看未來(lái) 19 小結(jié) 20 第二章 編程語(yǔ)言的過(guò)去、現(xiàn)在和未來(lái) 2.1 編程語(yǔ)言的世界 23 被歷史埋沒(méi)的先驅(qū) 25 編程語(yǔ)言的歷史 26 編程語(yǔ)言的進(jìn)化方向 30 未來(lái)的編程語(yǔ)言 32 20 年后的編程語(yǔ)言 34 學(xué)生們的想象 34 2.2 DSL(特定領(lǐng)域語(yǔ)言) 36 外部DSL 37 內(nèi)部DSL 38 DSL 的優(yōu)勢(shì) 39 DSL 的定義 39 適合內(nèi)部DSL 的語(yǔ)言 40 外部DSL 實(shí)例 42 DSL 設(shè)計(jì)的構(gòu)成要素 43 Sinatra 46 小結(jié) 47 2.3 元編程 48 Meta, Reflection 48 類(lèi)對(duì)象 51 類(lèi)的操作 52 Lisp 53 數(shù)據(jù)和程序 54 Lisp 程序 56 宏 56 宏的功與過(guò) 57 元編程的可能性與危險(xiǎn)性 59 小結(jié) 60 2.4 內(nèi)存管理 61 看似無(wú)限的內(nèi)存 61 GC 的三種基本方式 62 術(shù)語(yǔ)定義 62 標(biāo)記清除方式 63 復(fù)制收集方式 64 引用計(jì)數(shù)方式 65 引用計(jì)數(shù)方式的缺點(diǎn) 65 進(jìn)一步改良的應(yīng)用方式 66 分代回收 66 對(duì)來(lái)自老生代的引用進(jìn)行記錄 67 增量回收 68 并行回收 69 GC 大統(tǒng)一理論 69 2.5 異常處理 71 “一定沒(méi)問(wèn)題的” 71 用特殊返回值表示錯(cuò)誤 72 容易忽略錯(cuò)誤處理 72 Ruby 中的異常處理 73 產(chǎn)生異常 74 更高級(jí)的異常處理 75 Ruby 中的后處理保證 76 其他語(yǔ)言中的異常處理 77 Java 的檢查型異! 77 Icon 的異常和真假值 78 Eiffel 的Design by Contract 80 異常與錯(cuò)誤值 80 小結(jié) 81 2.6 閉包 82 函數(shù)對(duì)象 82 高階函數(shù) 83 用函數(shù)參數(shù)提高通用性 84 函數(shù)指針的局限 85 作用域:變量可見(jiàn)范圍 87 生存周期:變量的存在范圍 88 閉包與面向?qū)ο蟆 ?9 Ruby 的函數(shù)對(duì)象 89 Ruby 與java script 的區(qū)別 90 Lisp-1 與Lisp-2 91 第三章 編程語(yǔ)言的新潮流 3.1 語(yǔ)言的設(shè)計(jì) 97 客戶端與服務(wù)器端 97 向服務(wù)器端華麗轉(zhuǎn)身 98 在服務(wù)器端獲得成功的四大理由 99 客戶端的java script 100 性能顯著提升 101 服務(wù)器端的Ruby 102 Ruby on Rails 帶來(lái)的飛躍 102 服務(wù)器端的Go 103 靜態(tài)與動(dòng)態(tài) 104 動(dòng)態(tài)運(yùn)行模式 105 何謂類(lèi)型 105 靜態(tài)類(lèi)型的優(yōu)點(diǎn) 106 動(dòng)態(tài)類(lèi)型的優(yōu)點(diǎn) 106 有鴨子樣的就是鴨子 107 Structural Subtyping 108 小結(jié) 108 3.2 Go 109 New(新的) 109 Experimental(實(shí)驗(yàn)性的) 109 Concurrent(并發(fā)的) 110 Garbage-collected(帶垃圾回收的) 110 Systems(系統(tǒng)) 111 Go 的創(chuàng)造者們 111 Hello World 112 Go 的控制結(jié)構(gòu) 113 類(lèi)型聲明 116 無(wú)繼承式面向?qū)ο蟆 ?18 多值與多重賦值 120 并發(fā)編程 122 小結(jié) 124 3.3 Dart 126 為什么要推出Dart ? 126 Dart 的設(shè)計(jì)目標(biāo) 129 代碼示例 130 Dart 的特征 132 基于類(lèi)的對(duì)象系統(tǒng) 132 非強(qiáng)制性靜態(tài)類(lèi)型 133 Dart 的未來(lái) 134 3.4 CoffeeScript 135 最普及的語(yǔ)言 135 被誤解最多的語(yǔ)言 135 顯著高速化的語(yǔ)言 136 對(duì)java script 的不滿 138 CoffeeScript 138 安裝方法 139 聲明和作用域 139 分號(hào)和代碼塊 141 省略記法 142 字符串 143 數(shù)組和循環(huán) 143 類(lèi) 145 小結(jié) 146 3.5 Lua 148 示例程序 149 數(shù)據(jù)類(lèi)型 149 函數(shù) 150 表 150 元表 151 方法調(diào)用的實(shí)現(xiàn) 153 基于原型編程 155 和Ruby 的比較(語(yǔ)言篇) 157 嵌入式語(yǔ)言Lua 157 和Ruby 的比較(實(shí)現(xiàn)篇) 158 嵌入式Ruby 159 第四章 云計(jì)算時(shí)代的編程 4.1 可擴(kuò)展性 163 信息的尺度感 163 大量數(shù)據(jù)的查找 164 二分法查找 165 散列表 167 布隆過(guò)濾器 169 一臺(tái)計(jì)算機(jī)的極限 170 DHT(分布式散列表) 171 Roma 172 MapReduce 173 小結(jié) 174 4.2 C10K 問(wèn)題 175 何為C10K 問(wèn)題 175 C10K 問(wèn)題所引發(fā)的“想當(dāng)然” 177 使用epoll 功能 180 使用libev 框架 181 使用EventMachine 183 小結(jié) 185 4.3 HashFold 186 HashFold 庫(kù)的實(shí)現(xiàn)(Level 1) 187 運(yùn)用多核的必要性 190 目前的Ruby 實(shí)現(xiàn)所存在的問(wèn)題 191 通過(guò)進(jìn)程來(lái)實(shí)現(xiàn)HashFold(Level 2) 191 抖動(dòng) 193 運(yùn)用進(jìn)程池的HashFold(Level 3) 194 小結(jié) 197 4.4 進(jìn)程間通信 198 進(jìn)程與線程 198 同一臺(tái)計(jì)算機(jī)上的進(jìn)程間通信 199 TCP IP 協(xié)議 201 用C 語(yǔ)言進(jìn)行套接字編程 202 用Ruby 進(jìn)行套接字編程 204 Ruby 的套接字功能 205 用Ruby 實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器 208 小結(jié) 209 4.5 Rack 與Unicorn 210 Rack 中間件 211 應(yīng)用程序服務(wù)器的問(wèn)題 212 Unicorn 的架構(gòu) 215 Unicorn 的解決方案 215 性能 219 策略 220 小結(jié) 221 第五章 支撐大數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)技術(shù) 5.1 鍵- 值存儲(chǔ) 225 Hash 類(lèi) 225 DBM 類(lèi) 226 數(shù)據(jù)庫(kù)的ACID 特性 226 CAP 原理 227 CAP 解決方案——BASE 228 不能舍棄可用性 229 大規(guī)模環(huán)境下的鍵- 值存儲(chǔ) 230 訪問(wèn)鍵- 值存儲(chǔ) 230 鍵- 值存儲(chǔ)的節(jié)點(diǎn)處理 231 存儲(chǔ)器 232 寫(xiě)入和讀取 233 節(jié)點(diǎn)追加 233 故障應(yīng)對(duì) 233 終止處理 235 其他機(jī)制 235 性能與應(yīng)用實(shí)例 236 小結(jié) 236 5.2 NoSQL 237 RDB 的極限 237 NoSQL 數(shù)據(jù)庫(kù)的解決方案 238 形形色色的NoSQL 數(shù)據(jù)庫(kù) 239 面向文檔數(shù)據(jù)庫(kù) 240 MongoDB 的安裝 241 啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器 243 MongoDB 的數(shù)據(jù)庫(kù)結(jié)構(gòu) 244 數(shù)據(jù)的插入和查詢(xún) 244 用java script 進(jìn)行查詢(xún) 245 高級(jí)查詢(xún) 246 數(shù)據(jù)的更新和刪除 249 樂(lè)觀并發(fā)控制 250 5.3 用Ruby 來(lái)操作MongoDB 251 使用Ruby 驅(qū)動(dòng) 251 對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 253 數(shù)據(jù)的插入 253 數(shù)據(jù)的查詢(xún) 253 高級(jí)查詢(xún) 254 find 方法的選項(xiàng) 256 原子操作 257 ActiveRecord 259 OD Mapper 260 5.4 SQL 數(shù)據(jù)庫(kù)的反擊 264 “云”的定義 264 SQL 數(shù)據(jù)庫(kù)的極限 264 存儲(chǔ)引擎Spider 265 SQL 數(shù)據(jù)庫(kù)之父的反駁 265 SQL 數(shù)據(jù)庫(kù)VoltDB 268 VoltDB 的架構(gòu) 269 VoltDB 中的編程 270 Hello VoltDB! 271 性能測(cè)試 273 小結(jié) 275 5.5 memcached 和它的伙伴們 276 用于高速訪問(wèn)的緩存 276 memcached 277 示例程序 278 對(duì)memcached 的不滿 279 memcached 替代服務(wù)器 280 另一種鍵- 值存儲(chǔ)Redis 282 Redis 的數(shù)據(jù)類(lèi)型 284 Redis 的命令與示例 285 小結(jié) 289 第六章 多核時(shí)代的編程 6.1 摩爾定律 293 呈幾何級(jí)數(shù)增長(zhǎng) 293 摩爾定律的內(nèi)涵 294 摩爾定律的結(jié)果 295 摩爾定律所帶來(lái)的可能性 296 為了提高性能 297 摩爾定律的極限 302 超越極限 303 不再有免費(fèi)的午餐 304 6.2 UNIX 管道 305 管道編程 306 多核時(shí)代的管道 308 xargs——另一種運(yùn)用核心的方式 309 注意瓶頸 311 阿姆達(dá)爾定律 311 多核編譯 312 ccache 313 distcc 313 編譯性能測(cè)試 314 小結(jié) 315 6.3 非阻塞I/O 316 何為非阻塞I O 316 使用read(2) 的方法 317 邊沿觸發(fā)與電平觸發(fā) 319 使用read(2) + select 的方法 319 使用read+O_NONBLOCK 標(biāo)志 321 Ruby 的非阻塞I O 322 使用aio_read 的方法 323 6.4 node.js 330 減負(fù) 330 拖延 331 委派 332 非阻塞編程 333 node.js 框架 333 事件驅(qū)動(dòng)編程 334 事件循環(huán)的利弊 335 node.js 編程 335 node.js 網(wǎng)絡(luò)編程 337 node.js 回調(diào)風(fēng)格 339 node.js 的優(yōu)越性 340 EventMachine 與Rev 341 6.5 ZeroMQ 342 多CPU 的必要性 342 阿姆達(dá)爾定律 343 多CPU 的運(yùn)用方法 343 進(jìn)程間通信 345 管道 345 SysV IPC 346 套接字 347 UNIX 套接字 349 ZeroMQ 349 ZeroMQ 的連接模型 350 ZeroMQ 的安裝 352 ZeroMQ 示例程序 352 小結(jié) 354 版權(quán)聲明 356
|