The Wayback Machine - https://web.archive.org/web/20221028215546/https://baike.sogou.com/kexue/d10231.htm

Fortran语言

编辑
约翰·巴克斯

Fortran(/ˈfɔːrtræn/;前身为FORTRAN,源自公式翻译[1])是一种通用编译命令式编程语言,特别适用于数值计算和科学计算。

FORTRAN最初是由IBM[2]在20世纪50年代为科学和工程应用程序而开发的,在早期就主导了编程领域,并在计算密集型领域(如数值天气预测、有限元分析、计算流体动力学、计算物理学、结晶学和计算化学)持续使用了60多年。它是高性能计算的流行语言[3] ,用于对世界上最快的超级计算机进行基准测试和排名的程序。[4]

Fortran包含一系列版本,每个版本都经过演化,在保持与以前版本兼容性的同时向语言添加扩展。后续版本增加了对结构化编程和基于字符的数据处理的支持(FORTRAN 77)、数组编程、模块化编程和通用编程(Fortran 90)、高性能Fortran (Fortran 95)、面向对象编程(Fortran 2003)和并发编程(Fortran 2008)。

Fortran的设计是许多其他编程语言的基础。其中最著名的是BASIC,它基于FORTRAN II 并进行了一系列语法清理,特别是更好的逻辑结构[5] 以及其他更改,使其更容易地在交互式环境中工作。[6]

1 命名编辑

FORTRAN 77的早期版本的语言名称通常都是用全大写字母拼写的(FORTRAN 77是最后一个在关键字中使用小写字母的版本,严格来说是非标准版本)。在引用以Fortran 90开头的新版本时,大写字母已被删除。官方语言标准现在将这种语言称为“Fortran”,而不是全大写的“FORTRAN”。

2 历史编辑

IBM 704大型计算机

1953年末,约翰·W·巴克斯(John W. Backus)向他在IBM的上司提交了一份提案,为他们的IBM 704大型计算机开发一种更实用的汇编语言替代程序。[7] 巴克斯(Backus)著名的FORTRAN团队由程序员理查德·戈德堡(Richard Goldberg)、谢尔登·贝斯特(Sheldon F. Best)、哈兰·赫里克(Harlan Herrick)、彼得·谢里丹(Peter Sheridan)、罗伊·纳特(Roy Nutt)、罗伯特·纳尔逊(Robert Nelson)、欧文·齐勒(Irving Ziller)、露易丝·海比特(Lois Haibt)和大卫·塞尔(David Sayre)组成。[8] 它的概念包括将方程更容易地输入计算机,这个想法是由哈尔科姆·兰宁( J. Halcombe Laning)提出的,并在1952年的兰宁(Laning)和泽尔(Zierler)系统中得到证明。[9]

到1954年11月,IBM数学公式翻译系统的规范草案已经完成。[7] FORTRAN的第一本手册于1956年10月出版,[7] 第一个FORTRAN编译器于1957年4月交付。[7] 这是第一个优化编译器,因为客户不愿意使用高级编程语言,除非其编译器能够生成性能与手工编码汇编语言相当的代码。[10]

虽然社区对这种新方法是否可能优于手工编码表示怀疑,但它将操作机器所需的编程语句数量减少了20倍,并很快获得了认可。约翰·巴科斯(John Backus)在1979年接受IBM员工杂志Think的采访时说,“我的大部分工作都来自懒惰。我不喜欢编写程序,所以,当我在IBM 701上工作,编写计算导弹轨迹的程序时,我开始开发一个编程系统,以便更容易编写程序。”[11]

科学家们广泛采用这种语言来编写数字密集型程序,这鼓励编译器编写者产生能够生成更快、更高效代码的编译器。在语言中包含复数数据类型使得Fortran特别适用于电气工程等技术应用。

到1960年,FORTRAN的版本已经可用于IBM 709、650、1620和7090计算机。值得注意的是,FORTRAN语言的日益普及促使竞争对手的计算机制造商为他们的机器提供FORTRAN编译器,因此到1963年,已经有超过40个FORTRAN编译器存在。由于这些原因,FORTRAN被认为是第一种广泛使用的跨平台编程语言。

Fortran的发展与早期编译器技术的发展是同步的,编译器理论和设计方面的许多进步都是由为Fortran程序生成高效代码的需要特别推动的。

2.1 fortran语言

针对IBM 704的FORTRAN的初始版本包含32条语句,包括:

  • 维度DIMENSION 和等价 EQUIVALENCE语句
  • 赋值语句
  • 三向算术 IF 语句,根据算术语句的结果是负、零还是正,将控制传递给程序中的三个位置之一
  • 检查异常的IF语句(累加器溢出ACCUMULATOR OVERFLOW, 商溢出QUOTIENT OVERFLOW,和除法检查 DIVIDE CHECK);以及用于操纵感应开关和感应灯的IF 语句
  • 跳转GO TO,经过计算的跳转转到,分配 ASSIGN和带分配跳转
  • DO循环
  • 格式化输入/输出:格式化 FORMAT,读取 READ,读取输入磁带 READ INPUT TAPE,写入 WRITE,写入输出磁带 WRITE OUTPUT TAPE,打印 PRINT,和打孔 PUNCH
  • 未格式化的输入/输出:读磁带 READ TAPE,读磁鼓 READ DRUM,写磁带 WRITE TAPE,和写磁鼓 WRITE DRUM
  • 其他输入/输出:结束文件 END FILE,倒带 REWIND,和退格 BACKSPACE
  • 暂停PAUSE,停止 STOP,和继续 CONTINUE
  • FREQUENCY 语句(用于向编译器提供优化提示)。

算术 IF 语句让人想起(但不容易实现)704上可用的三路比较指令(CAS-比较累加器和存储器)。该声明提供了比较数字的唯一方法——通过测试它们的差异,并伴随溢出的风险。后来FORTRAN IV中引入的“逻辑”设施克服了这一缺陷。

FREQUENCY 语句最初(可选地)用于给出算术IF语句的三种分支情况的分支概率。第一个FORTRAN编译器使用这个权重在编译时对生成的代码进行蒙特卡罗(Monte Carlo)模拟,其结果被用来优化内存中基本块的放置——这是对其时间的一个非常复杂的优化。巴克斯(Backus)等人在关于这个原始实现的文章“FORTRAN自动编码系统”中记录了蒙特卡罗(Monte Carlo)技术:

程序的基本单位是基本块;基本块是一段程序,有一个入口点和一个出口点。第4节的目的是为第5节准备一个前置任务表(PRED表),该表列举了基本块和每个基本块的列表,每个基本块可以是它在流程中的直接前置任务,以及每个这样的基本块链路的绝对频率。该表是通过以蒙特卡罗方式运行程序一次获得的,在蒙特卡罗方式中,由IF类型语句产生的条件转移的结果和计算的GO TO由随机数发生器确定,该随机数发生器根据所提供的任何FREQUENCY(频率)语句适当加权。[8]

许多年后,这个 FREQUENCY 语句对代码没有影响,并被视为注释语句,因为编译器不再进行这种编译时模拟。类似的命运也降临在其他几种编程语言的编译器提示上;例如C的 register(寄存器)关键词。

第一个FORTRAN编译器通过在发现错误时停止程序并在其控制台上输出错误代码来报告诊断信息。程序员可以在操作手册的错误信息表中查找该代码,为他们提供问题的简要描述。[12][13]

固定布局和穿孔卡

图为穿孔卡上的FORTRAN代码,显示了1-5,6和73-80列的专用用途

在开发磁盘文件、文本编辑器和终端之前,程序通常是通过键盘输入到80列穿孔卡片上,每张卡片一行。得到的一副卡片将被输入读卡器进行编译。穿孔卡片代码不包含小写字母或许多特殊字符,并且提供了能够正确打印FORTRAN中使用的重新指定的特殊字符的特殊版本的IBM 026击键。

借鉴穿孔卡片输入设计,Fortran程序最初是以固定列格式编写的,前72列被读入12个36位字。

第1列中的字母“C”导致整张卡片被视为注释,并被编译器忽略。否则,卡的列被分成四个字段:

  • 1到5是标签字段:这里的一系列数字被用作DO或控制语句(如“转到”和“如果”)中的标签,或者用来标识“写”或“读”语句中引用的“格式”语句。前导零被忽略,0不是有效的标签号。
  • 6是一个延续字段:除了空白或零以外的字符会导致该卡被视为前一张卡上语句的延续。延续卡通常编号为1、2等。 因此,起始卡的延续列可能为零——这不是其前一张卡的延续。
  • 7到72用作语句字段。
  • 忽略了73到80列(IBM 704的读卡器只使用了72列)。[14]

因此,列73至80可用于识别信息,例如打孔序列号或文本,如果一叠卡片掉落,可用于重新排序卡片;尽管实际上这是为稳定的生产项目保留的。IBM 519可以用来复制程序库和添加序列号。一些早期的编译器,如IBM 650,由于读卡器的限制,有额外的限制。[15] 按键可以被编程为跳转到第7列,并在第72列之后跳出来。后来编译器放宽了大多数固定格式的限制,在Fortran 90标准中取消了这一要求。

在语句字段中,文本文字外的空白字符(空白)被忽略。为了简洁起见,这允许省略标记之间的空格,或者为了清晰起见,允许在标识符中包含空格。例如, AVG OF X 是一个有效的标识符,相当于 AVGOFX,而 101010DO101I=1,101 是一个有效的语句,相当于10101 DO 101 I = 1, 101 因为第6列中的零被视为空格(!),而 101010DO101I=1.101则改为 10101 DO101I = 1.101,将1.101赋值给一个名为 DO101I的变量。请注意逗号和句点之间的细微视觉差异。

霍尔瑞斯(Hollerith)字符串最初只允许在FORMAT和DATA语句中使用,前缀是字符计数和字母H(例如,26这是字母数字数据),允许空格保留在字符串中。计算错误是个问题。

2.2 FORTRAN II

IBM的FORTRAN出现于1958年。主要的增强功能是通过允许用户编写的子程序和返回值的函数来支持过程编程,参数通过引用传递。COMMONAL语句为子程序提供了一种访问公共(或全局)变量的方法。介绍了六项新的声明:[16]

  • 子程序SUBROUTINE, 函数FUNCTION,和结束 END
  • 调用CALL并gni返回 RETURN
  • 通用COMMON

在接下来的几年里,FORTRAN II还将增加对双精度和复杂数据类型的支持。

早期FORTRAN编译器不支持子程序递归。早期的计算机体系结构不支持堆栈的概念,并且当它们确实直接支持子程序调用时,返回位置通常存储在子程序代码(例如,IBM 1130)或特定机器寄存器(IBM 360等)附近的一个固定位置,这仅在堆栈由软件维护并且返回地址在调用之前存储在堆栈上并且在调用返回之后恢复时才允许递归。尽管FORTRAN 77中没有指定,但许多F77编译器支持递归作为选项,而内置递归的Burroughs大型机默认情况下支持递归。它通过新的关键字RECURSIVE成为Fortran 90的标准。[17]

简单FORTRAN II 程序

这个程序根据赫伦(Heron)公式,读取包含三个5位整数作为输入的磁带盘上的数据。没有可用的“类型”声明:名称以“1”、“J”、“K”、“L”、“M”或“N”开头的变量是“定点”(即整数),否则是浮点型的。由于在本例中要处理整数,变量的名称以字母“1”开头。变量的名称必须以字母开头,并且可以以字母和数字继续,FORTRAN II中最多6个字符。如果甲、乙、丙不能代表平面几何中三角形的边,那么程序的执行将以错误代码“停止1”结束。否则,将打印一条输出线,显示A、B和C的输入值,然后是三角形的计算面积,作为一个浮点数,沿输出线占据10个空格,并在小数点后显示2位数字,即带有标签601的FORMAT语句F10.2中的. 2。

C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - TAPE READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
      READ INPUT TAPE 5, 501, IA, IB, IC
  501 FORMAT (3I5)
C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
      IF (IA) 777, 777, 701
  701 IF (IB) 777, 777, 702
  702 IF (IC) 777, 777, 703
  703 IF (IA+IB-IC) 777, 777, 704
  704 IF (IA+IC-IB) 777, 777, 705
  705 IF (IB+IC-IA) 777, 777, 799
  777 STOP 1
C USING HERON'S FORMULA WE CALCULATE THE
C AREA OF THE TRIANGLE
  799 S = FLOATF (IA + IB + IC) / 2.0
      AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
     +     (S - FLOATF(IC)))
      WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
  601 FORMAT (4H A= ,I5,5H  B= ,I5,5H  C= ,I5,8H  AREA= ,F10.2,
     +        13H SQUARE UNITS)
      STOP
      END

2.3 FORTRAN III

图为FORTRAN编码表格,印在纸上,供程序员为穿孔打卡机操作员打卡准备程序。 现在已经过时了。

IBM还在1958年开发了FORTRAN III,它允许内嵌汇编代码和其他特性;然而,这个版本从未作为产品发布。像704 FORTRAN和FORTRAN II一样,FORTRAN III包含了与机器相关的特性,使得在其中编写的代码无法从一台机器移植到另一台机器。[7] 其他供应商提供的FORTRAN早期版本也有同样的缺点。

2.4 IBM 1401 FORTRAN

FORTRAN是由一个创新的63阶段编译器为IBM 1401计算机提供的,它完全运行在只有8000(6位)字符的核心内存中。编译器可以从磁带上运行,也可以从2200 card-desk上运行;正如海恩斯(Haines)所描述的那样[18],它不再使用磁带或磁盘存储。它将程序保存在内存中,并加载覆盖层,逐渐将程序转化为可执行的形式。这篇文章在《编译器剖析》[19]的两个版本和IBM手册《Fortran规范和操作程序,IBM 1401》中都有转载和编辑。[20]可执行形式不完全是机器语言;相反,浮点运算、子脚本、输入/输出和函数引用被解释,比UCSD帕斯卡P代码早了二十年。

IBM后来为1400系列计算机提供了FORTRAN编译器。[21]

2.5 FORTRAN IV

从1961年开始,由于客户的需求,IBM开始开发FORTRAN IV,去掉FORTRAN II的机器相关特性(如读输入带),同时增加了逻辑数据类型、逻辑布尔表达式和逻辑IF语句等新特性,作为算术IF语句的替代。FORTRAN最终于1962年发布,先是用于IBM 7030(“Stretch “)计算机,随后是用于IBM 7090、7094的版本,后来是用于1966年的IBM 1401。

到1965年,FORTRAN IV被认为应该符合美国标准协会X3.4.3 FORTRAN工作组正在开发的标准。[22]

1966年至1968年间,IBM为其System/360提供了几个FORTRAN IV编译器,每个编译器都以字母命名,表示编译器需要运行的最小内存量。[23]字母(F、G、H)与系统/360型号的代码相匹配,以指示内存大小,每个字母增量是两个更大的因子:[24]

  • 1966年:FORTRANIV F,适用于DOS/360 (64K字节)
  • 1966年:FORTRAN IV G OS/360(128千字节)
  • 1968年:FORTRAN IV H for OS/360(256千字节)

大约在这个时候,FORTRAN IV已经开始成为一个重要的教育工具,滑铁卢大学的WATFOR和WATFIV就是为了简化早期编译器复杂的编译和链接过程而创建的。

2.6 FORTRAN 66

FORTRAN早期历史上最重要的发展也许是美国标准协会(现在的美国国家标准协会(ANSI))决定成立一个由商业设备制造商协会BEMA赞助的委员会,以开发美国标准Fortran。由此产生的两种标准于1966年3月获得批准,定义了两种语言,FORTRAN(基于FORTRAN IV,这是一种事实上的标准)和Basic FORTRAN(基于FORTRAN II,但去掉了它与机器相关的特性)。由第一个标准定义的FORTRAN,正式命名为X3.9-1966,被称为FORTRAN 66(尽管许多人继续称之为FORTRANⅳ,这是该标准主要基于的语言)。FORTRAN 66实际上成为FORTRAN的第一个行业标准版本。FORTRAN 66包括:

  • 主程序、子程序、函数和块数据程序单元
  • 整数、实数、双精度、复数和逻辑数据类型
  • 公共、维度和等价语句
  • 用于指定初始值的数据语句
  • 内部和外部(例如,库)功能
  • 赋值语句
  • 转到、计算后转到、分配后转到和分配语句
  • 逻辑IF和算术(三向)中频语句
  • DO循环语句
  • 顺序输入输出的读、写、退格、倒带和结束文件语句
  • FORMAT语句和分配的格式
  • 调用、返回、暂停和停止语句
  • DATA和FORMAT语句中的霍尔瑞斯(Hollerith)常数,以及作为过程的参数
  • 长度最多为6个字符的标识符
  • 注释行
  • 结束行

2.7 FORTRAN 77

一个带有编译器输出的FORTRAN-77程序,写在1987年在德国RWTH Aachen大学的CDC 175上

数字设备公司(DEC)VAX的4.3BSD,显示了FORTRAN 77(f77)编译器的手册

FORTRAN 66标准发布后,编译器供应商引入了对标准FORTRAN的几个扩展,促使ANSI委员会X3J3在1969年开始在计算机商业设备制造商协会(前BEMA)CBEMA的赞助下修订1966标准。该修订标准的最终草案于1977年分发,导致1978年4月正式批准新的FORTRAN标准。名为FORTRAN 77的新标准正式命名为X3.9-1978,它增加了许多重要特性来解决FORTRAN 66的许多缺点:

  • 使用可选的“其它”和“其它”IF子句阻止IF和结束IF语句,为结构化编程提供改进的语言支持
  • DO循环扩展,包括参数表达式、负增量和零行程计数
  • 打开、关闭和查询语句,以提高输入/输出能力
  • 直接存取文件输入输出
  • 隐式语句,用于重写隐式约定,即如果未声明变量的名称以I、J、K、L、M或N开头,则未声明变量为整数(否则为实数)
  • 字符数据类型,用大量扩展的字符输入输出和基于字符的数据处理工具来代替霍尔瑞斯(Hollerith)字符串
  • 用于指定常数的PARAMETER语句
  • 持久局部变量的SAVE语句
  • 内部函数的类属名(例如,SQRT也接受其他类型的参数,如复数或实数*16)。
  • 一组内部符号(LGE、LGT、LLE、LLT),用于字符串的词汇比较,以ASCII排序序列为基础。(美国国防部通过有条件批准投票中要求这些ASCII功能)

在本标准修订版中,许多功能被删除或改变,这可能使以前符合标准的程序失效。(移除是当时X3J3唯一允许的替代方案,因为ANSI标准还没有“折旧(deprecation)”的概念。)虽然冲突列表中的24个项目(见X3.9-1978附录A2)中的大部分解决了先前标准允许但很少使用的漏洞或有问题的情况,但少数特定功能被故意删除,例如:

  • 霍尔瑞斯(Hollerith)常数和霍尔瑞斯数据,例如GREET= 12HHELLO THERE!
  • 读入FORMAT规范中的H编辑(霍尔瑞斯(Hollerith)字段)描述符
  • 下标对数组边界的过度索引
          DIMENSION A(10,5)
          Y=  A(11,1)
  • 将控制移出和移回DO循环的范围(也称为“扩展范围”)

变体:明尼苏达(Minnesota )FORTRAN

控制数据公司Control Data Corporation的计算机有另一个版本的FORTRAN 77,叫做明尼苏达(Minnesota )FORTRAN (MNF),专门为学生使用而设计,具有不同的输出结构、code和Data语句的特殊用途、编译的优化代码级别、详细的错误列表、大量的警告消息和调试。[25]

2.8 向ANSI标准Fortran的过渡

随着标准化过程难以跟上计算和编程实践的快速变化,FORTRAN 77修订标准的开发将一再推迟。同时,作为近十五年来的“标准FORTRAN”,FORTRAN 77将成为历史上最重要的语言。

FORTRAN 77的一个重要的实际扩展是1978年MIL-STD-1753的发布。[26] 该规范由美国国防部开发,标准化了大多数FORTRAN 77编译器实现的一些功能,但不包括在ANSI FORTRAN 77标准中。这些特性最终将被纳入Fortran 90标准。

  • DO WHILE、EXIT、CYCLE和END DO语句
  • 包含语句
  • 隐式语句的隐式无变体
  • 位操作内在函数,基于工业实时Fortran中包含的类似函数(ANSI/ISA S61.1 (1976))

1991年发布的IEEE 1003.9 POSIX标准为FORTRAN 77程序员发布POSEX系统调用提供了一种简单的方法。[27] 文档中定义了超过100个调用,允许以可移植的方式访问POSIX兼容的过程控制、信号处理、文件系统控制、设备控制、过程指向和流输入/输出。

2.9 Fortran 90

FORTRAN 77的后继者,非正式地称为Fortran 90(在此之前,Fortran 8X),最终在1991年作为国际标准化组织/国际电工委员会标准1539:1991发布,并在1992年作为美国国家标准协会标准发布。除了将FORTRAN的正式拼写改为Fortran之外,这一重大修订还增加了许多新功能,以反映自1978年标准以来编程实践的重大变化:

  • 自由格式的源输入,也带有小写的Fortran关键字
  • 最长31个字符的标识符(在以前的标准中,只有6个字符)。
  • 内嵌注释
  • 能够对整个数组(或数组段)进行操作,从而大大简化数学和工程计算。
    • 整体、部分和掩码数组赋值语句和数组表达式,如X(1:N)=R(1:N)*COS(A(1:N))
    • 选择性数组赋值的WHERE语句
    • 数组值常量和表达式
    • 用户定义的数组值函数和数组构造函数。
  • 递归过程
  • 模块,将相关的过程和数据组合在一起,并使它们对其他程序单元可用,包括将可访问性限制在模块的特定部分的能力。
  • 一种大大改进的参数传递机制,允许在编译时检查接口
  • 通用过程的用户编写界面
  • 操作符重载
  • 派生(结构化)数据类型
  • 新的数据类型声明语法,用于指定变量的数据类型和其他属性
  • 通过ALLOCABLE属性以及ALLOCATE和DEALLOCATE语句进行动态内存分配
  • 指针属性、指针赋值和NULLIFY语句,以便于动态数据结构的创建和操作
  • 结构化循环构造,循环终止用结束循环语句,有序终止正常循环迭代用退出和循环语句
  • SELECT…CASE用于多路选择的案例构造
  • 用户控制下的可移植的数字精度规格
  • 新的和增强的内在程序。

过时和删除

与之前的版本不同,Fortran 90没有删除任何功能。(附录B.1称,“本标准中删除的特征列表为空。”)任何符合标准的FORTRAN 77程序在Fortran 90下也是符合标准的,任何一个标准都应该可以用来定义它的行为。

一小部分功能被确定为“过时”,并有望在未来的标准中删除。这些早期版本特性的所有功能都由新的Fortran 95特性执行。保留一些是为了简化旧程序的移植,但最终可能会被删除。

过时的特征 例子 Fortran 95中的状态/命运
算术IF语句
      IF (X) 10, 20, 30
反对
非整数DO参数或控制变量
      DO 9 X= 1.7, 1.6, -0.1
删除
共享DO环路终端或

用声明终止

结束操作或继续操作除外

      DO 9 J= 1, 10
          DO 9 K= 1, 10
  9       L=  J + K
反对
从代码块之外的分支到结束IF
 66   GO TO 77 ; . . .
      IF (E) THEN ;     . . .
 77   END IF
删除
交错返回
      CALL SUBR( X, Y, *100, *200 )
反对
暂停语句
      PAUSE 600
删除
赋值语句

并分配到“转到”语句

 100   . . .
      ASSIGN 100 TO H
       . . .
      GO TO H . . .
删除
分配的语句编号和FORMAT说明符
      ASSIGN 606 TO F ... WRITE ( 6, F )...
删除
编辑描述符
 606  FORMAT ( 9H1GOODBYE. )
删除
计算GO TO语句
      GO TO (10, 20, 30, 40), index
(过时)
语句函数
      FOIL( X, Y )=  X**2 + 2*X*Y + Y**2
(过时)
在可执行语句中的数据语句
      X= 27.3
      DATA  A, B, C  / 5.0, 12.0, 13.0 /
      . . .
(过时)
字符*字符声明的形式
      CHARACTER*8 STRING   ! Use CHARACTER(8)
(过时)
假设字符长度函数
      CHARACTER*(*) STRING
(过时)[28]
固定形式源代码 Column 1 contains C or * or ! for comments.
Columns 1 through 5 for statement numbers
Any character in column 6 for continuation.
Columns 73 and up ignored
(过时)

“你好世界”的例子

program helloworld
     print *, "Hello world!"
end program helloworld

2.10 Fortran 95

作为国际标准化组织/国际电工委员会(ISO/IEC)1539-1:1997正式出版的Fortran 95是一个小版本,主要是为了解决Fortran 90标准中的一些悬而未决的问题。然而,Fortran 95也增加了许多扩展,特别是来自高性能Fortran规范的扩展:

  • FORALL和嵌套WHERE构造有助于矢量化
  • 用户定义的PURE和ELEMENTAL过程
  • 派生类型组件的默认初始化,包括指针初始化
  • 扩展了对数据对象使用初始化表达式的能力
  • 指向空值()的指针的初始化
  • 明确定义了当ALLOCATABLE数组超出范围时会自动解除分配。
  • 扩展了许多内部函数(例如,在maxloc内部函数中添加了一个dim参数)。

Fortran 90中提到的几个“过时”的特性已从Fortran 95中删除:

  • 使用实数和双精度索引变量的DO语句
  • 从块外部分支到结束中频语句
  • 暂停语句
  • 分配和指定GO TO语句,以及分配的格式说明符
  • H霍尔瑞斯(Hollerith)编辑描述符。

对Fortran 95的一个重要补充是国际标准化组织(ISO)的技术报告TR-15581:增强型数据类型设施,非正式地称为Allocatable TR。在完全兼容Fortran 2003的Fortran编译器可用之前,该规范定义了可分配数组的增强使用。这种用途包括可分配数组作为派生类型组件、过程伪参数列表和函数返回值。(ALLOCABLE数组优于基于指针的数组,因为Fortran 95保证当ALLOCABLE数组超出范围时会自动解除分配,从而消除内存泄漏的可能性。此外,可分配数组的元素是连续的,别名对于数组引用的优化来说不是问题,这使得编译器生成代码的速度比基于指针的快。[29])

Fortran 95的另一个重要补充是国际标准化组织的技术报告TR-15580:浮点异常处理,非正式地称为IEEE TR。该规范定义了对IEEE浮点算法和浮点异常处理的支持。

条件编译和变长字符串

除了强制性的“基础语言”(在国际标准化组织/国际电工委员会1539-1 : 1997中定义)之外,Fortran 95语言还包括两个可选模块:

  • 可变长度字符串 (ISO/IEC 1539-2 : 2000)
  • 有条件编译 (ISO/IEC 1539-3 : 1998)

这些标准共同构成了多部分国际标准 (ISO/IEC 1539)。

根据标准开发人员的说法,“可选部分描述了大量用户和/或实现者所要求的独立功能,但这些功能被认为不够通用,不足以满足所有符合标准的Fortran编译器的要求。”然而,如果符合标准的Fortran确实提供了这样的选项,那么它们“必须按照标准适当部分中对这些设施的描述来提供”。

2.11 Fortran 2003

Fortran 2003正式发布为国际标准化组织/国际电工委员会(ISO/IEC)1539-1:2004,是引入许多新功能的主要修订版。Fortran 2003新特性的综合摘要可在Fortran工作组(ISO/IEC JTC1/SC22/WG5)的官方网站上查阅。[30]

从那篇文章中,该版本的主要增强功能包括:

  • 派生类型增强:参数化派生类型、改进的可访问性控制、改进的结构构造函数和终结器
  • 面向对象编程支持:类型扩展和继承、多态性、动态类型分配和类型绑定过程,为抽象数据类型提供完整的支持
  • 数据操作增强:可分配组件(包含TR 15581)、延迟类型参数、VOLATILE属性、数组构造函数和分配语句中的显式类型规范、指针增强、扩展初始化表达式和增强的内部过程
  • 输入/输出增强:异步传输、流访问、派生类型的用户指定传输操作、格式转换期间用户指定的舍入控制、预连接单元的命名常数、FLUSH语句、关键字正则化以及对错误消息的访问
  • 过程指针
  • 支持IEEE浮点运算和浮点异常处理(包含TR 15580)
  • 与C语言的互操作性
  • 支持国际使用:访问国际标准化组织10646 4字节字符,并在数字格式的输入/输出中选择十进制或逗号
  • 增强与主机操作系统的集成:访问命令行参数、环境变量和处理器错误消息

对FORTRAN 2003的一个重要补充是国际标准化组织(ISO)的技术报告TR-19767:FORTRAN的增强模块设施。该报告提供了子模块,这使得Fortran模块更类似于Modula-2模块。它们类似于Ada的私有子单元。这允许模块的规范和实现以单独的程序单元表示,这改善了大型库的打包,允许在发布最终接口时保护商业秘密,并防止编译级联。

2.12 Fortran 2008

国际标准化组织/国际电工委员会(ISO/IEC)1539-1:2010,非正式称为Fortran 2008,于2010年9月获得批准。[31][32]与Fortran 95一样,这是一个小的升级,包括对Fortran 2003的澄清和更正,以及引入一些精选的新功能。新功能包括:

  • 子模块——模块的附加结构设施;取代国际标准化组织/国际电工委员会(ISO/IEC)TR 19767:2005
  • Coarray Fortran——一种并行执行模型
  • DO COMPLATE构造——用于没有相互依赖性的循环迭代
  • 连续属性–指定存储布局限制
  • 块构造–可以包含具有构造范围的对象声明
  • 递归可分配组件——作为派生类型中递归指针的替代
  • 国际标准最终草案(FDIS)作为文件N1830提供。[33]

FORTRAN2008的一个重要补充是2012年5月提交给国际标准化组织批准的国际标准化组织关于FORTRAN与C的进一步互操作性的技术规范29113。[34][35]该规范增加了对从C访问数组描述符的支持,并允许忽略参数的类型和等级。

2.13 Fortran 2018

该语言的最新版本(Fortran 2018)之前被称为Fortran 2015。[36]这是一个重大修订,于2018年11月28日发布。[37]

Fortran 2018包含两个先前发布的技术规范:

  • 国际标准化组织/国际电工委员会TS 29113:2012与中国的进一步互操作性[38]
  • 国际标准化组织/国际电工委员会TS 18508:2015 Fortran中的附加并行功能[39]

其他变化和新功能包括支持国际标准化组织/国际电工委员会/IEEE 60559:2011(截至2019年的最新版本的IEEE浮点标准)、十六进制输入/输出、隐式无增强和其他变化[40][41][42][43]

3 科学和工程化编辑

尽管BASIC的作者在1968年的一篇期刊文章中已经将FORTRAN描述为“老式的”[44],Fortran现在已经使用了几十年,并且在科学和工程界有大量的Fortran软件在日常使用中。[45]Jay Pasachoff在1984年写道,“物理和天文学学生只需学习FORTRAN。FORTRAN中存在如此之多的东西,以至于科学家们似乎不太可能转向帕斯卡(Pascal)、Modula-2或其他任何东西。”[46]1993年,塞西尔·利斯称FORTRAN为“科学计算的母语”,并补充说,用任何其他可能的语言来代替FORTRAN“可能仍然是一个渺茫的希望”。[47]

它是一些最密集的超级计算任务的主要语言,如天文学、气候建模、计算化学、计算经济学、计算流体动力学、计算物理、数据分析、水文建模、数值线性代数和数值库(LAPACK、IMSL和NAG)、优化、卫星模拟、结构工程和天气预测。许多用来衡量新计算机处理器性能的浮点基准,如规格CPU2006基准的浮点组件CFP2006,都是用Fortran编写的。

除此之外,计算科学中更现代的代码通常使用大型程序库,例如用于图形划分的METIS、用于线性代数能力的PETSc或Trilinos、用于网格和有限元支持的DUNE或FEniCS以及其他通用库。自20世纪90年代末以来,几乎所有最广泛使用的支持库都是用C编写的,更常见的是用C++编写的。另一方面,高级语言如Matlab、Python或R在计算科学的特定领域越来越流行。因此,越来越多的科学项目也是用这些语言编写的。由于这个原因,2003年FORTRAN增加了与C互操作的设施,并通过国际标准化组织/国际电工委员会技术规范29113予以加强,该规范将纳入2018年FORTRAN。编程语言受欢迎程度的这种转变也明显体现在特殊处理器2000和特殊处理器2006浮点基准之间的应用程序选择上。

美国宇航局探测器旅行者1号和旅行者2号的软件最初是用FORTRAN 5编写的,后来移植到FORTRAN 77上。截至2013年9月25日,一些软件仍然是用Fortran编写的,一些已经移植到了c。[48]

4 语言特征编辑

Fortran 95语言特性中讨论了Fortran 95的精确特性和语法。

5 移植性编辑

可移植性在早期是一个问题,因为没有一致的标准——甚至没有国际商用机器公司的参考手册——计算机公司竞相通过提供不兼容的特性来区分他们的产品和其他产品。标准提高了移植性。1966年的标准提供了参考语法和语义,但是供应商继续提供不兼容的扩展。尽管细心的程序员开始意识到使用不兼容的扩展会导致昂贵的可移植性问题,因此使用了诸如PFORT验证器之类的程序,[49][50]但是直到1977年的标准之后,当国家标准局(现在的NIST)发布FIPS PUB 69时,美国政府购买的处理器才被要求诊断标准的扩展。不是提供两个处理器,实际上每个编译器最终至少有一个诊断扩展的选项。[51][52]

不兼容的扩展不是唯一的可移植性问题。对于数值计算,重要的是要考虑到算法的特点。福克斯等人在PORT图书馆1966年标准的背景下解决了这个问题。[49]其中的思想被广泛使用,并最终通过固有的查询功能被纳入1990年的标准。二进制浮点运算广泛(现在几乎是普遍)采用了IEEE 754标准,基本上消除了这个问题。

在2003年标准解决之前,对计算环境(例如,程序的命令行、环境变量、错误条件的文本解释)的访问一直是个问题。

大量可以被描述为与工程和科学计算松散相关的库软件(如图形库)都是用C语言编写的,因此对它们的访问存在可移植性问题。这已经通过将互操作性集成到2003标准中得到解决。

现在用Fortran编写一个完全可移植的程序是可能的(而且相对容易),即使不需要借助预处理器。

6 变体编辑

6.1 Fortran 5

Fortran 5在20世纪70年代末和80年代初由数据通用公司销售,用于Nova、Eclipse和MV系列计算机。它有一个优化编译器,对当时的小型计算机非常有用。这种语言最像FORTRAN 66。这个名字是早期FORTRAN IV的双关语。

6.2 FORTRAN V

FORTRANV于1968年由控制数据公司(Control Data Corporation)为CDC 6600系列发行。该语言基于FORTRAN IV。[53]

Univac还为1100系列提供了一个编译器,名为FORTRAN V。Univac Fortran V的一个派生版本是雅典娜FORTRAN。

6.3 Fortran 6

Fortran 6 或可视Fortran 2001被微软授权给康柏(Compaq)。他们许可了康柏可视化Fortran,并为康柏v6到v6.1提供了Visual Studio 5环境界面。[54]

6.4 特定变体

高性能科学计算机的供应商(如巴勒斯、控制数据公司、克雷、霍尼韦尔、IBM、德克萨斯仪器公司和UNIVAC)增加了对Fortran的扩展,以利用特殊的硬件特性,如指令高速缓存、中央处理器流水线和矢量阵列。例如,一个IBM的FORTRAN编译器(扩展IUP)有一个优化级别,它重新排序机器代码指令,使多个内部算术单元同时忙碌。另一个例子是计算流体动力学,一种专为ILLIAC IV型超级计算机设计的FORTRAN的特殊变体,运行在美国宇航局艾姆斯研究中心。IBM研究实验室还开发了一种基于FORTRAN的扩展语言,称为VECTRAN,用于处理向量和矩阵。

面向对象的Fortran是Fortran的面向对象扩展,其中数据项可以被分组到对象中,这些对象可以被实例化并且并行执行。它适用于Sun、Iris、iPSC和nCUBE,但不再受支持。

这种特定于机器的扩展要么随着时间的推移而消失,要么已经将元素纳入了主要标准。剩下的主要扩展是OpenMP,它是共享内存编程的跨平台扩展。一个新的扩展,Coarray Fortran,旨在支持并行编程。

对于IBM 650的运输

FOR TRANSIT是IBM 704 FORTRAN语言的简化版本的名称,它是使用卡内基在20世纪50年代后期开发的翻译程序为IBM 650实现的。[55]以下注释出现在《国际商用机器公司参考手册》(适用于国际商用机器公司的运输自动编码系统C28-4038,版权所有1957,1959)中:

FORTRAN系统是为比650更复杂的机器设计的,因此FORTRAN程序员参考手册中的32条语句中有一些是FOR TRANSIT系统不能接受的。此外,FORTRAN语言还增加了某些限制。然而,这些限制都不会使为FOR TRANSIT 编写的源程序与704的FORTRAN系统不兼容。

允许的声明是:

  • 算术赋值语句,例如, a = b
  • GO to n
  • GO TO (n1, n2, ..., nm), i
  • IF (a) n1, n2, n3
  • PAUSE
  • STOP
  • DO n i = m1, m2
  • CONTINUE
  • END
  • READ n, list
  • PUNCH n, list
  • DIMENSION V, V, V, ...
  • EQUIVALENCE (a,b,c), (d,c), ...

一个程序最多可以使用十个子例程。

对于TRANSIT语句,只限于第7至56列。穿孔卡用于IBM 650的输入和输出。将源代码翻译成“信息技术”语言,然后将信息技术语句编译成SOAP汇编语言,最后生成目标程序,然后将目标程序加载到机器中运行程序(使用穿孔卡进行数据输入,并将结果输出到穿孔卡上)。

650s有两个版本,带有一个2000字的内存鼓:TRANSIT I(S)和TRANSIT II(S),后者用于配有索引寄存器和自动浮点十进制(双五进制)算法的机器。手册附录一包括了IBM 533读卡器/打孔控制面板的接线图。

6.5 基于Fortran的语言

在FORTRAN 77之前,许多预处理程序通常被用来提供一种更友好的语言,其优点是预处理代码可以用标准FORTRAN编译器在任何机器上编译。这些预处理程序通常支持结构化编程、超过六个字符的变量名、附加数据类型、条件编译,甚至宏功能。受欢迎的预处理程序包括FLECS、iftran、MORTRAN、SFtran、S-Fortran、Ratfor和Ratfiv。例如,拉特福(Ratfor)和拉特费(Ratfiv)实现了一种类似于C语言的语言,在标准FORTRAN 66中输出预处理代码。尽管Fortran语言取得了进步,但预处理程序仍然被用于条件编译和宏替换。

FORTRAN最早的版本之一是在60年代推出的,且在大学里广泛使用。沃特福特由滑铁卢(Waterloo)大学开发、支持和发行,主要基于FORTRAN IV型。使用WATFOR的学生可以提交他们的批处理FORTRAN作业,如果没有语法错误,程序将直接执行。这种简化使学生能够专注于程序的语法和语义,或执行逻辑流程,而不是处理提交作业控制语言(JCL)、编译/链接-编辑/执行连续过程,或大型/小型计算机环境的其他复杂性。这种简化环境的缺点是,对于需要扩展主处理器能力的程序员来说,WATAF不是一个很好的选择,例如WATAF通常对输入/输出设备的访问非常有限。WATFOR被WATFIV及其后来的版本所取代。

program; s=0 i=1,n;  s=s+1;  stop i;  s='s'  Stop

(线路编程)

LRLTRAN是劳伦斯(Lawrence)辐射实验室开发的,用于支持矢量运算和动态存储,以及支持系统编程的其他扩展。发行版包括LTSS操作系统。

Fortran-95标准包括一个可选的第3部分,它定义了一个可选的条件编译能力。这种能力通常被称为“CoCo”。

许多Fortran编译器已经将预处理器的子集集成到了它们的系统中。

SIMSCRIPT是一个专用的Fortran预处理器,用于建模和模拟大型离散系统。

F编程语言被设计成Fortran 95的一个干净子集,它试图删除Fortran的冗余、非结构化和不推荐使用的特性,例如等价语句。F保留了Fortran 90中添加的数组特性,并删除了FORTRAN 77和Fortran 90中添加的结构化编程结构所废弃的控制语句。F被它的创建者描述为“一种编译的、结构化的数组编程语言,特别适合教育和科学计算”。[56]

拉希(Lahey)和富士通(Fujistu)合作为微软创建了福特兰针对.NET框架。[57]Silverfrost FTN95也能够创建.NET代码。[58]

7 代码示例编辑

下面的程序说明了动态内存分配和基于数组的操作,这是Fortran 90引入的两个特性。特别值得注意的是,在操作数组时没有DO循环和IF/THEN语句;数学运算应用于整个阵列。同样明显的是使用了符合当代编程风格的描述性变量名和通用代码格式。本示例计算交互式输入数据的平均值。

program average

  ! Read in some numbers and take the average
  ! As written, if there are no data points, an average of zero is returned
  ! While this may not be desired behavior, it keeps this example simple

  implicit none

  real, dimension(:), allocatable :: points
  integer                         :: number_of_points
  real                            :: average_points=0., positive_average=0., negative_average=0.

  write (*,*) "Input number of points to average:"
  read  (*,*) number_of_points

  allocate (points(number_of_points))

  write (*,*) "Enter the points to average:"
  read  (*,*) points

  ! Take the average by summing points and dividing by number_of_points
  if (number_of_points > 0) average_points = sum(points) / number_of_points

  ! Now form average over positive and negative points only
  if (count(points > 0.) > 0) then
     positive_average = sum(points, points > 0.) / count(points > 0.)
  end if

  if (count(points < 0.) > 0) then
     negative_average = sum(points, points < 0.) / count(points < 0.)
  end if

  deallocate (points)

  ! Print result to terminal
  write (*,'(a,g12.4)') 'Average = ', average_points
  write (*,'(a,g12.4)') 'Average of positive points = ', positive_average
  write (*,'(a,g12.4)') 'Average of negative points = ', negative_average

end program average

8 幽默编辑

在选择“FORTRAN 77”名称的FORTRAN标准委员会会议上,一项讽刺性的技术提案被纳入官方发行版,标题为“被认为有害的字母 O”。这个提议旨在通过从允许的变量名中删除字母来解决字母“O”和数字0之间有时出现的混淆。然而,所提出的方法是从字符集中完全删除字母(从而保留48个作为词汇字符,而冒号已经增加到49个)。这被认为是有益的,因为它将促进结构化编程,使之不可能像以前那样使用臭名昭著的GO TO语句。(麻烦的FORMAT语句也将被删除。)有人指出,这“可能会使一些现有的程序无效”,但大多数程序“无论如何都可能不符合要求”。[59][60]

当添加假定长度数组时,对于区分上限和下限的合适字符存在争议。沃尔特·布雷纳德(Walt Brainerd)博士在评论这些论点时写了一篇题为“天文学与胃肠病学”的文章,因为一些支持者建议使用星号(“*”),而另一些支持者则倾向于冒号(“:”)。

在FORTRAN 77(和大多数早期版本)中,以字母I-N开头的变量名具有默认的整数类型,而以任何其他字母开头的变量默认为实数,尽管程序员可以用显式声明覆盖默认值[61]。这导致了一个笑话:“在Fortran中,上帝是真实的(除非声明为整数)。”

参考文献

  • [1]

    ^"FORTRAN". American Heritage Dictionary of the English Language (5 ed.). The Free Dictionary. 2011. Retrieved 2016-02-08..

  • [2]

    ^John Backus. "The history of FORTRAN I, II and III" (PDF). Softwarepreservation.org. Retrieved 19 November 2014..

  • [3]

    ^Eugene Loh (18 June 2010). "The Ideal HPC Programming Language". Queue. 8 (6)..

  • [4]

    ^"HPL – A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers". Retrieved 2015-02-21..

  • [5]

    ^"Fifty Years of BASIC". Time. 29 April 2014..

  • [6]

    ^Szczepaniak, John (1 May 2014). "A basic history of BASIC on its 50th birthday". Gamasutra..

  • [7]

    ^John Backus (October–December 1998). "The History of Fortran I, II, and III". IEEE Annals of the History of Computing. 20 (4): 68–78. doi:10.1109/85.728232.CS1 maint: Date format (link).

  • [8]

    ^J. W. Backus; R. J. Beeber; S. Best; R. Goldberg; L. M. Haibt; H. L. Herrick; R. A. Nelson; D. Sayre; P. B. Sheridan; H. Stern; L. Ziller; R. A. Hughes; R. Nutt (February 1957). The FORTRAN Automatic Coding System (PDF). Western Joint Computer Conference. pp. 188–198. doi:10.1145/1455567.1455599..

  • [9]

    ^Mindell, David, Digital Apollo, MIT Press, Cambridge MA, 2008, p.99.

  • [10]

    ^The Fortran I Compiler "The Fortran I compiler was the first major project in code optimization. It tackled problems of crucial importance whose general solution was an important research focus in compiler technology for several decades. Many classical techniques for compiler analysis and optimization can trace their origins and inspiration to the Fortran I compiler.".

  • [11]

    ^Brian Bergstein (May 20, 2007). "Fortran creator John Backus dies". MSNBC. Retrieved 29 October 2018..

  • [12]

    ^Applied Science Division and Programming Research Department, International Business Machines Corporation (October 15, 1956). The FORTRAN Automatic Coding System for the IBM 704 EDPM : Programmer's Reference Manual (PDF). pp. 19–20..

  • [13]

    ^Programming Research Department, International Business Machines Corporation (April 8, 1957). The FORTRAN Automatic Coding System for the IBM 704 EDPM : Preliminary Operator's Manual (PDF). pp. 6–37..

  • [14]

    ^Reference Manual, IBM 7090 Data Processing System, 1961, IBM A22-6528-3..

  • [15]

    ^"Fortran II User Manual" (PDF). Bitsavers.org. Retrieved 19 November 2014..

  • [16]

    ^Reference Manual, FORTRAN II for the IBM 704 Data Processing System (PDF). 1958. C28-6000-2..

  • [17]

    ^"Ibibilio.org". Ibiblio.org. Retrieved 15 September 2014..

  • [18]

    ^Haines, L. H. (1965). "Serial compilation and the 1401 FORTRAN compiler". IBM Systems Journal. 4 (1): 73–80. doi:10.1147/sj.41.0073..

  • [19]

    ^Lee, John A. N. (1967). Anatomy of a Compiler. Van Nostrand Reinhold..

  • [20]

    ^Fortran Specifications and Operating Procedures, IBM 1401 (PDF). IBM. C24-1455-2..

  • [21]

    ^Fortran IV Language Specifications, Program Specifications, and Operating Procedures, IBM 1401, 1440, and 1460 (PDF). IBM. April 1966. C24-3322-2..

  • [22]

    ^McCracken, Daniel D. (1965). "Preface". A Guide to FORTRAN IV Programming. New York: Wiley. p. v. ISBN 978-0-471-58281-6..

  • [23]

    ^"List of FORTRAN Implementations 1957 - 1967". IEEE Annals. 2017. Retrieved 2017-10-17..

  • [24]

    ^IBM System/360 Model 50 Functional Characteristics (PDF). IBM. 1967. A22-6898-1..

  • [25]

    ^"FORTRAN Compilers and Loaders". Chilton-programming.org.uk. Retrieved 19 November 2014..

  • [26]

    ^Mil-std-1753. DoD Supplement to X3.9-1978. United States Government Printing Office..

  • [27]

    ^IEEE 1003.9-1992 - IEEE Standard for InformationTechnology - POSIX(R) FORTRAN 77 Language Interfaces - Part 1: Binding for System Application Program Interface (API). IEEE. Retrieved 24 November 2018..

  • [28]

    ^"Declaration Statements for Character Types". Compaq Fortran Language Reference Manual. Texas, Huston, US: Compaq Computer Corporation. 1999. Retrieved 17 September 2018. The form CHARACTER*(*) is an obsolescent feature in Fortran 95..

  • [29]

    ^"Fortran 95 Reference". Gnu.Org. Retrieved 10 May 2014..

  • [30]

    ^Fortran Working Group (WG5). It may also be downloaded as a PDF file, FTP.nag.co.uk.

  • [31]

    ^"N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology – Programming languages – Fortran – Part 1: Base language" (PDF)..

  • [32]

    ^"Fortran 2008 – Last Working Draft" (PDF). Gnu.Org. Retrieved 10 May 2014..

  • [33]

    ^N1830, Information technology – Programming languages – Fortran – Part 1: Base language [1][失效连结].

  • [34]

    ^ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C.

  • [35]

    ^"Draft of the Technical Specification (TS) 29113" (PDF). wg5-fortran.org..

  • [36]

    ^"Doctor Fortran in "Eighteen is the new Fifteen"". Software.intel.com. Retrieved 20 November 2017..

  • [37]

    ^"Fortran 2018". ISO. Retrieved 30 November 2018..

  • [38]

    ^"Further Interoperability with C" (PDF). ISO. Retrieved 20 November 2017..

  • [39]

    ^"Additional Parallel Features in Fortran". ISO. Retrieved 20 November 2017..

  • [40]

    ^"The New Features of Fortran 2015". ISO. Retrieved 23 June 2017..

  • [41]

    ^"Doctor Fortran in "One Door Closes"". Software.intel.com. Retrieved 21 September 2015..

  • [42]

    ^"Doctor Fortran Goes Dutch: Fortran 2015". Software.intel.com. Retrieved 19 November 2014..

  • [43]

    ^Fortran 2018 Interpretation Document, 9 October 2018.

  • [44]

    ^Kemeny, John G.; Kurtz, Thomas E. (11 October 1968). "Dartmouth Time-Sharing". Science. 162 (3850): 223–228. doi:10.1126/science.162.3850.223..

  • [45]

    ^Phillips, Lee. "Scientific computing's future: Can any coding language top a 1950s behemoth?". Ars Technica. Retrieved 8 May 2014..

  • [46]

    ^Pasachoff, Jay M. (April 1984). "Scientists: FORTRAN vs. Modula-2". BYTE (letter). p. 404. Retrieved 6 February 2015..

  • [47]

    ^Galperin, Boris (1993). "26". Large Eddy Simulation of Complex Engineering and Geophysical Flows. London: Cambridgey. p. 573. ISBN 978-0-521-43009-8..

  • [48]

    ^"Interstellar 8-Track: How Voyager's Vintage Tech Keeps Running". WIRED. Retrieved 2017-12-23..

  • [49]

    ^P. A. Fox (1977). "Port — A portable mathematical subroutine library". A portable mathematical subroutine library. Lecture Notes in Computer Science. 57. pp. 165–177. doi:10.1007/3-540-08446-0_42. ISBN 978-3-540-08446-4. PORT ... written in (PFORT) .. ANS Fortran.

  • [50]

    ^"Methods to ensure the standardization of FORTRAN software". OSTI 5361454. PFORT ... Library ....

  • [51]

    ^D. E. Whitten (1975). "A machine and configuration independent Fortran: Portable Fortran". IEEE.org..

  • [52]

    ^"Portability Issues". .. discusses .. portability of .. Fortran.

  • [53]

    ^Healy, MJR (1968). "Towards FORTRAN VI". Advanced scientific Fortran by CDC. CDC. pp. 169–172. Archived from the original on 5 July 2009. Retrieved 10 April 2009..

  • [54]

    ^"third party release notes for Fortran v6.1". Cs-software.com. 15 March 2011. Retrieved 19 November 2014..

  • [55]

    ^"Internal Translator (IT) A Compiler for the IBM 650", by A. J. Perlis, J. W. Smith, and H. R. Van Zoeren, Computation Center, Carnegie Institute of Technology.

  • [56]

    ^"F Programming Language Homepage". Fortran.com. Retrieved 19 November 2014..

  • [57]

    ^"Fortran for .NET Language System". Archived from the original on 18 October 2014..

  • [58]

    ^"FTN95: Fortran 95 for Windows". Silverfrost.com. Retrieved 19 November 2014..

  • [59]

    ^X3J3 post-meeting distribution for meeting held at Brookhaven National Laboratory in November 1976.[来源可靠?].

  • [60]

    ^"The obliteration of O", Computer Weekly, 3 March 1977..

  • [61]

    ^"Rules for Data Typing (FORTRAN 77 Language Reference)". docs.oracle.com. Retrieved 2016-09-29..

阅读 1803
版本记录
  • 暂无