打字猴:1.70043703e+09
1700437030
1700437031 图5-15 流行文化中的awk元素[13]
1700437032
1700437033
1700437034
1700437035
1700437036 UNIX传奇:历史与回忆 [:1700434703]
1700437037 UNIX传奇:历史与回忆 5.5 其他语言
1700437038
1700437039 Unix编程环境及其语言开发工具、丰富的潜在应用领域,当然还有精通编译器、编程语言理论和算法的组内专家,推动了其他语言的设计和实现。我不打算深究其中任何一种语言,但值得快速点个名。
1700437040
1700437041 没有必要理解这些语言的任何细节。真正的经验是,拥有了广泛的兴趣、语言专业知识以及像Yacc和Lex这样的工具,中心成员能够相对容易地为新应用领域创造新语言。如果没有这些因素的结合,将会困难得多。我想,如果没有这些因素,许多有趣的语言就不会存在。
1700437042
1700437043 最明显的例子是C++。它始于1979年,当时本贾尼·斯特劳斯特鲁普刚从剑桥大学获得博士学位,加入1127中心。本贾尼对仿真和操作系统感兴趣,但既有语言并不能真正满足他的需求。因此,他从最接近需求的Simula[14]中汲取养分,并将其与C语言融合。1980年,面向对象编程思想与C语言的效率和表现力相结合,结果得到了一种“带类的C语言”。
1700437044
1700437045 事实证明这是个好组合,而这门语言也繁盛起来。1983年,它得名C++,这是里克·马希蒂(Rick Mascitti)形容C++增量运算符的双关语。如今,C++是最广泛使用的编程语言之一,是微软Office套件和谷歌基础架构的重要组成部分,也是你最喜欢的浏览器(不管哪种)、许多视频游戏和其他幕后软件的核心。
1700437046
1700437047 本贾尼在我部门任职长达15年。就像前文提到的那样,他经常过来找我讨论设计决策,所以我算是看着C++长大的。至少在早期,我还能够理解它。但现在它是一门大了很多的语言,而我则变得所知甚少。
1700437048
1700437049 C++因其尺寸太大而饱受诟病,有时也因为从C语言承袭而来的语法受到责难。从多年以来与本贾尼的交谈中,我了解到,在这门语言中,一切选择都是他深思熟虑的结果。让C++成为C语言的超集是合理的工程和市场决策,尽管这需要容忍C语言许多语法和语义上的粗糙之处。如果本贾尼不以兼容C语言为目标,C++成功的机会就会小很多。建立一门新的语言很困难,让它在源码级(文化熟悉)和目标文件级(使用现有的C语言库)上兼容至关重要。在当时,让它和C语言同样高效也至关重要。
1700437050
1700437051 还有一些尚未提及的重要语言也源自1127中心。
1700437052
1700437053 斯图·费尔德曼和彼得·温伯格编写了首个Fortran 77编译器f77。作为一种语言,尽管它仍然没有一套合理的控制流语句,但Fortran 77比我拿来搞Ratfor的Fortran 66还是要好一些。不管怎么说,创造f77富有挑战性,但也物有所值,因为它被1127中心的数值分析人员在PDP-11和VAX上大量使用。
1700437054
1700437055 在做与f77相关的工作时,斯图和戴夫·盖伊(Dave Gay)编写了f2c。f2c的功能是将Fortran翻译成C语言,从而使得在没有Fortran编译器或Fortran编译器索价过高的系统上使用Fortran成为可能。
1700437056
1700437057 杰勒德·霍尔兹曼(图5-16)是从代尔夫特理工大学离职后加入1127中心的。他一直爱好摄影。20世纪80年代初,他提出一种编程语言,用于对数字图像文件进行算法转换。他把它称为Pico:
1700437058
1700437059
1700437060
1700437061
1700437062 图5-16 杰勒德·霍尔兹曼,约1981年(杰勒德·霍尔兹曼供图)
1700437063
1700437064 “原本这个名字表明了它的大小[15],后来更容易被理解为‘picture composition’(画面构成)的缩写。”
1700437065
1700437066 Pico是模式-动作语言的另一个例子。它根据用户定义的表达式评估原始图像中的每个像素,定义新图像;表达式可以是数值、坐标、各种函数和其他图像的一部分。这些表达式会导致有趣的变换,其中许多表达式出现在杰勒德于1988年出版的Beyond Photography一书中,用来描述和说明Pico。(图5-17所示为其中一个例子。)毫不奇怪,Pico是用C语言和Yacc语法分析器实现的。
1700437067
1700437068
1700437069
1700437070
1700437071 图5-17 杰勒德·霍尔兹曼,使用Pico转换而成
1700437072
1700437073 杰勒德还创造了基于专用语言的专业工具Spin,用于分析和检查涉及独立通信进程的软件系统。Spin可以验证某个系统在逻辑上是否正确,有没有死锁、停顿之类缺陷。(“你先请。”“不,你先请。”)Spin是1127中心研究如何呈现独立进程随着时间推移相互作用的范例,也体现了一流的软件工程如何做出易于使用、运行速度足够快的系统。Spin模型是用另一种叫作Promela(protocol metalanguage,意为“协议元语言”)的特殊用途语言编写。Promela也是用Yacc实现的。
1700437074
1700437075 Spin仍在蓬勃发展,它已安装到数千台设备上,还举办用户年度会议。它被用于验证大量的系统,覆盖从硬件设计到铁路信号协议的各种场景。
1700437076
1700437077 鲍勃·福勒(Bob Fourer)、戴夫·盖伊和我设计并实现了AMPL,这是一种像线性规划那样定义优化问题的语言。鲍勃是美国西北大学的管理科学和运筹学教授,长期以来一直致力于帮助人们创建数学优化模型。我们关于AMPL的工作始于1984年他来实验室休研究假的时候。
1700437078
1700437079 AMPL可以很容易地定义用于描述特定优化问题的模型,如给定运输成本、每间商店的预期销售额、每家工厂的生产能力等数据,寻找将货物从工厂运到商店的最佳方式。优化问题用代数符号写成,描述必须满足的约束条件系统,和要最大化或最小化的目标函数。
[ 上一页 ]  [ :1.70043703e+09 ]  [ 下一页 ]