从Fortran开启编程先河,到今日的Python、C++、Go等语言百花齐放,本书带领你踏上一场探索编程语言的文明之旅。本书注重内容广度与深度,通过多个维度的比较分析,深入剖析了每种语言的独特设计哲学及其对软件工程的影响。本书力求在历史故事、工程案例与技术细节之间取得平衡,通过对比分析揭示语言之间的传承与分化,帮助读者从"会用某种语言”提升到"理解语言背后的共性与原理”。此外,本书还注重内容的趣味性,通过丰富的精彩人物故事、生动的实际案例、深入的技术分析,以及精选的图表和趣味配图,展现编程语言演变的过程,以及它是如何改变世界的,让读者在轻松阅读中洞悉编程语言的过去、现在和将来。本书既适合软件工程师和相关专业人员阅读,用于拓宽技术视野和深化专业知识;也适合计算机科学与技术专业的学生和教师参考,作为教育和研究的阅读资料;还适合对编程语言历史感兴趣的业余爱好者学习。无论你是刚入门的新手还是资深的技术实践者,本书都是增长技术积累和扩展技术视野的得力助手。
李杨,2013年毕业加入腾讯,参与过QQ、微云、Now直播、腾讯课堂、企鹅辅导等项目,曾担任腾讯在线教育部多媒体研发组组长、终端一组组长,以及部门客户端Tech Leader等职位。拥有丰富的多平台敏捷开发经验。在腾讯公司带出了首个常态化免测研发团队,通过技术方法与理论提高研发人效。热爱编程,长期在一线编写代码,熟练掌握C++、C#、Objective-C、Swift、Java、Kotlin、JavaScript、Python等主流编程语言,对研发质量、设计模式、编程语言有独特的思考。
目录
第 1 章 编程语言概论.1
1.1 编程语言概论1
1.1.1 什么是编程语言.1
1.1.2 编程语言的分类.2
1.1.3 编程语言与自然语言的区别.3
1.1.4 现阶段的编程语言.4
1.2 编程语言的基本元素 4
1.2.1 变量和类型.4
1.2.2 运算符和函数.9
1.2.3 控制流、块和关键字.11
1.2.4 其他元素.14
1.2.5 Tab(制表符)和 Space(空格)的争论.15
1.4 如何阅读源代码.18
1.5 编程思想和编程范式 19
1.5.1 过程式编程.20
1.5.2 结构化编程.21
1.5.3 函数式编程.23
1.5.4 面向对象编程.26
1.5.5 其他编程范式.28
1.6 编程语言设计要点.30
1.6.1 性能和安全性.30
1.6.2 灵活性和低心智负担.36
1.6.3 正交性和实用性.38
1.7 编程语言的动态性.41
1.7.1 执行流的动态性.41
1.7.2 编译时的动态性.42
1.7.3 运行时的动态性.45
1.8 值得一提的语言特性 50
1.8.1 解释与编译.50
1.8.2 编译器优化.52
1.8.3 内存管理方式.53
1.8.4 模块化.58
1.8.5 宏.60
1.8.6 泛型编程.61
1.8.7 处理异常和错误.62
1.8.8 同步、异步与并发.68
1.8.9 再聊异步.70
1.8.10 空安全.74
1.8.11 框架和编程语言.76
1.8.12 编程语言的生态.77
1.8.13 编程语言的面向场景.77
1.8.14 编程语言与中央处理器的 设计哲学.79
1.9 实现一种编程语言的要素81
1.10 接下来.83
第 2 章 1950—1959 年,编程语言的起源:从汇编语言到高级语言 .84
2.1 编程语言的史前时代 84
2.1.1 机械计算机的诞生.84
2.1.2 电子计算机的诞生.85
2.1.3 存储程序概念的革新.86
2.2 时代背景和发展方向 87
2.3 FORTRAN 90
2.3.1 语言的作者和动机.90
2.3.2 语言的基本信息.91
2.3.3 语言的特性和亮点.93
2.3.4 语言的发展和影响.95
2.3.5 点评.97
2.4 Lisp 98
2.4.1 语言的作者和动机.98
2.4.2 语言的基本信息.99
2.4.3 语言的特性和亮点.100
2.4.4 语言的发展和影响.101
2.4.5 点评.103
2.5 ALGOL 103
2.5.1 语言的作者和动机.103
2.5.2 语言的基本信息.105
2.5.3 语言的特性和亮点.106
2.5.4 语言的发展和影响.107
2.5.5 点评.109
2.6 COBOL 109
2.6.1 语言的作者和动机.109
2.6.2 语言的基本信息.110
2.6.3 语言的特性和亮点.112
2.6.4 语言的发展和影响.114
2.6.5 点评.115
2.7 本时期其他重要的编程语言.116
2.7.1 Plankalkül116
2.7.2 IPL.117
2.8 小结.117
第 3 章 1960—1969 年编程语言设计的探索:奠定现代高级编程语言的基础. 121
3.1 时代背景和发展方向 121
3.2 CPL 和 BCPL122
3.2.1 语言的作者和动机.122
3.2.2 语言的基本信息.122
3.2.3 语言的特性和亮点.123
3.2.4 语言的发展和影响.124
3.2.5 点评.126
3.3 BASIC126
3.3.1 语言的作者和动机.126
3.3.2 语言的基本信息.128
3.3.3 语言的特性和亮点.128
3.3.4 语言的发展和影响.129
3.3.5 点评.131
3.4 Simula132
3.4.1 语言的作者和动机.132
3.4.2 语言的基本信息.133
3.4.3 语言的特性和亮点.135
3.4.4 语言发展和影响.136
3.4.5 点评.138
3.5 本时期其他重要的编程语言.139
3.5.1 APL139
3.5.2 PL/I140
3.5.3 ISWIM .142
3.5.4 shell .145
3.5.5 Logo .150
3.5.6 B 语言 .152
3.6 小结.153
第 4 章 1970—1979 年,语言的成熟期:重视动态性和编写大规模工程应用. 155
4.1 时代背景和发展方向 155
4.2 Pascal.155
4.2.1 语言的作者和动机.155
4.2.2 语言的基本信息.157
4.2.3 语言的特性和亮点.159
4.2.4 语言的发展和影响.160
4.2.5 点评.161
4.3 Smalltalk162
4.3.1 语言的作者和动机.162
4.3.2 语言的基本信息.163
4.3.3 语言的特性和亮点.165
4.3.4 语言的发展和影响.167
4.3.5 点评.169
4.4 C 语言 .170
4.4.1 语言的作者和动机.170
4.4.2 语言的基本信息.172
4.4.3 语言的特性和亮点.173
4.4.4 语言的发展和影响.175
4.4.5 点评.179
4.4.6 UNIX 设计哲学 180
4.5 ML182
4.5.1 语言的作者和动机.182
4.5.2 语言的基本信息.184
4.5.3 语言的特性和亮点.186
4.5.4 语言的发展和影响.186
4.5.5 点评.187
4.6 Modula.188
4.6.1 语言的作者和动机.188
4.6.2 语言的基本信息.189
4.6.3 语言的特性和亮点.190
4.6.4 语言的发展和影响.191
4.6.5 点评.192
4.7 本时期其他重要的编程语言.193
4.7.1 Prolog.193
4.7.2 SQL195
4.7.3 Scheme.196
4.7.4 Ada 199
4.8 小结.201
第 5 章 1980—1989 年,面向对象浪潮到来:不支持面向对象都不好意思打招呼 . 203
5.1 时代背景和发展方向 203
5.2 Objective-C 203
5.2.1 语言的作者和动机.203
5.2.2 语言的基本信息.204
5.2.3 语言的特性和亮点.207
5.2.4 语言的发展和影响.211
5.2.5 点评.212
5.3 C++ 213
5.3.1 语言的作者和动机.213
5.3.2 语言的基本信息.214
5.3.3 语言的特性和亮点.217
5.3.4 语言的发展和影响.222
5.3.5 点评.235
5.4 Perl.244
5.4.1 语言的作者和动机.244
5.4.2 语言的基本信息.245
5.4.3 语言的特性和亮点.246
5.4.4 语言的发展和影响.248
5.4.5 点评.250
5.5 本时期其他重要的编程语言.251
5.5.1 Erlang 251
5.5.2 ABC .253
5.5.3 Self 语言254
5.5.4 Command Prompt 命令提示符256
5.5.5 Bash shell 257
5.6 本章小结 259
第 6 章 1990—1999 年,编程语言第二次快速发展期:垃圾回收成标配,Web 应用需求极大增加 . 261
6.1 时代背景和发展方向 261
6.2 Visual Basic 262
6.2.1 语言的作者和动机.262
6.2.2 语言的基本信息.262
6.2.3 语言的特性和亮点.264
6.2.4 语言发展和影响.266
6.2.5 点评.268
6.3 Python269
6.3.1 语言的作者和动机.269
6.3.2 语言的基本信息.270
6.3.3 语言的特性和亮点.273
6.3.4 语言的发展和影响.279
6.3.5 点评.283
6.4 数据分析语言285
6.4.1 SAS 285
6.4.2 MATLAB .285
6.4.3 R 语言.286
6.4.4 Julia .288
6.5 AI-first 编程语言288
6.6 Java 289
6.6.1 语言的作者和动机.289
6.6.2 语言的基本信息.290
6.6.3 语言的特性和亮点.294
6.6.4 语言的发展和影响.296
6.6.5 点评.300
6.6.6 C、C++、Java 的对比303
6.7 Ruby.304
6.7.1 语言的作者和动机.304
6.7.2 语言的基本信息.305
6.7.3 语言的特性和亮点.307
6.7.4 混入的历史.309
6.7.5 语言的发展和影响.312
6.7.6 点评.312
6.8 JavaScript 314
6.8.1 语言的作者和动机.314
6.8.2 语言的基本信息.315
6.8.3 语言的特性和亮点.317
6.8.4 JavaScript 引擎320
6.8.5 语言的发展和影响.321
6.8.6 点评.325
6.8.7 前端技术发展的后续.329
6.9 本时期其他重要的编程语言.331
6.9.1 Haskell.331
6.9.2 Z shell ( Zsh ).335
6.9.3 Lua.336
6.9.4 PHP .340
6.9.5 OCaml343
6.9.6 Rebol .345
6.9.7 ActionScript.347
6.9.7 标记 / 配置语言349
6.9.8 恶搞编程语言.355
6.10 本章小结357
第 7 章 2000—2009 年,天下苦 C++ 久矣:函数式编程思想复兴,系统编程语言竞争激烈 360
7.1 时代背景和发展方向 360
7.2 JVM 语言:Groovy、Scala 和Clojure .361
7.2.1 JVM 语言 361
7.2.2 Scala 361
7.2.3 Groovy .364
7.2.4 Clojure .365
7.2.5 JVM 语言点评 367
7.3 C#.368
7.3.1 语言的作者和动机.368
7.3.2 语言的基本信息.369
7.3.3 语言的特性和亮点.371
7.3.4 语言的发展和影响.379
7.3.5 点评.382
7.4 D 语言.383
7.4.1 语言的作者和动机.383
7.4.2 语言的基本信息.384
7.4.3 语言的特性和亮点.387
7.4.4 语言的发展和影响.393
7.4.5 点评.395
7.5 Go .397
7.5.1 语言的作者和动机.397
7.5.2 语言的基本信息.399
7.5.3 语言的特性和亮点.402
7.5.4 语言的发展和影响.407
7.5.5 点评.409
7.6 本时期其他重要的编程语言.411
7.6.1 PowerShell(shell 语言).411
7.6.2 易语言.415
7.6.3 少儿编程语言 Scratch416
7.7 本章小结 418
第 8 章 2010—2024 年,重视可读性和安全性:提高语言的安全性,更适用于大型项目 420
8.1 时代背景和发展方向 420
8.2 Rust 421
8.2.1 语言的作者和动机.421
8.2.2 语言的基本信息.421
8.2.3 语言的特性和亮点.424
8.2.4 Rust 所有权 430
8.2.5 Rust 所有权与函数式编程思想 433
8.2.6 Rust 宏 434
8.2.7 AI 与 Rust 结合 436
8.2.8 语言的发展和影响.438
8.2.9 点评.439
8.2.10 Rust 语言给行业带来的思考 442
8.3 Kotlin .443
8.3.1 语言的作者和动机.443
8.3.2 语言的基本信息.444
8.3.3 语言的特性和亮点.446
8.3.4 语言的发展和影响.450
8.3.5 点评.451
8.4 Dart 452
8.4.1 语言的作者和动机.452
8.4.2 语言的基本信息.453
8.4.3 语言的特性和亮点.456
8.4.4 语言的发展和影响.459
8.4.5 点评.460
8.5 TypeScript .461
8.5.1 语言的作者和动机.461
8.5.2 语言的基本信息.462
8.5.3 语言的特性和亮点.463
8.5.4 语言的发展和影响.465
8.5.5 点评.466
8.6 Swift .467
8.6.1 语言的作者和动机.467
8.6.2 语言的基本信息.469
8.6.3 语言的特性和亮点.471
8.6.4 语言的发展和影响.477
8.6.5 点评.480
8.7 本时期其他重要的编程语言.482
8.7.1 Zig482
8.7.2 CppFront 编译器.486
8.7.3 MoonBit .487
8.7.5 智能合约语言.490
8.8 本章小结 491
第 9 章 横向点评 . 493
9.1 编程语言人格化.493
9.2 编程语言的流行程度 515
9.3 语言基本元素的语法变迁519
9.3.1 变量和类型:变量和常量定义语法的变迁.519
9.3.2 运算符和函数:函数定义语法的
变迁.521
9.3.3 控制流和关键字:循环结构语法的变迁.525
9.4 语法糖大观园529
9.5 编程语言的生态.535
9.6 编程语言的同质化.537
9.6.1 语言的互转换.537
9.6.2 语言差异的本质.538
9.7 编程语言科学家先驱 539
第 10 章 结语 . 542
10.1 编程语言发展历程的简要回顾.542
10.2 推动编程语言发展的技术 .546
10.3 编程语言未来发展方向548
10.4 人工智能带来的革命549
10.5 最伟大的编程语言是 DNA 550
10.6 写在最后552