Fortran的历史
早期的计算机程序是极为繁琐的。程序员需要详细了解为之编写代码的计算机的指令、寄存器和中央处理器(CPU)的其他有关方面。源程序本身是用数学符号编写的,叫做八进制码。后来采用了助记符,就是所谓的机器码或汇编码的形式。这些编码通过汇编程序转换为指令字。在50年代,书写和调试一个程序要用很长时间,很明显,使用这种程序形式是很不方便的,尽管它确实能使CPU非常高效地工作。
这些问题促使由John Backus率领的IBM公司的一个小组研究开发最早的高级语言——Fortran。他们的目标是开发这样一种语言:容易理解,几乎能与汇编语言一样高效地运行。在这方面,他们获得了异常的成功。这种语言确实简单易学,因为几乎可能像抄写数学教科书里的公式一样书写数学公式(实际上,Fortran这一名字是FORmula TRANslation的缩写,意为“公式翻译”)。这样使编写可运行程序比以前快,但由于把许多精力用在编译程序的构造上,所以在效率上也有些小的损失。因此可以看出,用Fortran作为第一种高级语言是一种创新。但是,Fortran不仪是一次革新,而且是一次革命。程序员可以摆脱使用汇编语言的冗长乏味的负担,从而使他们能用更多的精力去解决其他问题。更重要的或许是这样一个事实:对于任何一名科学家或工程师,只要他愿意稍加努力去学习和使用Fortran,他就能使用计算机,从而结束了只有计算机专家才能编写实用程序的历史。
因为Fortran满足了现实的需要,所以它传播得很快。在传播和使用过程中不可避免地产生了Fortran语言的方言,这给在计算机语言之间交换程序带来了一定的困难。于是经过4年的工作,当时的美国标准化协会ASA[ASA(American Standard Association)后来改名为美国国家标准协会简称ANSI(American Natlonat Standards Institute)),于1906年提出了程序语言的第一套标准,这就是现在所熟知的Fortran 66。实际上,Fortran 66是各种方言的公共子集,因此每种方言都可以看成这一标准的扩充。用户希望编写可移植的程序就必须注意避免采用这些扩充。
除了简单易学和运行有效外,Fortran还有其他一些优点。例如,这种语言是和硬件密切联系的易开发的语言,而不是抽象的概念。通过COMMON语句和EQUIVALENCE语句,为程序员提供了用简单的方法控制存储器分配的可能性,这些对于早期小容量存储器是十分必要的。最近源程序在语法上不依赖任何空格字符,使程序员不必在严格规定的列上书写代码并允许语句主体部分以任意所希望的方式来安排。不言而喻,在现代的情况下,并非所有这些优点都已全部满足了人们的要求。
在1966年的标准颁布以后,方言的增加仍然是一个问题。最初的困难是有许多编译程序甚至不向这一标准靠拢。其次是在编译程序中,广泛实现一些对大型程序很有用的功能,但是却忽略了标准。其例子是直接存取文件处理,不同的编译程序采用了不同的方法实现这样一些功能。
这种现状加上语言中存在的一些明显缺陷,例如缺少结构程序设计构造,这样就导致了大量所谓的“预处理程序”的产生。这些程序能够读入一些用定义良好的Fortran扩充方言写的源程序,生成标准Fortran的二次文本,然后按通常的方法将这些文本提供给Fortran编译程序。这就为扩充Fortran提供了手段,同时保留了在计算机之间交换经过转换的源程序的能力。同时,大量的这类预处理程序意味着有很多不同的高级方言在使用。虽然用预处理程序写出来的程序可以在Fortran源程序级上交换移植,但这种自动生成的Fortran程序通常难以读懂,所以人们一般不采用。
1978年颁布的新标准Fortran 77,部分地解决了这个问题。这种新标准包括一些新的功能,新功能是建立在预处理程序的基础上。这种新标准不是现有方言的公共子集而是自成一体的新语言。由于新的编译程序未能及时提供使用,Fortran 66和Fortran 77之间的过渡期比人们预计的要长得多,两种标准不得不长时间共存。不管怎样,到80年代中期,向Fortran 77的转变形成潮流,Fortran 66很快被取代了。这时制造商们也开始停止提供旧的编译程序,从而增强了转变的压力。用新标准编写新的程序是相当简单的,改写旧标准的程序通常也很简单,因为两个标准之间有大量兼容的地方。男一方面,用扩充的语言编写的程序通常较难转换,因为新的编译程序一般不包括Fortran77的扩充。实际上,有些编译程序非常严格,仅实现了没有任何扩充的Fortran 77。
Fortran的新标准30年过去了,在许多计算机上,Fortran已不是唯一适用的程序设计语言,一些新的语言发展起来了。事实证明,在某些特殊的应用领域里,一些新语言更为合适,但是Fortran的优势仍然是在数值、科学和工程技术应用领域,而且在这些领域里没有更强的竞争对手。Fortran用户已在Fortran代码上进行了巨大的投资,有许多程序(有些长达10万条,有些甚至更长)在频繁地使用。然而这不是说人们完全满足于这种语言.为此,ANSI委派的技术委员会X3J3已不止一次地推出新的标准草案。第一个草案是在1987年推出的,第二个草案在1989年推出,随后在一段时间内征求了意见和进行了修改,国际标准化组织(iso)终于在1991年夏季公布了Fortran 90新标准。
为什么要继续修订Fortran语言呢?这是因为不但要把厂家的一些语言扩充部分标准化,而且也是为了Fortran现代化,使之能赶上语言结构的发展。在这方面,其他语言如APL、Algol68、Pascal和Ada已使用了一些新的概念.在这里。X3J3可以利用像数据隐蔽等一些概念的优点。出于同样的考虑,需要开始为危险的存储结合提供代替办法,废弃过时的严格的源程序书写格式,并继续改善语言的正规性,同时提高用语言编程序的安全性,以及使一致性要求更为严格。为保护对Fortran 77程序的巨大投资,整个Fortran 77被作为Fortran 90的子集。
由此可以看出,新的标准不像以前的仅仅是现有实践用法的标准化,而更多的是这种语言的新发展,引入了一些对Fortran来说是全新的细节,这些细节吸取了其他语言的经验。最重要的部分是用简单有效的记法处理数组的能力,以及定义和处理用户定义数据类型的能力。前者使许多数学问题编码简化,并使Fortran在新一代的超级计算机上更为有效,因为这类数组特点与这些硬件配合得很好。后者使程序员能够用满足其要求的数据类型来表达问题。
这些新增加的部分可以概括如下:
(1)通过将某些部分标明为“过时的”而演变语言的方法;
(2)数组运算;
(3)指示字;
(4)改进数值计算的设施,其中包括一组数值询问函数;
(5)固有类型的参数化,允许处理程序支持短整数、非常大的字符集、双精度以上精度的实型和复型,以及压缩逻辑;
(6)由任意数据类型组成的用户定义的派生数据类型以及对这些结构的运算;
(7)定义称为模块的程序段的设施,这对于全局数据定义和过程库是有用的,它提供了一种封装派生数据类型的安全方法;
(8)要求编译程序能够检测出使用了不符合语言语法规则或过时的构造;
(9)一种更加适用于终端的新源程序书写形式;
(10)新的控制构造,例如SELECT CASE构造和DO语句的一种新形式;
(11)具有写内部过程和递归过程的能力,以及用任选变元和关键字变元调用过程的能力;
(12)动态存储分配;
(13)输入/输出设施的改善,包括处理部分记录和标准化的NAMELIST的设施;
(14)许多新的内部过程。
Fortran 90中新的部分将保证人们在今后长时间内继续成功地使用Fortran语言。Fortran 90把整个Fortran 77作为一个子集的事实,意味着由Fortran 77转换到Fortran 90是非常简单的。
Fortran的标准化工作1966年和1978年,美国国家标准学会(ANSI)和国际标准化组织两次对Fortran.语言进行了标准化。负责这项工作的委员会是X3J3。X3J3本身由45名计算机硬件和软件制造商、用户和学术界代表组成,它是由最终颁布美国标准的ANSI任命的,直接向它的上级委员会X3报告。X3负责决定是否采用它们提出的标准草案。在决定过程中,它要尽量保证提案真正体现出有关各方的意见。相应的国际组织是ISO/IEC JTCl/SC22/WG5。这一组织由国际上的专家组成,负责使一个标准草案在成为一个国家标准的同时成为国际标准。在我们国内,全国计算机与信息处理标准化技术委员会下属的Fortran语言标准化工作组是其成员。因此,在Fortran 90成为国际标准的过程中,采纳了我国的不少建议。例如在语言中增加民族字符集处理能力是由我国和日本分别提出的,经过各成员国代表投票表决,承认了我国建议的科学性,拒绝了日本的建议,从而采用了中国的建议。
作为漫长的标准化过程的一部分,在X3考虑研究标准草案之前,需要X3J3的至少2/3的成员同意后才能向X3提交建议草案。一旦X3同意接受,首先就得有一段时间征求公众的意见。这时不但要求X3J3注意收集公众的反应,而且要对X3提出草案修改的意见。这要经过几个反复。正常情况下,一套新标准在得到国际标准化组织承认之前需要经历18个阶段。
1986年4月,X3J3内部对当时的草案进行了一次投票,结果是16票赞成19票反对。这样,就不得不降低所提草案的水平,以求在下述三派之间取得折衷:要求加入大量新功能的激进派,目标适中的保守派,以及强调长期兼容性的兼容派。到1989年5月,第二个草案建议稿提交给X3,1990年6月,X3J3公布了Fortran 90标准草案。委员会内部的意见不一致是正常的,之所以经历数年的反复讨论,主要是在下列问题上存在着不同看法,如:
(1)Fortran 90应当是革新的,还是仅为现有经验的标准化。
(2)这种语言应当是短小而简单的,还是庞大而功能强大的?现在的方案是不是太大了,以致使它不能适合90年代的小型机,不能由小型的软件商所实现,而且不能被非专业的程序员所理解(Fortran的用户大部分是这些人)。
(3)经过10~20年的酝酿,用户是否准备放弃现有的部分或者将现存的程序一直运行下去。
(4)这种语言的子集(作为过渡措施)是有效的还是将会阻碍可移植性。
(5)所提出的语言的体系结构是否可行。
(6)用户需要的是一种安全可靠的语言,还是一种允许他们编写技巧性强,往往与汇编语言联系在一起的程序语言。
(7)建议的语言是否实现起来有困难或不能高效率地实现。若因此用户有一个好的新开端,这是否还成为一个问题。
(8)新部分的出现是否会使现有的部分实现起来困难。
到1991年夏季,在这些问题上终于取得了一致意见,标准化工作胜利完成,国际标准化组织正式公布了新的Fortran标准文本,即Fortran 90。在不久的将来能有符合新标准的Fortran 90编译系统提供给我国的广大Fortran用户使用。