Publicitade R▼
⇨ definição - Wikipedia
Publicidade ▼
Wikipedia
Fortran | |
---|---|
多重范式:过程化、命令式、结构化、面向对象 | |
发行时间
|
1957 |
設計者
|
約翰·巴科斯 |
實作者
|
約翰·巴科斯 & IBM |
強类型、靜態 | |
主要實作產品
|
Absoft, GFortran, G95, Intel, Lahey/Fujitsu, Open Watcom, Pathscale, PGI, Silverfrost, SUN, XL Fortran, others |
啟發語言
|
Speedcoding |
影響語言
|
ALGOL 58, PL/I,BASIC,C語言, PACT I, MUMPS, Ratfor |
Fortran,亦譯為福傳,是由Formula Translation两个字所组合而成,意思是「公式翻译」。它是世界上第一个被正式采用並流传至今的高级编程語言。
目录 |
Fortran语言是為了滿足数值计算的需求而發展出來的。1953年12月,IBM公司工程師約翰·巴科斯(J. Backus)因深深體會編寫程序很困難,而寫了一份備忘錄給董事長斯伯特·赫德(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版本應用於IBM 704系統上,包含了32种语句,包括:
DIMENSION
和EQUIVALENCE
语句IF
语句。[1]IF
這個陳述式檢查例外情況(ACCUMULATOR OVERFLOW
, QUOTIENT OVERFLOW
和DIVIDE CHECK
);IF
语句以处理判断开关和判断指示灯GOTO
,计算的GOTO
,ASSIGN
,和赋值GOTO
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
语句(为编译器提供优化帮助)[2]1958年IBM又推出 FORTRAN II. 支援使用者撰寫副程式(subroutines)以及函數(functions)。有六個新陳述如下:
SUBROUTINE
, FUNCTION
,和END
CALL
和RETURN
COMMON
接下來的幾年內,FORTRAN II 繼續又支援 DOUBLE PRECISION
和 COMPLEX
等資料型態(data types)。
IBM 繼續開發 FORTRAN III 至1958年時已可以內建組合語言碼並新增其它功能;然而這個版本卻從未推出。有如704 FORTRAN 和 FORTRAN II、FORTRAN III 等的開發過程包含了過多的機器相依性(machine-dependent),造成程式碼不易移植到其他機器上的問題。早期提供FORTRAN 版本的廠商經常為此所苦
自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語言發展史上最重要的一件大事也許是美國標準協會(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。其功能如下:
SUBROUTINE
,FUNCTION
和BLOCK DATA
程序单元INTEGER
, REAL
, DOUBLE PRECISION
, COMPLEX
和LOGICAL
数据类型COMMON
, DIMENSION
和EQUIVALENCE
语句DATA
语句用以指定初始值EXTERNAL
(例如库)函数GOTO
,赋值GOTO
和计算GOTO
语句IF
和算术(三态)IF
语句DO
循环READ
, WRITE
, BACKSPACE
, REWIND
和ENDFILE
语句以处理顺序读写FORMAT
语句CALL
, RETURN
, PAUSE
和STOP
语句DATA
和FORMAT
语句中的霍尔瑞斯常数,作为子程序的实际参数在FORTRAN 66 標準推出之後,各家編譯器廠商不斷推出更具擴充性的標準FORTRAN("Standard Fortran"),這使得ANSI於1969年開始著手於1966標準版本的修正工作。最後定稿於1977年,1978年四月正式推出FORTRAN。新的標準規格也就是著名的 FORTRAN 77,這個版本是基於FORTRAN 66之上新增許多功能,彌補過去的缺點:
CHARACTER
数据类型,极大地扩展了的字符输入和输出以及对基于字符的数据进行处理的工具IMPLICIT
语句IF
语句块,以及可选的ELSE
和ELSE IF
从句,提供改进了的对结构化编程的语言支持。OPEN
,CLOSE
和INQUIRE
语句以改进I/O能力PARAMETER
语句以指定常数SAVE
语句以保存本地变量1978年推出了一個重要的版本 FORTRAN 77 是為MIL-STD-1753 Release版。這個規格由美國國防部制定,這個標準化的FORTRAN 77 編譯器並未引入ANSI FORTRAN 77 標準。一些新功能最終合併到Fortran 90 標準版。
DO WHILE
和END DO
语句INCLUDE
语句IMPLICIT NONE
变量,用于IMPLICIT
语句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 77的被严重推迟的后续版本,非正式名称是Fortran 90,最终于1992年作为ANSI标准发表。这一大版本添加了许多新特性以反映自1978年标准以来发展的在编程方面显著的变化:
RECURSIVE
过程WHERE
语句作选择性赋值),数组常数和表达式,用户定义的数组函数和数组构造。ALLOCATABLE
属性和ALLOCATE
和DEALLOCATE
语句POINTER
属性,指针赋值和NULLIFY
语句以便于创建和操作动态数据结构CASE
结构以用于多路选择EXIT
和CYCLE
语句以用于在按顺序地"跳出"正常的DO
循环重复Fortran 95 僅是一個小改版,大部份修正了Fortran 90 standard一些較為顯著的問題。雖然如此,Fortran 95 仍有不少的擴充,尤其是在 High Performance Fortran 的規格:
FOR ALL
和嵌套的WHERE
结构以帮助向量化PURE
和ELEMENTAL
过程Fortran 95的一个重要补充是ISO技术报告 TR-15581:增强的数据类型工具,非正式名称是可分配的TR。这一标准定义了ALLOCATABLE
数组的增强的应用,先于与完全的Fortran 2003兼容的Fortran编译器,以供使用。这些使用包括在过程伪参数列表中以及将函数返回值使用ALLOCATABLE
数组作为派生的类型组件。(ALLOCATABLE
数组比基于POINTER
的数组更受欢迎,因为ALLOCATABLE
数组是由Fortran 95保证的,当它们退出范围时会被自动释放掉,避免了内存溢出的可能性。另外,别名也不再是优化数组引用时的一个问题,可以使编译器生成比用指针时更快的代码。)
Fortran 95的第二个补充是ISO技术报告 TR-15580:浮点异常处理,非正式名称是IEEE TR。这一标准定义了对IEEE浮点算术和浮点异常处理的支持。
Fortran 2003有著更大幅度的改版。ISO Fortran Working Group (WG5)的官方网站有关于Fortran 2003新特性的详细总结,并有PDF文件PDF或者压缩
PostScript文件可供直接下载。
据该文所述,本版本的主要改进包括:
VOLATILE
属性,在数组构造和分配语句中显式定义类型,增强的指针,扩展的初始化表达式,增强的内部过程。FLUSH
语句,关键字的规范,访问错误信息。Fortran 2003之後的下一個版本是Fortran 2008. 一如 Fortran 95, 這只是一個小改版,略微更正了 Fortran 2003 的一些問題, 並且合併了 TR-19767的語言功能。
如同 February 2007, 新的功能包括了[3]
2007年8月,資料型態 BIT 被刪除了。2008年2月,Coarrays 的計畫已缩小,僅有 Parallel I/O,而研發團隊也被裁員了。
下面是一个在标准输出设备上输出Hello World的简单程序,这种程序通常作为开始学习编程语言时的第一个程序:
以 Fortran 90/95 自由格式的寫法為例
! 驚嘆號之後是註解 program main ! 這行可以省略,但是寫大程式的時候會發生混亂 write (*,*) "hello, world!" ! 第一個 * 表示輸出縮排使用內定值, 第二個 * 表示不指定輸出格式 write (unit = *, fmt = * ) "hello, world!" ! 作一樣的事 stop ! 這行代表程式結束,可以省略 end program main ! end 之後的 program main 也可以省略,但寫上是比較嚴謹的
几个著名的Fortran Package:
IF
的话,会消耗4个指令词,需要把常数零放入存储中,然后执行三个机器循环,而如果使用转换指令来实现IF
的话,只需要1到3个指令词就够了,不需要将常数存入存储,只需要1到3个机器循环来执行。一个优化的编译器如FORTRAN最有可能采用的是更精简的和通常来说更快的转换指令,而不是比较指令(使用指换指令同时也允许FREQUENCY
语句来优化IF
,而如果使用比较指令的话则无法实现)。同时,比较指令还将-0和+0认为是不同的值,而转换零和转换非零语句将它们视为相同的值。The fundamental unit of program is the basic block; a basic block is a stretch of program which has a single entry point and a single exit point. The purpose of section 4 is to prepare for section 5 a table of predecessors (PRED table) which enumerates the basic blocks and lists for every basic block each of the basic blocks which can be its immediate predecessor in flow, together with the absolute frequency of each such basic block link. This table is obtained by an actual "execution" of the program in Monte-Carlo fashion, in which the outcome of conditional transfers arising out of IF-type statements and computed GO TO'S is determined by a random number generator suitably weighted according to whatever FREQUENCY statements have been provided.
|
Conteùdo de sensagent
calculado em 0,031s