Fortran

Fortran
Fortran acs cover.jpeg
编程范型 多重范式过程化命令式结构化面向对象
設計者 約翰·巴科斯
實作者 約翰·巴科斯IBM
发行时间 1957
最新发行时间 Fortran 2008(ISO/IEC 1539-1:2010)(2010年)
型態系統 強类型靜態
常用 文件扩展名 .f, .for, .f90, .f95

福傳英语:Fortran),源自於「公式翻译」(英语:Formula Translation)的縮寫,是一種 程式語言。1957年由 IBM開發出,是世界上第一个被正式采用並流传至今的 高级编程語言

历史

一架曾由 勞倫斯利佛摩國家實驗室(Lawrence Livermore National Laboratory,LLNL)操作的古老 IBM 704 大型主機
FORTRAN發明的年代還沒有鍵盤與螢幕,程式碼必須使用打卡機打在打孔卡(punch card)上。圖中顯示卡片上的1-5行、第6行與73-80行被使用過。

Fortran语言是為了滿足 数值计算的需求而發展出來的。1953年12月,IBM公司工程師 約翰·巴科斯(J. Backus)因深深體會編寫程序很困難,而寫了一份備忘錄給董事長 斯伯特·赫德英语 Cuthbert Hurd(Cuthbert Hurd),建議為IBM704系統設計全新的電腦語言以提升開發效率。當時IBM公司的顾问 冯·诺伊曼强烈反对,因為他認為不切實際而且根本不必要。但赫德批准了這項計劃。1957年, IBM公司开发出第一套FORTRAN语言,在IBM704電腦上運作。歷史上第一支FORTRAN程式在 馬里蘭州的西屋貝地斯核電廠試驗。1957年4月20日星期五的下午,一位IBM軟體工程師決定在電廠內編譯第一支FORTRAN程式,當程式碼輸入後,經過編譯,印表機列出一行訊息:“原始程式錯誤……右側括號後面沒有逗號”,這讓現場人員都感到訝異,修正這個錯誤後,印表機輸出了正確結果。而 西屋電氣公司因此意外地成為FORTRAN的第一個商業用戶。1958年推出FORTRAN Ⅱ,幾年後又推出FORTRAN Ⅲ,1962年推出FORTRAN Ⅳ後,開始廣泛被使用。

1966年, 美国标准化协会制定了Fortran(x3.9-1966,也就是Fortran 66)和Fortran(x3.10-1966)标准。这时Fortran语言还不是结构化的程序设计语言。

1976年, 美国标准化协会重新对Fortran(x3.9-1966)进行了评估,公布了新的Fortran标准,也就是Fortran 77。Fortran 77是具有结构化特性的编程语言。Fortran77在短时间内取得了巨大的成功,广泛地应用于科学和工程计算,几乎统治了 数值计算领域。

1980年,Fortran 77被ISO接纳为国际标准。

1991年发布的Fortran 90大幅改进了旧版Fortran的型式,加入了对象导向的观念与提供指针,并同时加强 数组的功能。

Fortran後來又陸續推出Fortran 95、Fortran 2003等更新版本。

FORTRAN

最早的FORTRAN版本應用於IBM 704系統上,包含了32种语句,包括:

  • DIMENSIONEQUIVALENCE语句
  • 赋值语句
  • 三态算术IF语句。 [註 1]
  • IF這個陳述式檢查例外情況(ACCUMULATOR OVERFLOW, QUOTIENT OVERFLOWDIVIDE CHECK);IF语句以处理 判断开关和判断指示灯
  • GOTO,计算的GOTOASSIGN,和赋值GOTO
  • DO循环
  • 格式化的輸入與輸出(Formatted I/O): FORMAT, READ, READ INPUT TAPE, WRITE, WRITE OUTPUT TAPE, PRINTPUNCH
  • 非格式化的輸入與輸出(Unformatted I/O): READ TAPE, READ DRUM, WRITE TAPEWRITE DRUM
  • 其他的輸入與輸出:END FILE, REWIND,和BACKSPACE
  • PAUSE, STOP,和CONTINUE
  • FREQUENCY语句(为编译器提供 优化帮助) [註 2]

FORTRAN II

1958年IBM又推出FORTRAN II.支援使用者撰寫副程式(subroutines)以及函數(functions)。有六個新陳述如下:

  • SUBROUTINE, FUNCTION,和END
  • CALLRETURN
  • COMMON

接下來的幾年內,FORTRAN II繼續又支援DOUBLE PRECISIONCOMPLEX等資料型態(data types)。

FORTRAN III

IBM繼續開發FORTRAN III至1958年時已可以內建 組合語言碼並新增其它功能;然而這個版本卻從未推出。有如704 FORTRAN和FORTRAN II、FORTRAN III等的開發過程包含了過多的機器相依性(machine-dependent),造成程式碼不易移植到其他機器上的問題。早期提供FORTRAN版本的廠商經常為此所苦

一张Fortran代码表,程序员准备将上面写的代码用打卡机转录到卡片上。现在已不再使用这种方式。

FORTRAN IV

自1961年開始,由於客戶的強烈要求,IBM開始發展FORTRAN IV,目的在於移除一些FORTRAN II中過於依賴機器本身的程式碼(例如:READ INPUT TAPE)同時新增一些新的功能,如LOGICAL資料型別。 布尔类型(TRUE或者FALSE)與逻辑IF语句則取代了算术IF语句。FORTRAN IV於1962年推出,最早應用於 IBM 7030("Stretch")計算機之上,以及其接續的 IBM 7090和 IBM 7094版本。

FORTRAN 66

早期的FORTRAN語言發展史上最重要的一件大事也許是美國標準協會American Standards Association,即今日的 ANSI)的委員們開始為FORTRAN制定標準規格,名為"American Standard Fortran." 1966年委員會推出兩套FORTRAN標準版本,分別定義成FORTRAN(基於FORTRAN IV,用來應付de facto標準)和Basic FORTRAN(基於FORTRAN II,並且移除其平台依賴性)。FORTRAN第一套標準後來被稱為FORTRAN 66(大家仍習慣稱之為FORTRAN IV)。FORTRAN 66有效的成功第一套工業標準版的FORTRAN。其功能如下:

  • 主程序,SUBROUTINEFUNCTIONBLOCK DATA程序单元
  • INTEGER, REAL, DOUBLE PRECISION, COMPLEXLOGICAL数据类型
  • COMMON, DIMENSIONEQUIVALENCE语句
  • DATA语句用以指定初始值
  • 内部和EXTERNAL例如库)函数
  • 赋值语句
  • GOTO,赋值GOTO和计算GOTO语句
  • 逻辑IF和算术(三态)IF语句
  • DO循环
  • READ, WRITE, BACKSPACE, REWINDENDFILE语句以处理顺序读写
  • FORMAT语句
  • CALL, RETURN, PAUSESTOP语句
  • DATAFORMAT语句中的 霍尔瑞斯常数,作为子程序的实际参数
  • 最长六个字母的标识符
  • 注释行

FORTRAN 77

在FORTRAN 66標準推出之後,各家編譯器廠商不斷推出更具擴充性的標準FORTRAN("Standard Fortran"),這使得ANSI於1969年開始著手於1966標準版本的修正工作。最後定稿於1977年,1978年四月正式推出FORTRAN。新的標準規格也就是著名的FORTRAN 77,這個版本是基於FORTRAN 66之上新增許多功能,彌補過去的缺點:

  • CHARACTER数据类型,极大地扩展了的字符输入和输出以及对基于字符的数据进行处理的工具
  • IMPLICIT语句
  • IF语句块,以及可选的ELSEELSE IF从句,提供改进了的对 结构化编程的语言支持。
  • OPENCLOSEINQUIRE语句以改进I/O能力
  • 直接访问文件I/O
  • PARAMETER语句以指定常数
  • SAVE语句以保存本地变量
  • 内部函数的通用名称

1978年推出了一個重要的版本FORTRAN 77是為MIL-STD-1753 Release版。這個規格由美國國防部制定,這個標準化的FORTRAN 77編譯器並未引入ANSI FORTRAN 77標準。一些新功能最終合併到Fortran 90標準版。

  • DO WHILEEND DO语句
  • INCLUDE语句
  • IMPLICIT NONE变量,用于IMPLICIT语句
  • 位处理内部函数,基于类似的包含在 工业实时Fortran(ANSI/ISA S61.1(1976))中的函数

1991年推出 IEEE 1003.9 POSIX標準版,為Fortran-77的程式人員提供了POSIX system上的呼叫。有超過一百種功能呼叫被定義在文件上。允許存取POSIX-相容的行程控制(process control)、信號取得(signal handling)、檔案系統控制(file system control)、裝置控制(device control)、程序指定(procedure pointing),以及資料流的輸入與輸出(stream I/O)。

由於成功的修正了FORTRAN 77發展流程,使得原本過於緩慢重複的程式設計可以順利的應付計算機領域迅速的變化。同时,作为将近15年的“标准FORTRAN”,FORTRAN 77成為歷史上最重要的一套電腦語言。

Fortran 90

FORTRAN 77的被严重推迟的后续版本,非正式名称是Fortran 90,最终于1992年作为ANSI标准发表。这一大版本添加了许多新特性以反映自1978年标准以来发展的在编程方面显著的变化:

  • 自由格式源代码输入,以及小写的Fortran关键字
  • 模块,将有关联的 过程和数据组合在一起,使它们可以被其它程序单元调用,包括允许限制一些模块的特定部分访问。
  • RECURSIVE过程
  • 极大地改善了参数传递机制,允许在编译时检查 接口
  • 通用过程的用户自定义接口
  • 運算子多載
  • 衍生/ 抽象数据类型
  • 新的数据类型定义语法,以指定数据类型和变量的其它属性
  • 可以在表达式和赋值语句中按整体操作数组(或数组节),由此极大地简化了数学和工程计算。这些特性包括整体、部分和通配的数组赋值(比如用WHERE语句作选择性赋值),数组常数和表达式,用户定义的数组函数和数组构造。
  • 动态内存分配通过ALLOCATABLE属性和ALLOCATEDEALLOCATE语句
  • POINTER属性,指针赋值和NULLIFY语句以便于创建和操作动态 数据结构
  • CASE结构以用于多路选择
  • EXITCYCLE语句以用于在按顺序地"跳出"正常的DO循环重复
  • 最长31个字符的标识符
  • 行内注释
  • 用户可控制的可定义的数字精度
  • 新的和增强的内部过程

Fortran 95

Fortran 95僅是一個小改版,大部份修正了Fortran 90 standard一些較為顯著的問題。雖然如此,Fortran 95仍有不少的擴充,尤其是在 High Performance Fortran的規格:

  • FOR ALL和嵌套的WHERE结构以帮助向量化
  • 用户定义的PUREELEMENTAL过程

Fortran 95的一个重要补充是 TR-15581:增强的数据类型工具[ 失效連結],非正式名称是可分配的TR。这一标准定义了ALLOCATABLE数组的增强的应用,先于与完全的Fortran 2003兼容的Fortran编译器,以供使用。这些使用包括在过程伪参数列表中以及将函数返回值使用ALLOCATABLE数组作为派生的类型组件。(ALLOCATABLE数组比基于POINTER的数组更受欢迎,因为ALLOCATABLE数组是由Fortran 95保证的,当它们退出范围时会被自动释放掉,避免了 内存溢出的可能性。另外, 别名也不再是优化数组引用时的一个问题,可以使编译器生成比用指针时更快的代码。)

Fortran 95的第二个补充是 TR-15580:浮点异常处理[ 失效連結],非正式名称是IEEE TR。这一标准定义了对 IEEE浮点算术浮点 异常处理的支持。

Fortran 2003

Fortran 2003有著更大幅度的改版。 压缩PostScript文件[ 失效連結]可供直接下载。

据该文所述,本版本的主要改进包括:

  • 增强了衍生类型:带参数的衍生类型,改善了控制的可操作性,改善了结构化的创建和释放。
  • 支持 面向对象编程扩展类型和继承多态,动态类型分配,以及类型绑定过程。
  • 改善了数据操作:可分配的组件(编入IEEE TR 15581),延期的类型参数, 属性,在数组构造和分配语句中显式定义类型,增强的指针,扩展的初始化表达式,增强的内部过程。
  • 增强的输入/输出: 异步传输,流访问,用户指定衍生类型的传输操作,用户在格式转换时指定舍入控制,为连接前单元指定常数,FLUSH语句,关键字的规范,访问错误信息。
  • 过程指针
  • 支持 IEEE浮点算法浮点 异常处理(编入IEEE TR 15580)。
  • C语言的交互性
  • 支持国际化:访问 ISO 106464字节字符和在格式化的数字输入/输出中选择数字或者逗号。
  • 与宿主操作系统增强的集成:访问 命令行参数, 环境变量和处理器错误信息。

Fortran 2008

Fortran 2003之後的下一個版本是Fortran 2008.一如Fortran 95,這只是一個小改版,略微更正了Fortran 2003的一些問題,並且合併了TR-19767的語言功能。

如同February 2007,新的功能包括了 [註 3]

  • Co-array Fortran –并行處理模式
  • BIT資料型態

2007年8月,資料型態BIT被刪除了。2008年2月,Coarrays的計畫已缩小,僅有Parallel I/O,而研發團隊也被裁員了。

其他语言
العربية: فورتران
azərbaycanca: Fortran
беларуская: Fortran
български: FORTRAN
বাংলা: ফোরট্রান
bosanski: FORTRAN
català: Fortran
کوردی: فۆرتران
čeština: Fortran
Чӑвашла: Фортран
dansk: Fortran
Deutsch: Fortran
Ελληνικά: Fortran
English: Fortran
español: Fortran
eesti: Fortran
euskara: FORTRAN
فارسی: فورترن
suomi: Fortran
français: Fortran
Gaeilge: FORTRAN
עברית: Fortran
हिन्दी: फ़ोरट्रान
hrvatski: Fortran
magyar: Fortran
interlingua: FORTRAN
Bahasa Indonesia: Fortran
italiano: Fortran
日本語: FORTRAN
Taqbaylit: Fortran
қазақша: Фортран
한국어: 포트란
Kurdî: Fortran
Latina: FORTRAN
lietuvių: Fortran
latviešu: ''Fortran''
മലയാളം: ഫോർട്രാൻ
монгол: Фортран
Bahasa Melayu: Fortran
Mirandés: FORTRAN
မြန်မာဘာသာ: Fortran
Nederlands: Fortran
norsk nynorsk: Fortran
norsk: Fortran
occitan: Fortran
polski: Fortran
português: Fortran
română: Fortran
русский: Фортран
саха тыла: Fortran
Scots: Fortran
srpskohrvatski / српскохрватски: Fortran
Simple English: Fortran
slovenčina: Fortran
slovenščina: Fortran
shqip: Fortran
српски / srpski: Фортран
svenska: Fortran
తెలుగు: ఫోర్ట్రాన్
тоҷикӣ: Фортран
Türkçe: Fortran
українська: Фортран
Tiếng Việt: Fortran