第1章
如何深入高效地學習語言 1
1.1 在比較中學習 2
語言不同,規則不同 2
c語言和ruby語言中的真假值 3
java語言中的真假值 3
1.2 在曆史中學習 4
理解語言設計者的意圖 4
應該學哪種語言,我們無從所知 4
學習適用於各種語言的知識 5
1.3 小結 6
第2章
程序設計語言誕生史 7
2.1 程序設計語言誕生的曆史 8
連接電纜 8
程序內置 9
fortran語言問世 10
2.2 程序設計語言産生的原因 11
懶惰:程序員的三大美德之一 11
語言們各有各的便捷 12
2.3 小結 13
第3章
語法的誕生 15
3.1 什麼是語法 16
運算符的優先順序 16
語法是語言設計者製定的規則 17
3.2 棧機器和forth語言 17
計算的流程 18
如何錶達計算順序 18
現在仍然使用的棧機器 19
3.3 語法樹和lisp語言 20
計算流 20
如何錶達計算順序 20
現在仍然使用的語法樹 21
專欄 要確認理解是否正確,首先得錶達齣來 23
3.4 中綴錶示法 24
語法分析器 24
規則的競爭 25
專欄 當你不知道該學習什麼時 25
3.5 小結 26
第4章
程序的流程控製 27
4.1 結構化程序設計的誕生 28
4.2 if語句誕生以前 28
為什麼會有if語句 28
為什麼會有if...else語句 30
4.3 while語句——讓反復執行的if語句更簡潔 33
使用while語句的錶達方式 33
不使用while語句的錶達方式 34
4.4 for語句——讓數值漸增的while語句更簡潔 35
使用for語句的錶達方式 35
不使用for語句的錶達方式 35
foreach——根據處理的對象來控製循環操作 36
4.5 小結 37
第5章
函數 39
5.1 函數的作用 40
便於理解——如同一個組織 40
便於再利用——如同零部件 41
程序中再利用的特徵 41
5.2 返迴命令 42
函數的誕生 43
記錄跳轉目的地的專用內存 44
專欄 函數命名 45
棧 45
5.3 遞歸調用 47
嵌套結構體的高效處理 48
嵌套結構體的處理方法 48
5.4 小結 52
第6章
錯誤處理 53
6.1 程序也會齣錯 54
6.2 如何傳達錯誤 55
通過返迴值傳達齣錯信息 55
齣錯則跳轉 58
6.3 將可能齣錯的代碼括起來的語句結構 61
john goodenough 的觀點 61
引入clu語言 62
引入c++語言 62
引入windows nt 3.1 63
6.4 齣口隻要一個 64
為什麼引入finally 64
成對操作的無遺漏執行 64
6.5 何時拋齣異常 68
函數調用時參數不足的情況 68
數組越界的情況 69
齣錯後就要立刻拋齣異常 70
6.6 異常傳遞 71
異常傳遞的問題 71
java語言的檢查型異常 71
檢查型異常沒有得到普及的原因 73
專欄 具體的知識和抽象的知識 73
專欄 學習講求細嚼慢咽 74
6.7 小結 74
專欄 從需要的地方開始閱讀 75
第7章
名字和作用域 77
7.1 為什麼要取名 78
怎樣取名 79
名字衝突 80
如何避免衝突 80
7.2 作用域的演變 81
動態作用域 82
靜態作用域 84
7.3 靜態作用域是完美的嗎 88
專欄 其他語言中的作用域 88
嵌套函數的問題 89
外部作用域的再綁定問題 91
7.4 小結 93
第8章
類型 95
8.1 什麼是類型 96
8.2 數值的on和off的錶達方式 97
數位的發明 97
七段數碼管顯示器 98
算盤 99
8.3 一個數位上需要幾盞燈泡 100
從十進製到二進製 100
八進製與十六進製 102
8.4 如何錶達實數 103
定點數——小數點位置確定 103
浮點數——數值本身包含小數部分何處開始的信息 104
8.5 為什麼會齣現類型 107
沒有類型帶來的麻煩 107
早期的fortran語言中的類型 108
告訴處理器變量的類型 108
隱性類型轉換 109
8.6 類型的各種展開 111
用戶定義型和麵嚮對象 112
作為功能的類型 112
總稱型、泛型和模闆 113
動態類型 116
類型推斷 118
8.7 小結 122
專欄 先掌握概要再閱讀細節 122
第9章
容器和字符串 125
9.1 容器種類多樣 126
9.2 為什麼存在不同種類的容器 127
數組與鏈錶 127
鏈錶的長處與短處 130
專欄 大o錶示法——簡潔地錶達計算時間和數據量之間的關係 131
語言的差異 132
9.3 字典、散列、關聯數組 132
散列錶 133
樹 134
元素的讀取時間 136
沒有萬能的容器 138
9.4 什麼是字符 139
字符集和字符的編碼方式 139
計算機誕生以前的編碼 140
edsac的字符編碼 142
ascii時代和ebcdic時代 142
日語的編碼 144
shift_jis編碼對程序的破壞 145
魔術注釋符 147
unicode帶來瞭統一 148
9.5 什麼是字符串 150
帶有長度信息的pascal語言字符串和不帶這一信息的c語言字符串 150
1個字符為16比特的java語言字符串 153
python 3中引入的設計變更 153
ruby 1.9的挑戰 154
9.6 小結 155
第10章
並行處理 157
10.1 什麼是並行處理 158
10.2 細分後再執行 158
10.3 交替的兩種方法 159
協作式多任務模式——在閤適的節點交替 159
搶占式多任務模式——一定時間後進行交替 160
10.4 如何避免競態條件 160
競態條件成立的三個條件 161
沒有共享——進程和actor模型 162
不修改——const、val、immutable 164
不介入 164
10.5 鎖的問題及對策 166
鎖的問題 166
藉助事務內存來解決 167
事務內存的曆史 168
事務內存成功嗎 169
10.6 小結 170
第11章
對象與類 171
11.1 什麼是麵嚮對象 172
內涵因語言而異的麵嚮對象 172
對象是現實世界的模型 174
什麼是類 175
11.2 歸集變量與函數建立模型的方法 175
11.3 方法1:模塊、包 176
什麼是模塊、包 176
用perl語言的包設計對象 177
光有模塊不夠用 178
分開保存數據 179
嚮參數傳遞不同的散列 179
把初始化處理也放入包中 180
把散列和包綁定在一起 181
11.4 方法2:把函數也放入散列中 183
first class 183
把函數放入散列中 184
創建多個計數器 185
把共享的屬性放入原型中 186
這就是麵嚮對象嗎 189
11.5 方法3:閉包 190
什麼是閉包 190
為什麼叫做閉包 191
11.6 方法4:類 191
霍爾設想的類 192
c++語言中的類 192
功能說明的作用 193
類的三大作用 193
11.7 小結 194
第12章
繼承與代碼再利用 195
12.1 什麼是繼承 196
繼承的不同實現策略 197
繼承是把雙刃劍 199
裏氏置換原則 199
12.2 多重繼承 201
一種事物在多個分類中 201
多重繼承對於實現方式再利用非常便利 202
12.3 多重繼承的問題——還是有衝突 203
解決方法1:禁止多重繼承 205
解決方法2:按順序進行搜索 207
解決方法3:混入式處理 211
解決方法4:trait 213
12.4 小結 216
專欄 從頭開始逐章手抄 217
· · · · · · (
收起)
評分
☆☆☆☆☆
并发 其实是一种伪装“并行”,只是在不易察觉的极端间隔时间内交替进行多项处理,在某一瞬间实际上只进行一项处理。 何时交替? 协作式多任务模式(基于一种信任),即在合适的时机自发进行交替,但是存在某个处理一直找不到合适的节点进行任务切换,导致其他处理无法等到执行...
評分
☆☆☆☆☆
从“编码”(コーディン)到“编程”(プログラミン),这个名词的小小改变,其实凝结了人类的许多智慧和心血。而这其中最重要的大发明,就是程序语言。人类擅长的是用语言交流,所以发明了各种各样的语言,这么一来人类就可以用自己熟悉的语言来编写程序,而不必直接去编写只...
評分
☆☆☆☆☆
評分
☆☆☆☆☆
第一章奠定全书的基调:在比较中学习、在历史中学习,从横向比较与纵向进化中学习到不同语言的共通与差异、语言的变化来由。后者也是《深入理解 C#》采用的方式,语言的进化指明的是提出问题与提出解决方案。 前中后缀针对的是运算符的位置,前缀表达式和后缀表达式分别被称为...
評分
☆☆☆☆☆
编程语言核心概念,这就是本书的原标题,我想代码之髓一定是中文编辑后来画蛇添足加上去的. 编程语言本身已经走过了很长的发展里程,经过了摸索化,实践化,理论化,理论实践化等很多个阶段.在现在的时代,已经呈现出过度复杂化,过度概念化的倾向. 如果我们不能够追根溯源,从历史里...