必威电竞|足球世界杯竞猜平台

代碼的未來
來源:互聯網

《代碼的未來》是創作的又一部各層次程序設計人員和編程愛好者喜愛的作品,本書由周自恒編譯。主要講述了Go、VoltDB、node.jsCoffeeScriptDartmongodb摩爾定律編程語言、多核、NoSQL等當今備受關注的話題。

內容簡介

《代碼的未來》是Ruby之父松本行弘的又一力作。作者對云計算、大數據時代下的各種編程語言以及相關技術進行了剖析,并對編程語言的未來發展趨勢做出預測,內容涉及Go、VoltDB、node.js、CoffeeScript、Dart、MongoDB、摩爾定律、編程語言、多核、NoSQL等當今備受關注的話題。

《代碼的未來》面向各層次程序設計人員和編程愛好者,也可供相關技術人員參考。

作者簡介

松本行弘(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設計 by Contract 80

異常與錯誤值 80

小結 81

2.6  閉包 82

函數對象 82

高階函數83

用函數參數提高通用性 84

函數指針的局限 85

作用域:變量可見范圍 87

生存周期:變量的存在范圍 88

閉包與面向對象 89

Ruby 的函數對象 89

Ruby 與ECMAScript 的區別 90

LISP1 與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

Garbagecollected(帶垃圾回收的) 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

ECMAScript 的不滿 138

CoffeeScript138

安裝方法 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

ECMAScript 進行查詢 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

memcached277

示例程序 278

對memcached 的不滿 279

memcached 替代服務器 280

另一種鍵- 值存儲Redis 282

Redis 的數據類型 284

Redis 的命令與示例 285

小結 289

第六章 多核時代的編程

6.1  摩爾定律 293

呈幾何級數增長 293

摩爾定律的內涵 294

摩爾定律的結果 295

摩爾定律所帶來的可能性 296

為了提高性能 297

摩爾定律的極限 302

超越極限 303

不再有免費的午餐 304

6.2UNIX 管道 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

參考資料 >

生活家百科家居網