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可以很容易地定义用于描述特定优化问题的模型,如给定运输成本、每间商店的预期销售额、每家工厂的生产能力等数据,寻找将货物从工厂运到商店的最佳方式。优化问题用代数符号写成,描述必须满足的约束条件系统,和要最大化或最小化的目标函数。
1700437080
1700437081
类似这样的优化问题触及许多行业的业务核心:航空公司机组调度,制造、运输和配送,库存控制,广告投放以及其他各种大量应用。
1700437082
1700437083
我用C++写了最初的AMPL实现,还用到Yacc语法和(我想)用于词法分析的Lex。这是我写的第一个正经C++程序,不过我很快就把代码移交给了戴夫·盖伊。
1700437084
1700437085
AMPL也许是唯一广泛使用的源自1127中心的专有语言。(语言本身不受版权保护,但据我所知,目前还没有开源的实现。)AT&T在AMPL创建几年后就开始向其他公司授权。戴夫和我从贝尔实验室退休后,我们3个人成立了一家小公司,专注AMPL优化,继续AMPL的开发和营销。最终,我们从贝尔实验室购买了产权,这样我们就可以走自己的路。公司规模仍然很小,但在其利基市场上是重要玩家。
1700437086
1700437087
20世纪80年代初,罗布·派克(图5-18)和卢卡·卡德利(Luca Cardelli)试验了为并发设计的语言,这种语言尤其关注与鼠标和键盘等输入设备的交互,因此得名Squeak[16](以及后来的Newsqueak)。Newsqueak的概念最终融入Plan 9中使用的并发语言Limbo和Alef,10年后又为Go语言所采纳。Go语言由罗布·派克、肯·汤普森和罗伯特·格里塞默于2008年在谷歌公司创建。
1700437088
1700437089
1700437090
1700437091
1700437092
图5-18 罗布·派克,约1981年(杰勒德·霍尔兹曼供图)
1700437093
1700437094
1700437095
1700437096
[
上一页 ]
[ :1.700437047e+09 ]
[
下一页 ]