先回顾一下知名编程语言的作者和创造时间:
Fortran 语言,50年代,IBM 研究员;
Lisp 语言,50年代,MIT 的教授和学生;
C语言,70年代,贝尔实验室的两位研究员;

�译自The A-Z of Programming Languages: AWK

PHP,1994年,作者 Rasmus Lerdorf ,名字代表“Personal Home Page
Tools”;
JavaScript,1995年,作者 Brendan Eich;
Python,1990年,作者 Guido van Rossum;
Ruby,1994年,作者 Yukihiro“Matz”Matsumoto。

计算机科学家、编译器专家Alfred V.
Aho一直紧盯计算机科学研究前沿。Aho教授一直致力于编程语言开发,曾任贝尔实验室计算机科学研究中心副主任,现为哥伦比亚大学Lawrence
Gussman
计算机科学系教授。Aho教授不仅是“龙书”系列的作者之一,而且在上世纪70年代同Brain
Kernighan 和Peter
Weinberger一起开发了模式匹配语言AWK。近日,《计算机世界》有幸邀请到Aho教授谈一谈AWK的开发。

从这些例子中,你可以发现早期的程序语言是学者和研究人员设计的,而近期的语言发明者多数是程序设计师
或资深程序员。

问:您为什么要开发AWK语言?

和大部分语言一样,AWK是应实际需要而生的。上世纪80年代初,我还是贝尔实验室的研究员。那时我需要追踪经费预算。同时因为我在临近的一所大学兼职,追踪学生的成绩也成了一件棘手的事情。我想要一种小巧的语言,能让我只写一两行代码就完成这些工作。碰巧Brian
Kernighan也有这种需求,于是我俩一起开发了一个专门针对简易数据处理的模式匹配语言。GREP对我们的影响很大,它是UNIX下一个很流行的字串匹配工具。GREP也是我们研究中心开发的。GREP可以根据某个正则表达式查找文本文件中特定的行,然后输出它们。我们想进一步扩展它,使得数字也能向字串那样处理。我们还想在打印之外提供一些计算功能。开发AWK仅仅是用来满足我们,或是那些对计算机不是很懂的人,处理常规数据的需要。它采取“匹配模式——执行动作”的方式工作。

加州大学欧文分校的计算机科学家 Cristina Videira Lopes
提出疑问,为什么只有设计师才能发明流行的新语言?
她根据自己在学界的经验认为,生活在象牙塔中的研究人员不再创造用户真正能使用的新语言,因为他们将创造语言当作科研,在
90
年代之前,计算机性能有限,创造语言需要克服需要种种挑战,考虑各种硬件限制。如今计算机性能日新月异,创造语言不再是什么重要的事情。她指出,现在流行
的程序语言基本没有什么创新,全都类似既有编程概念的混搭。

问:在你们开发AWK时有没有哪种程序或是语言已经具备了这些功能?

我们最初是以GREP为原型。但是GREP在“模式——动作”处理上有一些局限,所以我们想扩展它。当时,我还在研究字串匹配算法和编译器里的上下文无关文法,自觉不自觉地借鉴了一些LEX和YACC里的东西。LEX用于词法分析,而YACC用于语法分析。它俩都是构造编译器的重要工具,当时在贝尔实验室很流行。后来流传开来,用来开发了很多小语言。Brian
Kernighan当时用它们来开发数学排版和图形处理语言。LEX用来分拣输入文本中的词法单元。词元是一串可以构成逻辑含义的字符,比如,编程语言中的关键字then澳门新葡亰游戏网址,就是一个词元。我们对字母t不感兴趣,对h也不感兴趣,我们感兴趣的是then这个组合。编译器的第一个部分就是词法处理单元,它读入源程序,分析出其中的词元。AWK受这种词法分析方式的影响,但AWK的定位是数据处理,而且对用户的计算机背景要求很少。

(文/solidot)    

问:您能简短地向《计算机世界》的读者们介绍一下AWK语言吗?

AWK是一门处理文本文件的语言。它把文件看作一串记录,缺省情况下一行即为一个记录。每一行又被拆成若干域。我们可以把一行中的第一个词看作第一域,第二个词看作第二域,以此类推。一个AWK程序就是一连串“模式——动作”语句。AWK一次读入一行,然后对照程序中的各个模式进行扫描。一旦匹配成功就执行相应的操作。举个例可能更清楚一些。假设我们有一个文件,它的每一行都是一个名字后跟一个电话号码。我们假设其中一行为Pope 15193741273。AWK语言把第一域记作$1,第二域记作$2,⋯⋯。现在我们想查Pope的电话号码,只需一行AWK语句:$1 == "Pope" { print $2 }这条语句的意思是:若我们找到一行,其第一域为Pope,则输出其第二域。现在你已经算是AWK程序员了AWK程序一般由一组“模式——动作”语句构成。模式可以是字串或数字的真假判断;动作是一组类似C语言的语句。AWK随着成为UNIX的标配而流行起来。

问:在AWK的开发过程中,您最得意的是什么?

AWK是由Brian Kernighan、Peter Weinberger和我三个人开发的。那时,Peter
Weinberger很好奇Brian和我整天在忙什么。我们写好了AWK的语法规范,但缺少一个完整的运行环境。Weinberger跑来对我们说“这看起来很像我写过的一个语言”,然后就在一个星期内写好了AWK的运行环境。我们用这个原始版本来处理我们感兴趣的数据,很称手。更重要的是,它为AWK提供了一个可以不断扩展的平台。对我来说,最重要的是这个项目让我了解了Kernighan和Weinberger是怎么考虑语言设计的——这真是一次很受益的合作!有了这个灵巧的编译器构造工具,我们就可以完全掌控我们的开发了。我们很快加入了一些新的语法来改进AWK。整整一年,我们都在激烈地讨论哪些特性应该加进AWK,哪些应该丢弃。语言设计是一项非常随性的活动,每个设计者都会把他们需要的特性加入到语言之中,这些特性或者来自他们需要解决的问题,或者来自他们解决问题的方式。在开发AWK的过程中,我得到了许多乐趣,而和Kernighan、Weinberger他们共事是我的职业生涯中最刺激的事情。我可不想和他们那样的设计者竞争。他们的编程能力无与伦比。说来也有意思,最开始我们并没有想到,除我们三个以外还会有人用它。但很快我们发现,很多人有数据处理的需求,而这正是AWK所擅长的。人们不愿写几百行的C程序来做数据处理,而同样的工作只需几行AWK代码。于是越来越多的人开始使用AWK。很多年后,AWK仍然是UNIX下很常用的一个命令。时至今日,即使已经出现了一大批类似的语言,但AWK仍然常年保持在编程语言流行排行榜上25至30名的样子。而这一切都起于我们仨为了满足自己的需要开发的一个小工具。

问:AWK如此流行,您有何感触?

我很高兴有人喜欢AWK。AWK不仅吸引了很多人使用它,后来很多语言的设计者也借鉴了它的工作方式。在AWK开发出来10年后,Larry
Wall开发了一门叫Perl的语言,借鉴了AWK和其他一些UNIX工具的特性。Perl现在是世界上最流行的语言之一。所以不光是它刚出现的时候受欢迎,它也影响了很多新生语言。

网站地图xml地图