Fortran，可音譯為福傳，源自於「公式翻譯」的縮寫，它是通用的編譯型指令式程式語言，特別適用於數值計算和科學計算。它在 1957 年由 IBM 開發出來，是世界上第一個被正式採用並流傳至今的高階程式語言。 簡介 Fortran 最初由 IBM 在 1950 年代開發，用於科學和工程應用，並隨後長時間統治了科學計算程式設計。它已經在計算密集領域裡應用了超過六個年代，比如數值天氣預報、有限元分析、計算流體力學、地球物理學、計算物理學、晶體學和計算化學。它是高效能計算的流行語言，並被用於世界上最快超級計算機的基準測試和排名。 Fortran 有很多版本，每個都增加擴充套件卻在很大程度上保持與前面版本的相容性。後續版本已經增加支援了：結構化程式設計和基於字元資料的處理（FORTRAN 77），陣列程式設計、模組化程式設計和泛型程式設計（Fortran 90），高效能 Fortran Fortran 95），面向物件程式設計（Fortran 2003），併發計算（Fortran 2008）和天然的平行計算能力（Coarray Fortran 20082018）。 Fortran 的設計是很多其他語言的基礎。其中最周知的是在 1964 年推出的 BASIC，它基於了 FORTRAN II，具有一些清理，尤其是更好的邏輯結構，和其他在互動式環境中使工作更加容易的變更。 起源 在 1953 年後期，約翰巴科斯（John W Backus）向他在 IBM 的上司提交了一份提案，要為程式設計他們的 IBM 704 主機，而開發一種更實用的語言以替代組合語言 。歷史上 Backus 的團隊包括了程式設計師 Richard Goldberg、Sheldon F Best、Harlan Herrick、Peter Sheridan、、Robert Nelson、Irving Ziller、Harold Stern、和。它的概念包括更容易的將方程錄入計算機，這是發展出的想法，並且在 1952 年演示於之中。 在 1954 年 11 月，Backus 等人完成了草案規定《IBM 數學公式轉譯系統 FORTRAN》，第一本 FORTRAN 手冊出現在 1956 年 10 月，隨後在 1957 年 4 月交付了第一個 FORTRAN 編譯器。這是第一個最佳化編譯器，因為客戶不情願使用高階程式語言，除非它的編譯器能夠生成接近於手工編碼組合語言效能的程式碼。 儘管程式設計社群質疑新方法能否勝過手工編碼，它將操作一臺機器所需的程式設計語句數目縮減了 20 倍，因而快速的獲得了接受。John Backus 在 1979 年與 IBM 僱員雜誌《Think》的一次訪談中說道：我的多數工作出於懶惰。我不喜歡寫程式，所以當我工作在上，為計算彈道軌跡書寫程式的時候，我開始製造一個程式設計系統來使得書寫程式更加容易。 FORTRAN 語言被科學家廣泛接納，用來書寫數值計算密集程式，這鼓勵編譯器作者生產可以生成更快和更高效程式碼的編譯器。在語言中包括，使得 Fortran 特別適合於技術應用比如電子工程。 到了 1960 年，FORTRAN 版本已經可獲得於、、和 7090 計算機上。FORTRAN 流行性的顯著增長，刺激了競爭計算機制造商在它們的機器上提供 FORTRAN 編譯器，因此到了 1963 年，存在了超過 40 個 FORTRAN 編譯器。故此，FORTRAN 被認為是第一個廣泛使用的跨平臺程式語言。 提供給計算機的 FORTRAN，採用了一種創新的 63 階段編譯器，它完整的運行於只有 8000 個（六位元）字元的磁芯記憶體中。這個編譯器可以從磁帶或者從 2200 張打孔卡開始執行；它不進一步的使用磁帶或磁碟儲存。按照 Haines 的描述，它保持程式在記憶體中並裝載覆蓋部分，就地逐步將其轉換成可執行形式。此文被重印編輯於兩版的《編譯器剖析》和 IBM 手冊《Fortran 規定和操作過程，IBM 1401》之中。這種可執行形式不完全是機器語言；轉而浮點數算術、下標、輸入 輸出和函式引用是解釋執行的，這早先於 UCSD Pascal 的 Pcode 兩個年代。 Fortran 的發展平行於，在理論和編譯器設計上的進步，受到為 Fortran 程式生成高效程式碼的激勵。 FORTRAN 最早的 FORTRAN 版本應用於 IBM 704 系統上 2511 pages，包含了 32 個語句： DIMENSION 和 EQUIVALENCE 語句。 賦值語句。 三態語句。 檢查異常情況：IF ACCUMULATOR OVERFLOW、IF QUOTIENT OVERFLOW 和 IF DIVIDE CHECK；操縱：SENSE LIGHT、IF SENSE LIGHT 和 IF SENSE SWITCH。 無條件 GO TO、計算 GO TO、ASSIGN 和指派 GO TO。 DO 迴圈。 格式化輸入與輸出：FORMAT、READ、READ INPUT TAPE、WRITE OUTPUT TAPE、PRINT 和 PUNCH。 非格式化輸入與輸出 READ TAPE、READ DRUM、WRITE TAPE 和 WRITE DRUM。 其他的輸入與輸出：END FILE、REWIND 和 BACKSPACE。 PAUSE、STOP 和 CONTINUE。 FREQUENCY 語句（為編譯器提供提示）。 演化 Fortran 語言時間線 年份 非正式名字 ANSI 標準 ISOIEC 標準 1957 FORTRAN 1958 FORTRAN II 1958 FORTRAN III 1961 FORTRAN IV 1966 FORTRAN 66 X391966 1978 FORTRAN 77 X391978 1991 Fortran 90 X31981992 15391991 1997 Fortran 95 153911997 2004 Fortran 2003 153912004 2010 Fortran 2008 153912010 2018 Fortran 2018 153912018 2023 Fortran 2023 153912023 FORTRAN II 1958 年 IBM 又推出 FORTRAN II。主要的增強是憑藉允許使用者書寫的子例程和函式，它們透過傳遞引用的形式引數來返回值，從而支援了程序式程式設計。COMMON 語句為子例程提供了訪問公共（或稱全域性）變數的一種方式。增加了如下 6 個新語句： SUBROUTINE、FUNCTION 和 END。 CALL 和 RETURN。 COMMON。 接下來的幾年內，FORTRAN II 又繼續支援了 DOUBLE PRECISION 和 COMPLEX 資料型別。 早期的 FORTRAN 編譯器在子例程中不支援遞迴。早期的計算機架構不支援堆疊的概念，當它們直接支援子例程呼叫的時候，返回位置經常儲存在毗鄰這個子例程程式碼的一個固定位置（例如 IBM 1130），或一個特定的機器暫存器（IBM 360 系列）之中，它們只能在如下條件下允許遞迴，即由軟體來維護一個堆疊，這個返回地址要在進行呼叫之前儲存在堆疊之上，並在這個呼叫返回之後恢復。儘管沒有規定於 FORTRAN 77 之中，很多 F77 編譯器將其作為一個選項來支援遞迴，而，設計有內建的遞迴，而將其作為預設來支援。它在 Fortran 90 中透過新關鍵字 RECURSIVE 而成為標準。 簡單的 FORTRAN II 程式 下面的海倫公式程式，從磁帶盤上讀取資料，它包含 3 個 5 位整數 A、B 和 C 作為輸入。這裡沒有 型別 宣告可用：名字開始於 I、J、K、L、M 或 N 的變數是 定點數（就是整數），其他的是浮點數。因為這個例子要處理整數，變數的名字開始於字母 I。在 FORTRAN II 中變數名字必須開始於字母，並可以後續著字母和數字二者，直到達到六個字元的限制。如果 A、B 和 C 不能表示在平面幾何中一個三角形的邊，程式將結束執行，STOP 給出錯誤程式碼 1。否則輸出一行來顯示 A、B 和 C 的輸入值，隨後是計算出的作為浮點數的三角形的面積 AREA，它佔據輸出行的 10 個空位，並顯示小數點後 2 位，這指定於標號 904 的 FORMAT 語句中的 F102。 C 透過標準的平方根函式計算三角形面積 C 輸入 磁帶讀寫器單元 5，整數輸入 C 輸出 行式印表機，實數輸出 C 輸入錯誤 輸出錯誤資訊並顯示錯誤程式碼 1 於作業控制列表中 READ INPUT TAPE 5 901 IA IB IC 901 FORMAT 3I5 C IA、IB 和 IC 不可以是負數或零 C 一個三角形的兩條邊的總和必須大於第三邊 IF IA 110 110 101 101 IF IB 110 110 102 102 IF IC 110 110 103 103 IF IAIBIC 120 120 104 104 IF IAICIB 120 120 105 105 IF IBICIA 120 120 199 110 PRINT 902 902 FORMAT 42H IA IB AND IC MUST BE GREATER THAN ZERO STOP 1 120 PRINT 903 903 FORMAT 50H SUM OF TWO SIDES MUST BE GREATER THAN THIRD SIDE STOP 1 199 CONTINUE C 使用海倫公式計算三角形的面積 S FLOATF IA IB IC 20 AREA SQRTF S S FLOATF IA S FLOATF IB S FLOATF IC PRINT 904 IA IB IC AREA 904 FORMAT 4H A I55H B I55H C I58H AREA F102 13H SQUARE UNITS STOP END FORTRAN III IBM 繼續開發 FORTRAN III，至 1958 年時已允許內建組合語言程式碼以及其他一些特徵；然而這個版本卻從未作為產品推出。類似於 704 FORTRAN 和 FORTRAN II，FORTRAN III 包含了過多的機器依賴性，造成程式碼不易移植到其他機器上的問題。其他廠商提供的早期 FORTRAN 版本也經常遭受類似的困苦。 FORTRAN IV 自 1961 年開始，由於客戶的強烈要求，IBM 開始發展 FORTRAN IV，目的在於移除一些 FORTRAN II 中過於依賴機器本身的程式碼（例如：READ INPUT TAPE），同時新增一些新特徵，比如 LOGICAL 資料型別（TRUE 或者 FALSE）、布林表示式和取代了算術 IF 語句的邏輯 IF 語句。FORTRAN IV 於 1962 年推出，最早應用於（Stretch）計算機之上，接著又推出了 IBM 7090 和 IBM 7094 版本，和後來 1966 年的版本。 到了 1965 年，FORTRAN IV 應該已經符合了美國標準協會 X343 FORTRAN 工作組開發的標準。在 1966 年至 1968 年之間，IBM 為其 System360 提供了一些 FORTRAN IV 編譯器，每個都以指示了編譯器執行需要的最小記憶體量的字母來命名。字母 F、G、H 匹配 System360 模式編號來指示記憶體大小，每個字母增長都是二倍： 1966 FORTRAN IV F for DOS360（64K 位元組） 1966 FORTRAN IV G for OS360（128K 位元組） 1968 FORTRAN IV H for OS360（256K 位元組） 數字裝置公司（DEC）在 1967 年至 1975 年之間為 PDP10 維護了 DECSYSTEM10 Fortran IV（F40）。 大約在這個時候，FORTRAN IV 開始成為重要的教育工具和實現，比如滑鐵盧大學創造了 WATFOR 和來簡化早期編譯器複雜的編譯和連結過程。 FORTRAN 66 早期的 FORTRAN 語言發展史上最重要的一件大事，也許是美國標準協會（即今日的美國國家標準協會 ANSI）的委員們，開始為 FORTRAN 制定標準規格，它名為 美國標準 FORTRAN。1966 年委員會推出兩套 FORTRAN 標準版本，分別定義成 FORTRAN（基於 FORTRAN IV，它已經充任了事實標準），和 Basic FORTRAN（基於 FORTRAN II，並移除其機器依賴性）。由第一套標準定義的 FORTRAN，官方代號為 X391966，後來被稱為 FORTRAN 66（仍有很多人習慣稱之為 FORTRAN IV）。FORTRAN 66 有效的成為第一套 FORTRAN 的工業標準版本。FORTRAN 66 包括了： 主程式、SUBROUTINE、FUNCTION 和 BLOCK DATA 程式單元。 INTEGER、REAL、DOUBLE PRECISION、COMPLEX 和 LOGICAL 資料型別。 COMMON、DIMENSION 和 EQUIVALENCE 語句。 DATA 語句，用以指定初始值。 內部和 EXTERNAL（例如庫）函式。 賦值語句 無條件 GO TO、計算 GO TO、ASSIGN 和指派 GO TO 語句。 邏輯 IF 和算術（三態）IF 語句。 DO 迴圈語句。 READ、WRITE、BACKSPACE、REWIND 和 ENDFILE 語句，用以處理順序讀寫。 FORMAT 語句和賦值格式。 CALL、RETURN、PAUSE、STOP 和 CONTINUE 語句。 ，用於 DATA 和 FORMAT 語句，作為給子程式的實際引數。 最長 6 個字元的識別符號。 註釋行。 END 行。 前面的 FORTRAN II 版本的海倫公式程式需要進行一些修改來作為 FORTRAN 66 程式編譯。修改包括使用更加機器無關版本的和語句，並移除不再需要的型別轉換函式。儘管不是必須的，算術語句被重寫為使用邏輯語句，並以更加結構化的方式來表示。 C 透過標準的平方根函式計算三角形面積 C 輸入 單元 5 的磁帶讀取器，整數輸入 C 輸出 單元 6 的行式印表機，實數輸出 C 輸入錯誤 輸出錯誤資訊並顯示錯誤程式碼 1 於作業控制列表中 READ 5 901 IA IB IC 901 FORMAT 3I5 C IA、IB 和 IC 不可以是負數或零 IF IA GT 0 AND IB GT 0 AND IC GT 0 GOTO 110 WRITE 6 902 902 FORMAT 42H IA IB AND IC MUST BE GREATER THAN ZERO STOP 1 110 CONTINUE C 一個三角形的兩條邊的總和必須大於第三邊 IF IAIBIC GT 0 AND IAICIB GT 0 AND IBICIA GT 0 GOTO 120 WRITE 6 903 903 FORMAT 50H SUM OF TWO SIDES MUST BE GREATER THAN THIRD SIDE STOP 1 120 CONTINUE C 使用海倫公式計算三角形的面積 S IA IB IC 20 AREA SQRT S S IA S IB S IC WRITE 6 904 IA IB IC AREA 904 FORMAT 4H A I55H B I55H C I58H AREA F102 13H SQUARE UNITS STOP END FORTRAN 77 在 FORTRAN 66 標準推出之後，各家編譯器廠商不斷推出更具擴充性的標準 FORTRAN，促使 ANSI 委員會 X3J3 於 1969 年開始著手於 1966 標準版本的修訂工作，這得到了計算機商業裝置製造商協會（曾經的 BEMA）的贊助。這個修訂標準的最終草案於 1977 年發表，並在 1978 年 4 月被正式批准為新的 FORTRAN 標準。新標準叫做 FORTRAN 77，其官方代號是 X391978，它增加了一些重要特徵來彌補 FORTRAN 66 的許多缺點： 塊狀 IF 和 END IF 語句，以及可選的 ELSE 和 ELSE IF 子句，提供改進了的對結構化程式設計的語言支援。 DO 迴圈擴充套件，包括引數表示式，負數增量，和零行程計數。 OPEN、CLOSE 和 INQUIRE 語句，用以改進 IO 能力。 直接訪問檔案 IO。 IMPLICIT 語句，用來變更或確認對未宣告變數的隱含約定，即如果它們的名字開始於 I、J、K、L、M 或 N 則是 INTEGER（否則為 REAL）。 CHARACTER 資料型別，替代了霍爾瑞斯字串，極大地擴充套件了字元輸入和輸出以及對基於字元的資料進行處理的設施。 PARAMETER 語句，用以指定常量。 SAVE 語句，用以持久儲存區域性變數。 內部函式的通用名稱（比如 SQRT 也接受其他型別的實際引數，例如 COMPLEX 或 REAL16）。 一組內部函式（LGE、LGT、LLE 和 LLT），用於字串的邏輯比較，它基於了 ASCII 定序順序。 在這次標準修訂中，一些特徵被刪除或以使曾經符合標準的程式失效的方式而更改了。儘管在衝突列表的 24 個專案中的大多數（參見 X391978 的附錄 A2），解決了在以前標準中允許但很少使用的漏洞和病態情況，少量特定功能被特意刪除了，比如： 和霍爾瑞斯資料，例如：GREET 12HHELLO THERE。 在 FORMAT 規定中讀入 H 編輯（霍爾瑞斯欄位）描述符。 透過下標對陣列邊界的翻越索引，例如： DIMENSION A 105 Y A 111 將控制轉移出離和回入 DO 迴圈的範圍（也叫做 擴充套件範圍。 開發繼 FORTRAN 77 之後的修訂標準被反覆的推遲，因為標準化過程難以跟上計算和程式設計實踐的快速變化。與此同時，作為 標準 FORTRAN 將近十五年，FORTRAN 77 成為了程式語言歷史上最重要的 Fortran 方言。 FORTRAN 77 版本的海倫公式程式不必需對 FORTRAN 66 版本程式進行修改。下面的例子展示額外的 IO 語句清理，包括使用列表指導（listdirected）的 IO，並將在語句中的霍爾瑞斯編輯描述符替代為引述的字串。它還使用結構化的和語句，取代 語句。 PROGRAM HERON C 透過標準的平方根函式計算三角形面積 C 輸入 預設標準輸入單元，整數輸入 C 輸出 預設標準輸出單元，實數輸出 C 輸入錯誤 輸出錯誤資訊並顯示錯誤程式碼 1 於作業控制列表中 READ IA IB IC C IA、IB 和 IC 不可以是負數或零 IF IA LE 0 OR IB LE 0 OR IC LE 0 THEN WRITE IA IB and IC must be greater than zero STOP 1 END IF C 一個三角形的兩條邊的總和必須大於第三邊 IF IAIBIC LE 0 OR IAICIB LE 0 OR IBICIA LE 0 THEN WRITE Sum of two sides must be greater than third side STOP 1 END IF C 使用海倫公式計算三角形的面積 S IA IB IC 20 AREA SQRT S S IA S IB S IC WRITE 901 IA IB IC AREA 901 FORMAT A I5 B I5 C I5 AREA F102 square units STOP END ANSI 標準 Fortran 的擴充套件 一個重要的 FORTRAN 77 實用擴充套件，是 1978 年發行的 MILSTD1753。這個由美國國防部制定的規範，標準化了由多數 FORTRAN 77 編譯器實現，卻並未引入 ANSI FORTRAN 77 標準之中的很多特徵。這些特徵最終合併入 Fortran 90 標準之中。 DO WHILE、EXIT、CYCLE 和 END DO 語句。 INCLUDE 語句。 IMPLICIT 語句的 IMPLICIT NONE 變體。 內部函式，基於了包含在（ANSIISA S611 1976）中的類似的函式。 1991 年推出 IEEE 10039 POSIX 標準，為 Fortran77 的程式人員提供了 POSIX 系統上的呼叫。有超過一百種功能呼叫被定義在文件中。允許訪問 POSIX 相容的程序控制、訊號處理、檔案系統控制、裝置控制、過程定點，以及可移植方式下的串流式輸入 輸出。 Fortran 90 FORTRAN 77 的被嚴重推遲的後續版本，非正式名稱是 Fortran 90，最終在 1991 年發行為 ISOIEC 標準 15391991，在 1992 年發行為 ANSI 標準。除了將官方拼寫從 FORTRAN 改為 Fortran 之外，這個重大修訂版本增加了很多特徵，用來反映自從 1978 年標準以來演變出的程式設計實踐中的重要變化： 自由格式原始碼輸入，不再需要在鍵入語句之前越過前 6 個字元位置。 小寫的 Fortran 關鍵字。 最長 31 個字元的識別符號（在以前的標準中為 6 個字元）。 行內註釋。 能夠按整體運算元組（或陣列節），由此極大地簡化了數學和工程計算。 WHERE 語句用於選擇性陣列賦值。 陣列值的常量和表示式。 整體、部分和遮掩的陣列賦值和陣列表示式，比如 X 1NR 1NCOS A 1N。 使用者定義的陣列值的函式和陣列構造子。 RECURSIVE 過程。 模組，將有關聯的過程和資料組合在一起，使它們可以被其它程式單元呼叫，包括限制只允許訪問模組的特定部分的能力。 極大地改善了引數傳遞機制，允許在編譯時檢查介面。 使用者書寫的泛型過程的介面。 運運算元多載。 派生（結構化）資料型別。 新的資料型別定義語法，以指定資料型別和變數的其它特性。 動態記憶體分配，透過 ALLOCATABLE 特性和 ALLOCATE 和 DEALLOCATE 語句。 POINTER 特性，指標賦值和 NULLIFY 語句，以便於建立和操作動態資料結構。 結構化迴圈構造，使用 END DO 語句用於迴圈終止，EXIT 和 CYCLE 語句，用於有秩序地 跳出 正常的 DO 迴圈迭代。 SELECTCASE 構造，用於多路選擇。 使用者控制下可移植的數值精度規定。 新的和增強的內部過程。 廢棄與刪除 不同於以前的修訂，在 Fortran 90 標準文字的附錄 B1 刪除特徵 中，沒有列出任何要刪除的特徵。任何符合標準的 FORTRAN 77 程式，在 Fortran 90 之下也是符合標準的，二者標準都應當能夠定義它的行為。 在附錄 B2 廢棄特徵 中列舉了一小組特徵，並期望在將來的標準中刪除它們。所有這些早期版本特徵的功能，都可以用較新的 Fortran 特徵來完成。其中一些為了簡化舊程式移植而保留，大多數在 Fortran 95 中被刪除了。 廢棄特徵 當前狀態 算術 IF 語句 刪除 非整數 DO 形式引數或控制變數 刪除 共享的 DO 迴圈終止或終止於 END DO 或 CONTINUE 之外的語句 刪除 從塊外部分支進入 END IF 刪除 PAUSE 語句 刪除 ASSIGN 語句和指派 GO TO 語句 刪除 賦值的語句編號和 FORMAT 指定符 刪除 H 編輯描述符 刪除 替代返回 廢棄 計算 GO TO 語句 廢棄 語句函式 廢棄 在可執行語句之間的 DATA 語句 廢棄 CHARACTER 形式的 CHARACTER 宣告 廢棄 假定字元長度的函式 廢棄 固定形式的原始碼 廢棄 Fortran 95 Fortran 95 正式發表為 ISOIEC 153911997，它僅是一個小改版，其大部份是修正 Fortran 90 標準的一些較為顯著的問題。雖然如此，Fortran 95 仍有不少的擴充，尤其是對高效能 Fortran 的規定： FOR ALL 和巢狀的 WHERE 結構，用以輔助向量化。 使用者定義的 PURE 和 ELEMENTAL 過程。 派生型別成員的預設初始化，包括指標初始化。 擴充套件了對資料物件使用初始化表示式的能力。 初始化指標至 NULL 。 明確了 ALLOCATABLE 陣列的定義，即它們在出離了作用域的時候自動的被釋放。 Fortran 95 的一個重要補充是 ISO 技術報告 TR15581：《增強的資料型別設施》，非正式名稱是 可分配 TR。這一標準定義了 ALLOCATABLE 陣列的增強的應用，先於完全與 Fortran 2003 相容的 Fortran 編譯器而投入使用。這些使用包括將 ALLOCATABLE 陣列作為派生型別成員、用在過程偽引數列表中以及作為函式返回值。 ALLOCATABLE 陣列比基於 POINTER 的陣列更受歡迎，因為 ALLOCATABLE 陣列是由 Fortran 95 提供保證的，當它們退出作用域時會被自動釋放掉，避免了記憶體洩漏的可能性。另外，別名也不再是最佳化陣列引用時的一個問題，可以使編譯器生成比用指標時更快的程式碼。 Fortran 95 的第二個補充是 ISO 技術報告 TR15580：《浮點異常處理》，非正式名稱是 IEEE TR。這一標準定義了對 IEEE 浮點算術和浮點異常處理的支援。 條件編譯和變長字串 除了強制性的 基礎語言（定義於 ISOIEC 15391 1997）Fortran 95 語言還包括兩個可選的模組： 變長字串（ISOIEC 15392 2000）。 條件編譯（ISOIEC 15393 1998）。 它們一起構成了多部分的國際標準（ISOIEC 1539）。 現代 Fortran 作為由二十一世紀的標準定義的語言，特別是因為它結合了面向物件程式設計支援和後來的，它經常被稱為 現代 Fortran，這個術語在文獻中的使用日漸增長。 Fortran 2003 Fortran 2003 正式發表為 ISOIEC 153912004，它是介入了很多新特徵的重大修訂版本。ISO Fortran 工作組（WG5）的官方網站有關於 Fortran 2003 新特徵的詳細總結 It may also be downloaded as a PDF file at 。 據該文所述，本版本的主要改進包括： 增強了的派生型別：引數化派生型別，改進的可訪問性控制，改進的結構構造子和終止器。 支援面向物件程式設計：型別擴充套件和繼承，多型，動態型別分配，以及型別繫結過程，提供對抽象資料型別的完全支援。 改善了資料操縱：可分配的成員（結合了 IEEE TR 15581），延遲型別形式引數，VOLATILE 特性，在陣列構造子和分配語句中顯式的型別指定，增強的指標，擴充套件的初始化表示式，增強的內部過程。 增強的輸入 輸出：非同步傳輸，串流訪問，使用者指定的派生型別的傳輸操作，使用者指定的在格式轉換時的舍入控制，預連線單元的命名常量，FLUSH 語句，關鍵字的規範化，訪問錯誤資訊。 過程指標。 支援 IEEE 浮點演算法和浮點異常處理（結合了 IEEE TR 15580）。 與 C 語言的互動性。 支援國際化：訪問 ISO 10646 四位元組字元，在數值格式化輸入 輸出中選擇小數點或者逗號。 增強與宿主作業系統的整合：訪問命令列引數、環境變數和處理器錯誤資訊。 對 Fortran 2003 的一個重要補充是 ISO 技術報告 TR19767：《增強的 Fortran 中模組設施》。這個報告提供了 子模組，它使得 Fortran 模組更加類似於 Modula2 模組。它們都類似於 Ada 私有子從單元。這允許模組的規定和實現，可以用分立的程式單元來表達，它改進了大型庫的包裝，允許儘管釋出明確介面卻保護商業機密，並防止編譯級聯。 Fortran 2008 ISOIEC 153912010，非正式的叫做 Fortran 2008，於 2010 年 9 月透過。它只是一個小改版，略微更正了 Fortran 2003 的一些問題，並且合併了 ISOIEC TR 197672005 的子模組功能。新的功能包括： 子模組，它是用於模組的補充的結構設施；取代了 ISOIEC TR 197672005。 ，它是並行執行模型。 構造，用於沒有內部依賴性的迴圈迭代。 CONTIGUOUS 特性，用來指定儲存格侷限制。 BLOCK 構造，它可以包含具有構造作用域的物件的宣告。 遞迴可分配成員，作為在派生型別中遞迴指標的替代者。 對 Fortran 2008 的一個補充是 ISO 技術規定（TS）291132012《進一步的 Fortran 同 C 語言的互操作性》，它於 2012 年 5 月被提交到 ISO 並獲得批准。這個規定增加對 C 語言訪問陣列描述符的支援，並允許忽略實際引數的型別和秩。 Fortran 2018 Fortran 語言的 2018 年修訂版（Fortran 2018）早先稱為 Fortran 2015，它是一個重大的修訂並且發行於 2018 年 11 月 28 日。 Fortran 2018 結合了兩個此前出版的技術規範： ISOIEC TS 291132012《進一步的 Fotran 同 C 語言的互操作性》。 ISOIEC TS 185082015《補充的 Fortran 並行特徵》。 此外的變更和新特徵包括支援：ISOIECIEEE 605592011（在 IEEE 的最新細小修訂之前的 IEEE 浮點數標準）、十六進位制輸入 輸出、IMPLICIT NONE 增強和其他變更。 Fortran 2023 Fortran 2023（ISOIEC 153912023）發表於 2023 年 11 月，可從 ISO 獲得。 Fortran 的特徵 Fortran 語言的最大特徵，是接近數學公式的自然描述，在計算機裡具有很高的執行效率。Fortran 可以直接對矩陣和複數進行運算。其矩陣元素在記憶空間儲存次序，採用了（Column major）次序，Matlab 也承襲這點，而 C 語言則採用（Row major）次序。 Fortran 自誕生以來廣泛地應用於數值計算領域，特別是平行計算和高效能運算領域。很多專用的大型數值運算計算機針對 Fortran 做了最佳化。Fortran 積累了大量高效而可靠的源程式。Fortran 90、Fortran 95、Fortran 2003、Fortran 2008 和 Fortran 2018 的相繼推出，使 Fortran 語言具備了現代高階程式語言的一些特徵。 程式碼例子 Hello World 示例一個在標準輸出裝置上輸出 Hello World 的簡單程式，這種程式通常作為開始學習程式語言時的第一個程式，下面是 FORTRAN 77 的寫法： PROGRAM HELLO C PRINT 語句類似 WRITE， C 但是列印到標準輸出單元 PRINT A Hello world STOP END 下面是 Fortran 90 的寫法： program HelloWorld write Hello world 這是個行內註釋 end program HelloWorld 最大公約數 下面的 FORTRAN 77 程式碼例子，使用歐幾里德演算法計算兩個數 A 和 B 的最大公約數： euclidf FORTRAN 77 使用歐幾里德演算法找到最大公約數 PROGRAM EUCLID PRINT A READ NA IF NALE0 THEN PRINT A must be a positive integer STOP END IF PRINT B READ NB IF NBLE0 THEN PRINT B must be a positive integer STOP END IF PRINT The GCD of NA and NB is NGCD NA NB STOP END FUNCTION NGCD NA NB IA NA IB NB 10 IF IBNE0 THEN ITEMP IA IA IB IB MOD ITEMP IB GOTO 10 END IF NGCD IA RETURN END 下面展示編譯和執行這個程式的結果： f77 o euclid euclidf euclid A 24 B 36 The GCD of 24 and 36 is 12 Fortran 90 特色示例 下面的程式展示動態記憶體分配和基於陣列的運算，這是 Fortran 90 介入的兩個特徵。要特別注意的是在操縱陣列時，未出現迴圈和 語句，數學運算應用於作為整體的陣列。同樣明顯的是運用了描述性變數名字和普通程式碼格式，這符合當代程式設計風格。這個例子在互動式錄入的資料上計算平均值： program average 讀取一些數值並取其平均 如下所寫，如果沒有資料點，返回均值為零 儘管這可能不是預期行為，它保持例子簡單 implicit none real dimension allocatable points integer number_of_points real average_points positive_average negative_average average_points 00 positive_average 00 negative_average 00 write Input number of points to average read number_of_points allocate points number_of_points write Enter the points to average read points 透過總和諸點併除以點數來取平均 if number_of_points 0 average_points sum points number_of_points 現在分別只在正數和負數上取平均 if count points 0 0 positive_average sum points points 0 count points 0 if count points 0 0 negative_average sum points points 0 count points 0 列印結果到終端標準輸出單元 6 write ag124 Average average_points write ag124 Average of positive points positive_average write ag124 Average of negative points negative_average deallocate points 釋放記憶體 end program average 下面展示編譯和執行這個程式的結果： gfortran o average averagef90 average Input number of points to average 8 Enter the points to average 0 1 1 2 2 3 3 4 Average 05000 Average of positive points 2500 Average of negative points 2000 FORTRAN 編譯器 Windows 作業系統下： Fortran Power Station 40（FPS 40），微軟公司開發的 Fortran 編譯器。1997 年 3 月轉讓給 DEC 公司。 Digital Visual Fortran（DVF），Fortran Power Station 的 DEC 公司版本，版本號為 50x 60x。 Compaq Visual Fortran（CVF），1998 年 1 月，DEC 公司被康柏公司收購，Digital Visual Fortran 更名為 Compaq Visual Fortran，版本號為 65x 66B。2002 年 5 月康柏公司已併入惠普公司，但 CVF 並未改名，版本號升級到 66C。 ，英特爾公司開發的 Fortran 編譯器。惠普購買了 CVF 技術之後不久，將 Windows 平臺上的從 CVF 66C 之後 Fortran 編譯器相關權利全部轉售給 Intel，它需要微軟 Visual Studio 外殼的支援才能實現 Visual IDE 功能。在 Intel 手上的版本編號從 70 開始至現在。 Open Watcom ，個人使用者可免費使用的 Fortran 95 編譯器套件。支援編譯為 Win32 或NET 可執行程式，內建名為 Plato 的 IDE，也可透過外掛支援 Visual Studio，偵錯程式使用 SDBG。 Linux 作業系統下： ，現已被 Nvidia 收購。 g77，GNU 的 Fortran 77 編譯器，整合在 GCC 中。 gfortran，GNU 的最新的 Fortran 編譯器，整合在 GCC 4x 及以上版本中，目前支援全部 Fortran 95、大部分 Fortran 2003 和 Fortran 2008 的功能，以替代 g77。 ，它支援 Linux 作業系統。 ，開放原始碼的 Fortran 95 編譯器。 Sun Studio Open64 編譯器 FORTRAN 數值庫 幾個著名的 Fortran 軟體包： IMSL 國際數學和統計庫的數值庫 Intel 數學核心庫 數值演算法組的數值庫 BLAS 基本線性代數子程式庫 LAPACK 線性代數軟體包 參見 NumPy 提供的 F2PY 註解 引用 延伸閱讀 語言標準 Informally known as FORTRAN 66 Also known as ISO 15391980 informally known as FORTRAN 77 Informally known as Fortran 90 Informally known as Fortran 95 There are a further two parts to this standard Part 1 has been formally adopted by ANSI Informally known as Fortran 2003 有關標準 其他參考材料 外部連結 ISOIEC JTC1SC22WG5 the official home of Fortran standards Fortran Standards Documents GFortran standards fortranlangorg 2020 History of FORTRAN and Fortran II Computer History Museum Valmer Norrod et al A selfstudy course in FORTRAN programingVolume Itextbook Computer Science Corporation El Segundo California April 1970 NASA N7025287 Valmer Norrod Sheldom Blecher and Martha Horton A selfstudy course in FORTRAN programingVolume IIworkbook NASA CR1478 April 1970 NASA N7025288 An introduction to the Fortran programming language by Reinhold Bader Nisarg Patel Leibniz Supercomputing Centre A coarray tutorial Category 陣列程式語言 Category 程序式程式設計語言 Category 數值分析語言 Category 面向物件的程式語言 CategoryFortran 程式語言家族 Category 計算機標準 CategoryUnix 程式設計工具 Category 靜態型別程式語言 Category 美國發明 CategoryISO 標準化程式語言