FORTRAN语言的发展历史(计算机世界报 1995年 第8期 段朝晖)

 

FORTRAN语言是世界上第一个被正式推广使用的计算机高级语言,FORTRAN是FORmula T
RANslation的缩写,即"公式翻译"的意思。顾名思义,这种语言适宜科学计算,用它写成的程
序中的表达式与数学公式的形式很相似。FORTRAN语言自1954年提出以后,至今已有近40年
历史,但仍经久不衰,其间历经多种版本的演变。FORTRAN语言始终是科学计算领域首选的计
算机高级语言。


一、FORTRA语言的产生
    在1964年以前,几乎所有的程序都是用机器语言或汇编语言编写的。当时,程序员把生
成一个有效程序看作是一项复杂而又富有创造力的艺术活动。他们精力主要都花在克服当
时计算机引发的各种障碍上,如没有索引寄存器,没有嵌入式浮点操作等。当时,为程序员提
供的"自动编程"系统,主要也是关心如何克服上述不足。这些系统允许有浮点指令,索引寄
存器并改进了输入/输出指令,它们实际上是一种与实际机器有不同操作码的"人工计算机"
,这种人工机比实际机器要容易编程,但是所有这些早期"自动编程"系统使用起来开销过大
,通常它们会因此减低机器运行速度5~10倍。
    其次,在1954年前后,花在程序员上的投资已接近计算机本身的价值。而且计算机的使
用时间有1/4到一半是花在程序的排错上。这样,编程和排错占了一台计算机运行投资的3/
4。随着计算机的价格愈便宜,这种状况将愈严重。
    正是在上述两种因素的驱使下,1953年末,John Backus向他所在的IBM公司建议成立一
个小型研究小组,研究开发一种更加有效更加经济的编程方法,以改变当时IBM生产的704计
算机编程效率低下的状况。该建议被当时的IBM公司老板Cuthbert Hurd采纳,研究小组随即
在John Backus的领导下展开工作。在1954年中期产生了一种有相当功能和灵活性的初期编
程语言规范,这种语言当时称作IBM Mathematical FORmula TRANslation System(FORTRAN
)。由于当时计算机主要用于科学计算,该语言的设计目标旨在以充分低的代价把含有丰富
数学表达式的程序翻译成充分有效的目标程序。该项目的初衷纯粹是为IBM内部研究之用,
但在公布了该语言的中期报告后,引起IBM客户的极大兴趣。于是,IBM做出决定,保证每个购
买704计算机的客户在他们的机器上均能使用FORTRAN语言。
    FORTRAN语言的第一个编程指南发布于1956年10月。经过研究小组的辛勤工作,第一个
FORTRAN编译程序终于在1957年4月提交给客户。这个语言版本已具备了当今FORTRAN标准的
基本结构,如允许浮点运算、数组说明、DO循环控制结构及输入输出语句等,另外也包含了
一些与704机器相关的一些语言特征。这个版本后来称作FORTRAN I。


二、FORTRAN版本的演变
    1.FORTRAN Ⅱ、Ⅲ
    鉴于FORTRAN Ⅰ设计上的一些缺陷与不足,研究小组在一年以后(1958年春季)公布了其
改进版FORTRAN Ⅱ。它对FORTRAN Ⅰ做了很多重要扩充,如允许复型与双精度浮点运算、子
程序定义机制、输入输出的格式说明等,并加强了诊断功能。在这一时期,FORTRAN影响渐大
,发展迅速。到1960年底,IBM已经为其709、650、1620和7070计算机配备了FORTRAN语言,而
且更引人注目的是其它厂商也开始为自己生产的计算机研制FORTRAN编译。到1963年底,已
经有40多种不同的FORTRAN编译程序存在。
    FORTRAN Ⅲ几乎是在开发FORTRAN Ⅱ编译的同时就开始设计了。它增强了FORTRAN
中 的一些功能,如允许布尔表达式、函数和子例程名可以作为参量传递,允许处理字母数
字数据等,另外它允许符号指令(与机器特征相关)和FORTRAN语句混合使用。FORTRAN Ⅲ只
是在小范围内作了实现,但似乎没正式公布过。FORTRAN Ⅲ中的一些新特征后来出现在FOR
TRAN Ⅳ版本中。
   2.FORTRAN 66(FORTRAN Ⅳ)
   FORTRAN Ⅱ版本中存在的一个问题是,它使用了一些与704机指令集相关的一些语言特
征。其它厂商研制的FORTRAN编译也存在相同情况。这样,在不同FORTRAN编译之间存在着不
兼容之处,即便是在同一厂商编写的不同编译版本之间也存在这一问题。由于受到来自用户
方面的压力,IBM公司在1961年初,开始着手开发一个FORTRAN Ⅱ的进一步改进版本。它去除
了FORTRAN中与机器相关的一些语言特征,同时融合了FORTRAN Ⅲ中的一些新特征,该版本称
之为FORTRAN Ⅳ。1962年,该版本在IBM 7030计算机上得以实现。
    在这一时期,人们开始认识到使FORTRAN语言趋于标准将是很有意义的。1962年5月,
美国标准协会(ASA,即现在的ANSI)决定成立一个委员会,制定美国标准FORTRAN。该委员会
于1966年3月公布了两个美国标准文本:
   ·标准FORTRAN(X3.9—1966)。大致相当于FORTRAN Ⅳ。
   ·标准基本FORTRAN(X3.10—1966)。大致相当于FORTRAN Ⅱ,但没有包含其中与机器相
关的语言特征。
    1972年,国际标准化组织(ISO)接受了美国标准,在稍加修改后公布了ISO FORTRAN标准
,它分为三级:
   ·完全的(一级)FORTRAN,相当于FORTRAN Ⅳ。
   ·中间的(二级)FORTRAN,介于FORTRAN Ⅱ和FORTRAN Ⅳ之间。
   ·基本的(三级)FORTRAN,相当于FORTRAN Ⅱ。
    FORTRAN Ⅳ(即FORTRAN 66)在公布后的十几年当中,几乎统治了整个数值计算领域,大
多数应用程序和程序库都是用FORTRAN Ⅳ编写的。
    3.FORTRAN 77
    进入70年代后,随着计算机应用的发展,人们已开始感到原有的FORTRAN Ⅳ已不能满足
实际使用的要求。为此,美国标准化协会(ANSI)在1976年对ANSI FORTRAN(X3.9—1966)进行
了修订,吸收了一些厂商各自扩充的行之有效的功能,同时又增加了一些新的特征,预定在1
977年通过。为区别于FORTRAN66,新标准定名为FORTRAN77。但实际上到1978年4月,才由AN
SI正式公布为新的美国国家标准,即FORTRAN(X3.9—1978),同时宣布撤消FORTRAN(X3.10—
1966)。1980年,FORTRAN 77被接受为国际标准。
    FORTRAN 77相对FORTRAN 66在许多方面做了重要改进。FORTRAN最初是为数值计算设计
的,FORTRAN 77扩充了字符处理功能,使之能应用于非数值运算行领域。FORTRAN 77还增加
了块IF语句、ELSE语句、END IF语句等,使写出的程序趋于结构化,可读性加强。此外,FOR
TRAN 77还增强了输入输出的功能和文件处理能力,对FORTRAN 66标准中的许多部分做了改
进(如允许不同类型的混合运算,数组下界可以是负数和零,数组下标表达式可以为任意的整
型表达式等)。
    由于FORTRAN 66已在世界范围广泛流行,使用FORTRAN Ⅳ编写的程序积累已相当丰富。
FORTRAN 77基本上是与FORTRAN 66兼容的,用FORTRAN 66写的程序略作修改后,就可以在FO
RTRAN 77编译系统支持下运行。
    FORTRAN 77标准文本中定义了两个级别的FORTRAN语言,分别称作全集FORTRAN和子集F
ORTRAN,后者是前者的一个子集。一般微机上安装的FORTRAN 77都是子集,不具备全集标准
的某些功能。
    我国也于1983年5月公布了自己的FORTRAN标准,它基本采纳了国际标准,标准号为GB30
57-82。
    目前,国内外广泛流行的是FORTRAN 77,人们已普遍使用FORTRAN 77而不是FORTRAN
“编写程序。目前,几乎所有的计算机系统都配备了FORTRAN 77编译程序。
   4.Fortran 90
   美国国家标准化协会(ANSI)FORTRAN委员会X3J3在完成了FORTRAN 77之后,就着手制定
下一个FORTRAN标准。该标准的目标是:
    (1)保持和FORTRAN 77的向上兼容性:
    (2)使FORTRAN语言现代化。
    标准修订过程中的详细技术工作由ANSI的X3J3承担,并接受ISO/IECJTC1/SC22/WG5(IS
O的Fortran工作小组)的总体指导。该委员会希望能在1988年之前,产生一个新标准,这也
是该标准早期名称FORTRAN 8X的由来。但由于各种技术原因,这期间X3J3和WG5对新标准草
案中的技术内容产生了严重的意见对立。到1988年,对这一文本的制订工作几乎陷于停顿,
一体化濒临解体,只是由于双方努力才得以避免。1989年下半年,新标准的第二草案经公开
征求意见,获得多数支持,终于朝标准化制定迈进了一大步。1990年3月,ISO和ANSI双重批准
了Fortran语言的最新国际标准,定名为Fortran 90。(到这时止,作为首字母缩略词的FORT
RAN起源已基本被遗忘,该语言已不强求按大写字母书写,通常可写作Fortran)。
    Fortran 90对FORTRAN 77的主要扩充有:
    (1)自由形式的源程序形式,不再受老式面向卡片输入的固定栏目布局限制;
    (2)模块化数据与过程定义机制,这样提供了一种数据与过程包装的强有力的而又安全
的形式;
    (3)从六种内部数据类型中派生出用户定义的数据类型;
    (4)数组操作机制;
    (5)指针机制,允许创建与操作动态数据结构;
    (6)数据类型参数化;允许使用多种字符类型,满足各国字符处理的需要;
    (7)提供了过程的递归调用机制;
    (8)提供了附加的控制结构,如do……enddo,do while等。
    由此可以看出,Fortran 90已经是具有强大数值计算能力的现代高级语言,程序的书写
更趋结构化、模块化。
    Fortran 90的推广应用正处于起步阶段,世界上第一个Fortran 90的编译系统f90于19
91年6月由英国牛津大学宣布研制成功(有趣的是,Fortran 90的正式文本于1991年8月才出
版发行)。到目前为止,世界上有相当多的计算机公司宣布已全部或部分实现了Fortran 90
。我国在"八五"期间也积极投入力量完成Fortran 90编译的国产化工作。
    随着计算机技术的飞速发展,超级计算机已经进入了向量处理和并行处理时期。作为科
学计算的主流程序语言,扩充Fortran使之提供对向量和并行处理的支撑,已是Fortran语言
发展的主要趋势。与此对照的是,Fortran90中的一些语言特征,如数组操作机制,已经具备
适合向量处理的表达能力。
    5.High Performance Fortran(HPF)
    超级计算系统发展到现在已经形成了各不相同的系统结构,如分布存储MPP、共享存储
多处理机系统、向量机、大型机和工作站等。要充分发挥这些不同结构计算机系统的能力
,就要求程序中能够提供比传统Fortran和Fortran 90程序更多的信息。在此之前,很多研究
机构已对此进行了广泛研究,其中以美国Rice大学的Fortran D语言及奥地利Vienna大学的
Vienna Fortran语言影响最大。1991年底,Ken Kennedy和Geoffery Fox建议成立一个非官
方的组织,来进一步定义和标准化这种语言。于是,一个由工业界和学术界联合组成的机构
——高性能Fortran论坛宣告成立。经过两年多的努力,终于在1993年推出了一种能够满足
上述要求的新的Fortran语言标准——高性能Fortran(HPF)。
    HPF的目标是为Fortran语言(主要是Fortran 90)定义一组语言扩充标准,以支持:
    (1)数据并行程序设计;
    (2)能在非一致存储访问开销的SIMD或MIMD计算机上获得最高性能;
    (3)程序代码便于在不同体系结构的计算机间移植。
    HPF对Fortran 90的主要扩充有:
    (1)数据分布特性。HPF提供了一组数据分布指令用以规划数据在系统中各存储体中的
合理分配,以在负载均衡和提高数据访问局部性之间达到合理折衷。ALIGN指令说明数组间
的相对存储位置关系,DISTRIBUTE指令则说明一个数组的抽象处理机的存储器中应如何进行
分配。
    (2)并行语句。为了显式表达并行计算,HPF提供了一个新的语句(FORALL)和伪指令(IN
DEPENDENT)。
    FORALL实现了对一个数组区域的赋值,其含义类似于Fortran 90中的数组赋值语句,但
描述能力更强。INDEPENDENT指令则指出一个特定代码段中的语句之间不存在任何顺序上的
依赖关系,该指令只为编译优化(并行执行)提供信息。
    其它扩充领域还有,内部函数和HPF库、局部过程、并行I/O语句、顺序与存储联系等。
在HPF的定义中还包括了一个HPF子集,以尽早实现HPF编译器。作为到HPF全集的过渡,
目前世界上的主要计算机厂商和科研机构正积极开展HPF编译器的构造,在国际学术杂志和
会议文集中已有一些原型系统的介绍。
    HPF的面世时间虽很短暂,但显示出了强大的生命力。作为90年代开发适合不同计算机
结构的Fortran程序的有效手段,HPF被寄以厚望。


三、结束语
    Fortran语言由于其悠久的历史,在我国已得到大范围的推广普及,几乎每一位工程技术
人员都学习使用过Fortran语言。伴随着计算机技术的飞速发展,Fortran语言也处于不断演
变过程之中。对于广大计算机工作者,特别是与科学计算领域密切相关的技术人员,了解Fo
rtran语言的发展状况,对于充分利用现有计算机资源,有效求解各自领域的计算问题,无疑
是大有裨益的。

 

 

 

 

 

 

你可能感兴趣的:(数值计算)