作品介紹

代碼的未來(lái)


作者:[日]松本行弘     整理日期:2017-02-28 00:09:55


  《代碼的未來(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





上一本:機(jī)器人動(dòng)力學(xué)與控制 下一本:物理化學(xué)

作家文集

下載說(shuō)明
代碼的未來(lái)的作者是[日]松本行弘,全書(shū)語(yǔ)言?xún)?yōu)美,行文流暢,內(nèi)容豐富生動(dòng)引人入勝。為表示對(duì)作者的支持,建議在閱讀電子書(shū)的同時(shí),購(gòu)買(mǎi)紙質(zhì)書(shū)。

更多好書(shū)