本书是27位杰出的设计师与你分享他们的智慧和经验。书中以问答方式告诉为什么要创建某种编程语言、它在技术上如何开发、如何教授和学习,以及它如何顺应时代发展等。你会发现构建成功编程语言所需的思想和步骤,它广受欢迎的原因,以及如何处理程序员常见的问题。因此,如果你想深入学习设计成功编程语言的思想,本书会对你大有帮助。
本书目录:
推荐序 I
前言 III
1 C++ 1
Bjarne Stroustrup
1.1 设计决策 2
1.2 使用语言 5
1.3 OOP和并发 8
1.4 关于未来 11
1.5 有关教学 14
2 Python 17
Guido van Rossum
2.1 Python方式 18
2.2 优秀的程序员 23
2.3 多种Python 27
2.4 权宜之计和经验 31
3 APL 35
Adin Falkoff
3.1 纸笔方式 36
3.2 基本原理 38
3.3 并行 43
3.4 遗留 45
4 Forth 47
Chuck Moore
4.1 Forth语言与语言设计 48
4.2 硬件 53
4.3 应用程序设计 56
5 BASIC 63
Tom Kurtz
5.1 BASIC背后的目标 64
5.2 编译器设计 69
5.3 语言和编程实践 72
5.4 语言设计 73
5.5 工作目标 77
6 AWK 81
Al Aho
6.1 算法生命周期 82
6.2 语言设计 83
6.3 Unix及其文化 85
6.4 文档的作用 89
6.5 计算机科学 92
6.6 培育小语言 93
6.7 设计一种新语言 97
6.8 遗留文化 103
6.9 变革性技术 105
6.10 改变世界的“位” 109
6.11 理论和实践 113
6.12 等待突破 118
6.13 通过实例来编程 122
7 Lua 127
Luiz Henrique de Figueiredo and Roberto Ierusalimschy
7.1 脚本的功能 128
7.2 经验 130
7.3 语言设计 134
8 Haskell 141
Simon Peyton Jones, Paul Hudak, Philip Wadler, and John Hughes
8.1 功能性团队 142
8.2 函数式编程之路 144
8.3 Haskell语言 149
8.4 传播(函数式)教育 154
8.5 形式体系和发展 156
9 ML 161
Robin Milner
9.1 可靠性定理 162
9.2 意义理论(译注) 168
9.3 超越信息学 173
10 SQL 177
Don Chamberlin
10.1 一篇开创性的有重大影响的根本性的论文 178
10.2 语言 180
10.3 反馈和演进 183
10.4 XQuery和XML 186
11 Objective-C 189
Brad Cox and Tom Love
11.1 Objective-C工程 190
11.2 培育一种语言 192
11.3 教育和培训 195
11.4 项目管理和遗留软件 196
11.5 Objective-C和其它语言 202
11.6 组件、沙子和砖 205
11.7 作为经济现象的质量 210
11.8 教育 212
12 Java 215
James Gosling
12.1 功能或者简单性 216
12.2 品味的问题 218
12.3 并发性 221
12.4 设计一种语言 223
12.5 反馈循环 226
13 C# 229
Anders Hejlsberg
13.1 语言和设计 230
13.2 培育一种语言 235
13.3 C# 238
13.4 计算机科学的未来 242
14 UML 247
Ivar Jacobson, James Rumbaugh, and Grady Booch
14.1 学习和教学 248
14.2 人们的角色 252
14.3 UML 255
14.4 知识 258
14.5 作好变革准备 260
14.6 使用UML 263
14.7 层和语言 266
14.8 一点可复用性 269
14.9 对称关系 272
14.10 UML 275
14.11 语言设计 277
14.12 培训开发者 282
14.13 创新、改进和模式 284
15 Perl 291
Larry Wall
15.1 革命性的语言 292
15.2 语言 295
15.3 社区 299
15.4 改进和革命 302
16 PostScript 307
Charles Geschke and John Warnock
16.1 为永恒而设计 308
16.2 研究和教育 316
16.3 长寿命接口 319
16.4 标准愿望 322
17 Eiffel 325
Bertrand Meyer
17.1 一个充满灵感的下午 326
17.2 可复用性和泛型 331
17.3 校对语言 334
17.4 管理成长和演进 338
后记 343
受访嘉宾 345
索引 355
前言/序
Preface
编写软件是件难事——最起码,编出来的软件如果要经得住测试、时间和不同环境的考验,确实很难。在过去的五十多年里,为了让编写软件变得更容易一些,不仅软件工程领域为此在不懈努力,编程语言也被赋以重任。但是,真正的困难究竟是什么呢?
大多数书籍和论文在回答这个问题时,都将焦点集中在软件体系结构、需求之类的话题上。不过,如果困难在于编写程序本身,又会怎么样呢?换句话说,如果我们把自己当成是更具交流(语言)色彩的程序员,而不是更具工程色彩的程序员,又该如何呢?
小孩子两三岁学说话,五六岁学读书写字。我从来没见过哪个大作家是成年以后才学习读书和写字的。你也没见过晚年才开始学习编程的xx程序员吧?
如果孩子比成人更容易学习外语,这对我们学习编程有什么启发呢?要知道,编程这事恰恰是和新语言密切相关的!
假如你不知道某件东西在新学的外语中怎么说,你会使用自己熟悉的词汇来描述它,并希望别人也能理解你的意思。这不正是我们编写软件要做的事吗?我们使用编程语言来描述脑海中的对象,并希望编译器或解释器也可以理解。如果行不通,我们再回头检查脑海中的设计,找出被忽略或有偏差的部分。
带着这些问题,我决定开展一系列调查:为什么要创建某种编程语言、它在技术上如何开发、如何教授和学习,以及它如何顺应时代发展等。
我和Shane极为荣幸地邀请到了27位杰出的设计师与你分享他们的智慧和经验。
在这本《编程之魂》中,你会发现构建成功编程语言所需的思想和步骤,它广受欢迎的原因,以及如何处理程序员常见的问题。因此,如果你想深入学习设计成功编程语言的思想,本书会对你大有帮助。
如果你想找到有关软件和编程语言激动人心的想法,就需要一支荧光记号笔,甚至两支,因为我保证,你会发现这本书处处闪耀着智慧的光辉。
—Federico Biancuzzi
材料组织结构
Organization of the Material
在你浏览本书时,各章的排序方式会为提供各种充满争议的不同观点。请仔细品味这些采访内容,并时常回味、反思。
第1章,C++,采访Bjarne Stroustrup。
第2章,Python,采访Guido van Rossum。
第3章,APL,采访Adin D. Falkoff。
第4章,Forth,采访Charles H. Moore。
第5章,BASIC,采访Thomas E. Kurtz。
第6章,AWK,采访Alfred Aho、Peter Weinberger和Brian Kernighan。
第7章,Lua,采访Luiz Henrique de Figueiredo和Roberto Ierusalimschy。
第8章,Haskell,采访Simon Peyton Jones、Paul Hudak、Philip Wadler和John Hughes。
第9章,ML,采访Robin Milner。
第10章,SQL,采访Don Chamberlin。
第11章,Objective-C,采访Tom Love和Brad Cox。
第12章,Java,采访James Gosling。
第13章,C#,采访Anders Hejlsberg。
第14章,UML,采访Ivar Jacobson、James Rumbaugh和Grady Booch。
第15章,Perl,采访Larry Wall。
第16章,PostScript,采访Charles Geschke和John Warnock。
第17章,Eiffel,采访Bertr和Meyer。
“受访嘉宾”一节列出了所有受访嘉宾的简历。
本书使用的约定
Conventions Used in This Book
本书使用如下排版约定:
斜体字(Italic)
表示新术语、URL、文件名以及应用程序。
等宽字体(Constant width)
表示计算机文件目录和程序中的普通内容。
如何联系我们
How to Contact Us
我们已尽力核验本书所提供的信息,尽管如此,仍不能保证本书xx没有瑕疵,而网络世界的变化之快,也使得本书xx过时的保证成为不可能。如果读者发现本书内容上的错误,不管是赘字、错字、语意不清,甚至是技术错误,我们都竭诚虚心接受读者指教。如果您有任何问题,请按照以下的联系方式与我们联系。
奥莱理软件(北京)有限公司
北京市 西城区 西直门 南大街2号 成铭大厦C座807室
邮政编码:100080
网页:
E-mail:
O Reilly & Associates, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
(800) 998-9938 (in the United States or Canada)
(707) 829-0515 (international/local)
(707) 829-0104 (fax)
与本书有关的在线信息如下所示。
(原书)
(中文版)
北京博文视点资讯有限公司(武汉分部)
湖北省 武汉市 洪山区 吴家湾 邮科院路特1号 湖北信息产业科技大厦1402室
邮政编码:430074
电话: (027)87690813 传真:(027)87690813转817
读者服务网页:
E-mail:
(读者信箱)
(投稿信箱)
Safari® Books Online
如果你在喜欢的技术图书上看到Safari® Books Online图标,那就表明该书可以通过O’Reilly Network Safari Bookshelf在线获得。
Safari提供了一种比电子图书更好的解决方案。它是一个虚拟图书馆,如果你需要{zx1}、最准确的信息,它能够让你非常容易地搜索成千上万的技术图书、剪切并粘贴示例代码、下载各章节以及发现快速解答等。欢迎免费试用:。
推荐序
Foreword
编程语言设计是个魅力无穷的话题。很多程序员认为自己能设计出一种编程语言,可以比现在使用的更好;很多研究者也觉得自己能设计出这样的语言。这些人的自信本来无可厚非,不过他们的设计最终多被束之高阁。你不会在这本书里找到它们。
编程语言设计是件严肃认真的事情。语言设计中的小错误,可能会导致使用该语言编写的实际程序出现大问题。而且,即使是程序中的小错误,也可能会造成极其严重的后果。软件的使用范围很广,而其脆弱性使得恶意软件攻击频繁发生。这已经为全球带来了数十亿美元的经济损失。本书会反复讨论编程语言的防危性(safety)和安全性(security)这个主题。
设计编程语言是一种前途莫测的冒险之举。很多语言是为通用应用程序设计的,并且有众多组织的支持和倡导,却只能在受众很少的细分市场(niche market)内勉强立足。与此相反,设计用于有限用途或局部使用的那些语言,也可以赢得大批拥趸,有时候甚至会用于连设计者都从未想到的环境和应用中。本书集中讨论后一类语言。
这些成功的语言有一个共同的显著特征:它们都来自个人或志同道合的爱好者小团队的创意。它们的设计者是程序设计的宗师(mastermind,大师)级人物;他们具有足够的经验、远见、能力、耐力和{jd1}的天分,能够通过语言的最初实现、基于实战经验的演变,以及实际使用(事实上)和标准流程(法律上)这两方面的标准化,推动语言不断发展。
在本书中,读者将会和这些宗师们xxx对话。他们每个人都会接受深度访谈,讲述有关语言的故事,以及语言成功背后的原动力。他们坦陈成功取决于正确决策和好运气,二者缺一不可。{zh1},我们相信出版访谈原文,可以让您深入了解设计者的个性和动机,这和设计语言本身一样具有无穷的魅力。
—Sir Tony Hoare
Sir Tony Hoare,美国计算机学会图灵奖和京都奖(Kyoto Award)获得者,50年来一直是计算算法和编程语言研究的{ldz}。他在1969年撰写的{dy}篇学术论文,系统地研究了证明程序正确性的思想,并提出编程语言设计的目标之一是更易于编写正确的程序。他非常高兴地看到该思想已在编程语言设计者中间逐渐传播开来。