この記事には
参考文献 や
外部リンク の一覧が含まれていますが、
脚注 による参照が不十分であるため、情報源が依然不明確です。
適切な位置に脚注を追加して、記事の信頼性向上 にご協力ください。(2023年9月 )
Fortran パラダイム 構造化プログラミング 、オブジェクト指向プログラミング 、手続き型プログラミング 、ジェネリックプログラミング 、命令型プログラミング 、配列プログラミング 登場時期 1957年 開発者 IBM 、ジョン・バッカス 最新リリース Fortran 2023 / 2023年11月17日 型付け 強い 静的型付け 主な処理系 Absoft, Cray,CUDA ,Fortran Builder ,GFortran ,G95 ,Intel , Lahey/Fujitsu,Open Watcom , Pathscale, PGI,Silverfrost , Sun, XL Fortran, Visual Fortran ほか 影響を受けた言語 Speedcoding 影響を与えた言語 ALGOL 58 ,BASIC ,PL/I ,C プラットフォーム z/OS ,z/VM ,z/VSE ,MCP ,VOS3 ,ACOS ,GCOS ,VMS ,OS/400 ,UNIX ,Linux ,Windows ,Mac OS ,CP/M ,MS-DOS ほかライセンス MIT License ウェブサイト 拡張子 f、for、f90 テンプレートを表示
1956年に発行された最初のFortran解説書『The Fortran Automatic Coding System for theIBM 704 』 Fortran (フォートラン )は科学技術計算 に向いた手続き型プログラミング 言語 。1954年 にIBM のジョン・バッカス が考案したコンピュータ 用で世界最初の高水準言語 であり、その後も改訂されて使用されている。
1956年 に最初のマニュアルがリリースされ、1957年 にIBM 704 用の最初のコンパイラ がリリースされた。名前Fortran はfor mulatran slation (数式の変換)に由来し、FORTRAN 77 や Fortran 90 などの末尾の数字は規格が制定された年を示している。
Fortran は科学技術計算 に向いた手続き型プログラミング 言語 であり、その長い歴史の間に開発された非常に多くの数学関数 やサブルーチン を数値解析ソフトウェア としてもっている。また、並列計算 の並列性を明示的に書くことができるので最適化 が行いやすく、したがって他の言語より高速であるなどの理由から[ 1] 、数値予報 および気候モデル 、構造力学 における有限要素法 、計算流体力学 、計算物理学 、計算機化学 、計量経済学 、動物と植物の品種改良 などの大規模な計算を行う分野において、スーパーコンピュータ で使われている[ 2] 。
ちょうどC言語 に対するC++言語 のように、Fortran 90/Fortran 95 の言語仕様は、FORTRAN 77 の頃と比べればかなり拡張され進歩したものとなっている。最新のソースコード は、初期のものと比較するとほとんど別の言語のように見える。初期の頃は、変数 名が大文字で6文字までであり、動的な記憶領域の確保 ができないなど多くの制約があったが、それらの制限はなくなり、Fortran 77 から構造化プログラミング が導入され、Fortran 90 からモジュラープログラミング 、配列演算 とユーザー定義総称関数が、Fortran 95 からHigh Performance Fortran が、Fortran 2003 からオブジェクト指向 が、Fortran 2008 からはコンカレント・コンピューティング(並行計算 )が導入された。
言語名は大文字 FORTRAN でなくFortran とつづることが、1990年にISOの会議で合意されている[ 3] 。なお、大文字でFORTRAN と表記した場合は FORTRAN 77 以前の FORTRAN を指し、Fortran と表記した場合は Fortran 90 以降を指すことがある。
Fortran 90/95の特徴は、次のとおりに要約される[ 4] 。
数値計算プログラムを簡単かつ簡潔に記述できる。 プログラムの誤りを犯しにくい言語である。 数値計算のための便利な道具があらかじめ用意されている。 作成したプログラムを大規模高速演算に使用できる。 無料のコンパイラが公開されている。 広く使われていたFORTRAN 77 の特徴は、以下のように要約される。
数式の計算が簡便に記述できる ほぼ数学の数式通りに計算式を記述できる。もっともこの特徴は他に計算向きの高級言語がなかった時代の話であり、現代の水準では「プログラミング言語における標準数式表現の始祖」といった方が当たっている。 入出力が容易 簡単に出力形式を定義できるFORMAT文や、実際の出力デバイスを意識しないで済む入出力 文がある(C言語 の標準入出力 と似た概念である)。 スタック指向/構造化指向の言語ではない COMMON文、BLOCK DATA文やSAVE文など、データを静的に割り当てることを前提としている。 プログラムの書式が固定形式である プログラム記述の方法がカラム位置に依存している(一部の実装では拡張されている)。 パンチカード に記されたFORTRANのコード。カラム1~5、6、73~80が制御用に確保されている。ジョン・バッカス は1953年末、メインフレームコンピュータIBM 704 のプログラムを開発するにあたり、アセンブリ言語 に代わるものを開発することをIBM の上司に提案した。歴史的なFORTRAN開発チームはRichard Goldberg、Sheldon F. Best、Harlan Herrick、Peter Sheridan、Roy Nutt 、 Robert Nelson、Irving Ziller、Lois Haibt 、David Sayreというメンバーで構成された[ 5] 。
The IBM Mathematical Formula Translating System のドラフト仕様は1954年 中旬に作成された。1956年10月にFortranの最初のマニュアルが作成され、コンパイラ は1957年4月に完成した。顧客はアセンブリ言語で記述されたコードに匹敵するパフォーマンスが得られない限り高級言語 を採用しないので、最初から最適化 コンパイラが開発された。
この新しい方法がハンドアセンブルより高速に動作するかどうかには疑いの目があったが、プログラム中の命令数を1/20に削減できるので急速に受け入れられていった。IBMの社内誌であるThinkに掲載された1979年のインタビューでバッカスは「私がこの仕事をしたのは面倒くさがりだったからです。私はプログラムを書くことが好きではなかったので、IBM 701 でミサイルの軌道計算プログラムを開発したときに、プログラムの開発を簡単にするためにプログラミングシステムを作り始めました。」[ 6] と語っている。
Fortranは科学者の間で数学を応用したプログラムの記述に広く用いられたことから、より高速で効率的なコードを出力しようとする原動力となった。また、ライブラリでなく言語として複素数 型 をサポートしたことは、電気電子工学における動的特性の計算などに代表される科学や工学分野のプログラムを書きやすくした。
1960年までに様々なバージョンのFORTRANがIBM 709 、IBM 650 、IBM 1620 、IBM 7090 で動作していた。FORTRANのユーザー数は急増し、コンピューターメーカーがFORTRANコンパイラをこぞって提供したので、1963年までには40を超えるFORTRANコンパイラが存在していた。こうしたことから、FORTRANはアーキテクチャの異なる様々なコンピュータで広くサポートされた最初の言語と言える。
Fortran開発の歴史は、初期のコンパイラ 技術の歴史そのものといえる。Fortranで効率的なコードを出力したいという強い要求からコンパイラによる最適化技術が大きく進歩した。
IBM 704 メインフレーム IBM 704用に開発された最初のFORTRANは32の命令をもっていた。
IBM 1401版は革新的な63 phases[ 7] のコンパイラであり、わずか8k語の磁気コアメモリ で動作する。コアに記録されたプログラムが段階的に実行可能なコードへと変換されて上書きされる。変換されたコードは機械語 ではなく、UCSD Pascal のPコードが生まれるよりも20年も前ながら、中間コードを利用していた。
IBMのFORTRAN II は1958年に開発された。主な改良点は手続き型プログラミング のサポートであり、サブルーチンや関数を定義できるようになった。
その後、FORTRAN IIのデータ型として、DOUBLE PRECISION
(倍精度型)とCOMPLEX
(複素数型)が追加された。
IBMは1958年にFORTRAN III を開発していた。いくつかの新機能に加えインラインアセンブラが可能であった。しかしながらこのバージョンは販売されなかった。704 FORTRANやFORTRAN IIと同様に、FORTRAN IIIにも移植の妨げになるような機種依存の機能があった。他のベンダーから販売されていたFORTRANも初期は同様の問題を抱えていた。
IBMは1961年に顧客の要望を受けFORTRAN IV の開発を開始した。READ INPUT TAPE
のようなFORTRAN IIの機種依存部分を削除したほか、LOGICAL
(論理型)、論理演算 、算術IF文 の代替となる論理IF文 が加えられた。この時のターゲットマシンは36ビットのワードマシンだったので、整数 値は235 の大きさの範囲で定義されていた。また、実数 の精度は227 、倍精度実数の精度は254 までだった。FORTRAN IVは1962年にIBM 7030 (通称ストレッチ)用がリリースされ、後にIBM 7090 版とIBM 7094 版がリリースされた。
1965年には国家規格 であるANSI X3.4.3 FORTRANに準拠した。
American Standards Association (現ANSI )がFortranの米国規格を委員会で制定するようになったことはFortranの歴史の要である。1966年 に2つの異なる言語が制定された。一つは当時既にデファクトスタンダード であったFORTRAN IVを基にしたFORTRAN であり、もう一つはFORTRAN IIを基にして機種依存部分を取り除いたBasic FORTRAN である。最初に制定されたFORTRANの規格は後にFORTRAN 66 と呼ばれた。
FORTRAN 66 規格のリリース後、コンパイラ・ベンダーは多くの拡張を"標準Fortran"に導入し、1966の規格の改訂を始めるようにANSIを促した。この改訂は1977年に制定され、最終的な改訂案は1978年4月に新しいFORTRAN標準として承認された。この新しい標準はFORTRAN 77 として知られ、FORTRAN 66後の多くの変更を追加し、多くの重要な機能を加えた:
ブロックIF
とEND IF
ステートメント、オプショナルなELSE
とELSE IF
ステートメント。改善された言語サポートのための構造化プログラミング 。 DOループ機能拡張、パラメータ記述を含む、負の増分とゼロのトリップ・カウント(これ以前のFORTRANではDOループは繰り返しを必ず1回は行うことになっていたのを廃止した)。 改良されたI/OのためのOPEN
,CLOSE
, とINQUIRE
文。 ダイレクト-アクセス ファイル I/O。 IMPLICIT
文。CHARACTER
型。文字の入出力と処理のための大幅な増補。(以前は、文字のデータを整数や実数などの変数や配列に格納して処理をしていた)。PARAMETER
文。定数を指定するためのステートメント。SAVE
文。明示的にローカル変数を永続的に指定する。内部関数のための総称関数。 ASCII コードの文字順序に基づいた、文字列比較のための内部命令セット(LGE, LGT, LLE, LLT
)。この規格の改訂において、多くの機能は除去されるか変えられて、以前の標準に合致していたプログラムの多くはおそらく無効になった。この時点で除去はX3J3の代替だけが許容された。だからコンセプト "不賛成"はANSI標準においては利用できなかった。しかし、コンフリクトリストの24アイテム(Appendix A2 of X3.9-1978を見よ)ループホールスとパスロジカルケースは以前の標準規格から許容されたが、しかし滅多に使用されない。少数の機能は慎重に除去された。
文字列定数をプログラム中で記述するためのホレリス記法、すなわち: GREET = 12HHELLO THERE! FORMAT 記述子におけるH編集(ホレリス・フィールド)の読み込み(以前はH編集子で確保された文字列データの領域には入力文で文字列を読み込めた(データが上書きされる)そのFORMAT文を使って出力すると,書き換えられたデータが使われて出力される)。 配列の定義時の添字の範囲を超えたアクセス。 DIMENSION A(10,5)
Y= A(11,1)
DOループの途中でいったん外に飛び出して後で戻る("エクステンデット・レンジ"(DOループの拡張範囲)として知られる)。 以前の規格では文字型(CHARACTER型)がなかったので、文字データや文字列データを整数や実数の変数や配列に格納することが行われていたが、Fortran77ではそれを廃止した。 一般にFortran 90 として知られている規格は、大幅に発表が遅れたもののFORTRAN 77の正当な継承者であり、最終的に1991年にISO規格、1992年にANSI規格としてリリースされた。この抜本的な改訂では1978年のFORTRAN 77規格制定からのプログラミング技術における大幅な変化を反映するために、以下の多くの新しい機能が加えられた
フリーフォームソース入力と小文字のFortranキーワード。プログラム本文を7桁目から書かなくても良く、80桁の制限も無い。 abcdefghijklmnopqrstuvwxyz12345 = 0.0e0 配列演算(あるいは部分配列演算)。これは数学とエンジニアリングの計算を大幅に簡素化する。 全部または部分マスクされた、配列の指定と配列の表現、例えば、 x ( 1 : n ) = r ( 1 : n ) * cos ( a ( 1 : n )) integer :: a ( 10 ) real ( 8 ) :: b ( 10 ) a = f ( x ) where ( a > 0 ) b = - 1.0 elsewhere b = 1.0 end where 配列の定数と式による初期化。 ユーザ定義の配列を返す関数と配列コンストラクタ。 function sample ( x ) result ( y ) !配列yを返す integer , parameter :: nn = 4 real :: y ( nn ) = ( / 1 , 2 , 3 , 4 / ) !配列のコンストラクタと定数による初期化 !... end function sample 再帰手続き。 モジュラープログラム、すなわち関係するサブルーチンとデータのグループ化と、他のプログラムユニットで使用、モジュールの内の指定した部分だけの使用を含む。 interface文を使用してコンパイル時に型がチェックされる大幅に改善された引数渡しメカニズム。 module my_lib !モジュール interface function sample ( x ) real , intent ( in ) :: x (:) !コンパイル時に変数の型の整合性とデータの入出力方向がチェックされる。 !... end function sample end interface end module ユーザー定義総称関数(同じ関数名で、引数の数とタイプを自動的に識別して異なる内部関数を呼び出す)のインターフェース。 演算子('+'、'-'、など)のオーバーローディング(多重定義)。 派生型データタイプ。 変数のデータタイプと他の属性を指定するための新たなデータタイプの宣言シンタックス、 allocatable属性と allocateとdeallocate文を用いたダイナミックメモリアロケーション。 real , allocatable :: temp (:) allocate ( temp ( nn )) deallocate ( temp ) ポインター属性とポインターアサイン、nullify文によるダイナミックデータ構造の扱い。 do 文の end do による終端。 do while 文 exit文によるdo文からの脱出と、cycle文によるdo文の次の繰り返しへの移行。 do i = 1 , nn if ( b ( i ) /= 0 ) then a ( i ) = 1.0 / b ( i ) else exit end if end do select case ( sw ) case ( '++' ) a = a + 1 case ( '--' ) a = a - 1 case default a = 0 end select ユーザがコントロールできる数値精度の移植性の良い指定方法。 新しく導入された内部関数。それに伴い従来の文関数(statement function)は廃止予定に。 以前のバージョンとは異なり、Fortran 90は、何の機能も削除しなかった。(Appendix B.1には、「この規格の、削除した機能のリストは空である。」と記載されている)つまり、FORTRAN 77に準拠したプログラムは、Fortran 90にもまた準拠している。そして、両方の規格で、その動作が定義づけられた項目は使用可能でなければならない。一部の機能はFortran 95で「削除」され、また機能の小さな部分は「時代遅れ」と認定されて将来の規格で除去されることが予定された。
削除または時代遅れとされた機能の一覧 時代遅れの機能 例 状態 / Fortran 95での予定 算術 IF 文 非-整数型の DO パラメータ あるいは制御変数 削除 DOループの末端の共有 もしくは END DO あるいはCONTINUE以外の末端 ブロック外部からのEND IFへのブランチ
66 GO TO 77 ; . . . IF ( E ) THEN ; . . . 77 END IF 削除 Alternate return PAUSE文 削除 ASSIGN statement と assigned GO TO statement 100 . . . ASSIGN 100 TO H . . . GO TO H . . . 削除 Assigned FORMAT specifiers 削除 H 編集子 削除 計算 GO TO 文 (時代遅れ) 文関数 FOIL ( X , Y ) = X ** 2 + 2 * X * Y + Y ** 2 (時代遅れ) DATA 文 among executable statements X = 2 7.3 DATA A , B , C / 5.0 , 1 2.0 . 1 3.0 / . . . (時代遅れ) CHARACTER* の形式による文字型宣言 CHARACTER * 8 STRING ! Use CHARACTER(8) (時代遅れ) Assumed character length functions 固定長形式のソースコード * 第1カラムが * あるいは ! あるいは C である行は注釈行. C 第6カラムが空白でなければ継続行.文番号は先頭から5桁目までに書く。
program helloworld print * , "Hello, world." end program helloworld 地球シミュレータ スーパーコンピュータ Fortran 95 は、マイナーな改訂版である。ほとんどは、Fortran 90規格の、いくつかの大きな問題を解決するためのものである。それにもかかわらず、Fortran 95にもまた年号が付加されている。そのことは、Fortranの拡張として定義される並列言語、HPF(High Performance Fortran :ハイ・パフォーマンスFortran)の機能の一部導入によることは明白である。なお、本格的なHPFは、地球シミュレータ 等で使用されている[ 2] 。
ベクトル化のためにforall
と階層化されたwhere
が追加された。 ユーザ定義のpure
とelemental
手続きが追加された。 派生型コンポーネントのデフォルト初期化、これにはポインターの初期化が含まれる、が追加された。 データオブジェクトの初期化表記を使うための拡張が追加された。 allocatable
配列はその有効域から出る時には自動的にdeallocate
されるということの明確な定義が追加された。多くの内部手続は拡張された。たとえばmaxloc
内部手続にdim
引数が追加された
Fortran 90では時代遅れとされた機能のいくつかについては、Fortran 95では削除された。
REAL
とDOUBLE PRECISION
変数を使用したDO
文は削除された。END IF
文へのブロック外部からの飛び込みは削除された。PAUSE
文は削除された。ASSIGN
とASSIGN
型GOTO
文、ASSIGN
書式指定は削除された。H
編集子(いわゆるホレリス定数(en:Hollerith constant ))は削除された。Fortran 95への重要な追加は、一般にはAllocatable TR として知られる、ISO technical report、TR-15581: Enhanced Data Type Facilities である。この仕様は、Fortran 2003準拠のFortran コンパイラより前に、ALLOCATABLE
配列の強化した用法を定義した。そのような用法は、手続のダミー引数リストとしての派生型コンポーネントALLOCATABLE
配列と、関数の返却値を含む。ALLOCATABLE
配列は、POINTER
-ベース・配列よりも好ましいものである。なぜならば、ALLOCATABLE
配列では、有効域から出るときに、Fortran 95システムによる自動的なdeallocateを保証しているので、メモリリークを起こす心配がないからである。
エイリアシング は配列の参照において最適化の障害にならず、Fortranコンパイラがポインタ-ベース・配列よりも高速なコードを生成することを可能にする。
他の重要なFortran 95への追加は、ISO technical reportTR-15580: 浮動小数点例外処理 である。一般にはIEEE TRとして知られており、この仕様はIEEE 浮動小数点演算と例外処理を定義する。
必須のベース言語(ISO/IEC 1539-1:1997に定義)以外に、Fortran 95言語も以下の2つのオプショナルなモジュールを含む。
可変文字列(ISO/IEC 1539-2 : 2000) 条件付コンパイル(ISO/IEC 1539-3 : 1998) 両者は、マルチパート国際標準を構成する(ISO/IEC 1539)。規格の開発者は、「オプショナル・パートは必要なものを完備した機能を記述している、それは多くのコンパイラの実装者と利用者から要求されてきたものである。しかし、それらは、全てのFortran標準に合致するコンパイラは十分な一般性を持たないと考えられていた。それにもかかわらず、もし標準に合致したFortranがそのようなオプションを提供するならば、『それらの機能は、標準規格の適切なパートに記述に従って提供されなければならない。』」と述べている。
Fortran 2003 はメジャーな改訂であり、たくさんの新しい機能を導入した。 Fortran2003における新しい機能の包括的なサマリーは、Fortran Working Group (WG5)のオフィシャルWebサイトから得ることができる[ 8] 。
この記事によれば、このバージョンが含む大幅な強化は以下の通りである。
派生タイプの強化:使用法が進歩したコントロール、パラメータ化された派生型 、改善された構造化コンストラクタ とファイナライザー。 オブジェクト指向プログラミングのサポート:オブジェクト指向 のタイプの拡張とインヘリタンス 、ポリモーフィズム 、ダイナミック・タイプアロケーション、タイプ-バウンド・プロセジャー。 データマニピュレーション・エンハンスメント:allocatable コンポーネント (TR 15581の組み入れ)、遅延タイプパラメータ、ボラタイル・アトリビュート、ポインタ-の強化、初期化拡張、内蔵関数の強化。 入出力の強化:非同期転送、ストリーム・アクセス、派生タイプのためのユーザ定義転送オペレーション、ユーザ指定のフォーマット変換時の丸めの制御、接続前のユニットの名前付定数、FLUSH
ステートメント、キーワードの規則化、エラーメッセージへのアクセス。 プロセジャーのポインター。 IEEE 浮動小数点と浮動小数点例外処理のサポート(TR 15580の組み入れ)。 C言語との相互運用。 国際的な慣習のサポート:ISO 10646(国際文字セット)の4バイト文字の利用、数値形式の入出力でのデシマル(.)とコンマ(,)の選択。 ホスト・オペレーティングシステムとの一体化の強化。コマンドライン引数、環境変数とプロセッサーエラーメッセージ。 Fortran 2003 への重要な追加は、ISO technical report TR-19767である。
Fortranにおけるモジュール機能の強化。このレポートは、submodules を提供する。これは、FortranのモジュールをよりModula-2 言語のモジュールに近づける。これらは、Ada言語のプライベート・チャイルド・サブユニットに似ている。これは分離したプログラムユニットとして表現すべきモジュールの仕様と実装を可能にし、大規模なライブラリのパッケージ化を改善し、インターフェース定義を公開しても企業秘密を保持することを可能にし、コンパイレーション・カスケードを防ぐ。
最新の規格であり一般にはFortran 2008として知られているISO/IEC 1539-1:2010は2010年9月に承認された[ 9] 。Fortran 95と同様に、これはマイナー・アップグレードである。Fortran 2003の明確化と訂正と共に、新しい特長も導入された。新しい特長は、以下を含む
モジュール構造の追加、ISO/IEC TR 19767:2005にとってかわるサブモジュール。 Co-array Fortran ―並列計算モデル。do concurrent―相互依存のないループを並列に実行するDOループ。 メモリ上のレイアウトを指定するためのCONTIGUOUS(隣接)属性。 コンストラクト・スコープ付のオブジェクトの宣言を含むブロック・コンストラクト。 派生タイプにおける再帰的ポインターの代替としての再帰的アロケータブル・コンポーネント。 ファイナル・ドラフト・スタンダード(FDIS)は、ドキュメントN1830として利用できる[ 10] 。
Fortran 2008における重要な追加は、ISO テクニカルスペシフィケーション(TS) 29113のFortranにおけるC言語とのより高いインターオペラビリティであり[ 11] [ 12] 、2012年5月のISOの承認に向けてまとめられた。C言語の配列へのFortranアクセスに関してタイプとランクを無視する仕様が加えられた。
Fortran 2018の最新版は、以前はFortran 2015と呼ばれていた[ 13] 。大きな改訂が行われ、2018年11月28日にリリースされた[ 14] 。
Fortran 2018には、それ以前に公開された以下の2つの技術仕様が含まれている。
ISO/IEC TS 29113:2012 Further Interoperability with C[ 15] ISO/IEC TS 18508:2015 Additional Parallel Features in Fortran[ 16] 追加の変更と新機能には、ISO/IEC/IEEE 60559:2011(2019年時点のIEEE浮動小数点数仕様 の最新版)のサポート、16進の入出力、IMPLICIT NONEの拡張など、様々な変更が含まれている[ 17] [ 18] [ 19] [ 20] 。
Fortran 2023 (ISO/IEC 1539-1:2023) は、2023年11月に発行された[ 21] 。対応するJIS規格は現在のところ発行されていない。Fortran 2023はFortran 2018のマイナーな拡張であり、Fortran 2018の誤りまたは欠落の修正と、いくつかの小さな機能の追加に重点が置かれている。非公式な説明が、Metcalfら (2023) の書籍[ 22] にある。
Fortran 202Y と仮称されている次の Fortran 規格は、2028年ごろに発行される見通しであり、ISO/IEC JTC 1/SC 22/WG 5 で具体案の検討が進められている[ 23] 。日本では、情報処理学会 情報規格調査会 SC 22/Fortran WG小委員会を中心に、WG 5 に進言するためのオープンな議論が行われている[ 24] 。
1968年にBASIC の作者等によって書かれた専門雑誌の記事でもすでに「旧式の(old-fashioned)プログラミング言語」と記述されていたが[ 25] 、Fortranは現在でも数十年に渡って使用されており、特に科学や工学のコミュニティでは、Fortranで書かれたソフトウェアが日常的に幅広く利用されている[ 26] 。ジェイ・パサコフ (英語版 ) は1984年に「物理学と気象学の学生はFORTRANを必ず学ぶ必要がある。大部分の成果がFORTRANで書かれており、科学者たちがPascalやModula-2などの他の言語に移行する可能性は極めて低い。」と書いている[ 27] 。1993年、Cecil E. Leith は、FORTRANを「科学計算の母語」であると評し、他の言語によって置き換えられる可能性は「永遠の希望であり続けるだろう」と述べている[ 28] 。
FORTRAN 66以降、ISO 、ANSI 、JIS で仕様が制定されている。Fortranの言語仕様は、年代によってかなり変化して来ている。他のプログラミング言語 で実装 された構造化プログラミング の機能などがどんどん取り入れられて来ているからである。
1966年にANSI X3.9-1966が制定され、JISとしては1967年に制定された。この時は、以下の3つの水準ごとに独立したJISが制定された。共通したタイトルは「電子計算機プログラム用言語 FORTRAN」だった。以下に水準間のおおよその違いを記す。
JIS C 6201(水準7000)複素数 型と倍精度 実数 型があるDATA文 と初期値設定副プログラム(BLOCK DATA文)がある FORMAT文中の欄記述子にD,G,Aが定義できる 変数 、配列 手続き名は最大6文字 JIS C 6202(水準5000) JIS C 6203(水準3000)変数、配列、手続き名は最大5文字 論理型 のデータ、論理式、関係式、論理IF文 は使えない。型 宣言文がない。EXTERNAL文がない。 3次元 の配列がない。 名前付きCOMMON文がない。 文番号は4桁 COMMON文に配列宣言が使えない。 整合配列がない。 なお、1971、1976年に若干の改訂がなされている。
国際標準化機構(ISO )は、米国規格協会(ANSI )の X3J3 が作成した FORTRAN の規格 X3.9-1978 を ISO 1539-1980 として定めた。基本水準(subset language)と上位水準(full language)の2種類の水準からなっていた。これを基にして、同じく2水準の JIS C 6201-1982 が制定された。なお、1987年 に、JISの分類が変更になり、この規格は JIS X 3001-1982 となった。内容には変更はない。
FORTRAN 77を基に他の言語の特徴を組み込み、言語仕様を近代化しようとしたが、そのため仕様がなかなか決まらず、1991年に ISO/IEC 1539:1991として制定された。JISではそれを受け、JIS X 3001:1994が制定された。
Fortran 90 から規格上の言語の呼称が頭文字のみを大文字とした“Fortan”に変更された[ 29] 。
JIS X 3001:1998は,Fortran 95と通称される規格を技術的内容および構成を記述言語以外は変更することなく作成された。該規格は一部例外を除きJIS X 3001 1-1994の上位互換拡張である。
JIS X 3001:2009は,Fortran 2003と通称される規格を技術的内容および構成を記述言語以外は変更することなく作成された。当該規格は一部の例外を除いてJIS X 3001-1:1998の上位互換拡張である[ 30] 。
対応するJISは制定されなかった。
JIS X 3001-1:2023(2023年現在の最新改正版)は,Fortran 2018と通称される規格を技術的内容および構成を記述言語以外は変更することなく作成された[ 31] 。
Fortranは、情報処理 分野で広く使われていたため、学校や会社の教育(情報処理技術者向け教育)で利用された。教育向けには、より詳細なエラー情報を出すための拡張がWaterloo大学でWATFOR(後にWATFIV)コンパイラ として実装された。この実装は日本の大学でも使われた。
Fortranは科学技術計算用の言語なので、スーパーコンピュータ でのプログラミング言語 としてよく用いられる。実際、多くのスーパーコンピュータでベンダーが主に注力して提供されている言語は、C/C++およびFortranである。
C言語 と比較すると、Fortranはスタック 等を使わずに、コンパイル時に静的に記憶領域を確保するのが基本であった。そのため、自由度が高くあらゆる状況を想定しなければならないC言語 と比べるとコンパイラ はコードを最適化しやすいという利点がある。
Fortranの主な用途である科学と技術用の計算では配列を用いた演算が基本であり、ベクトル型スーパーコンピュータ は、Fortranを使ったプログラム で使用することが多い。そこで、スーパーコンピュータの高速演算機能を有効に使うための工夫がなされた。その1つの例としては、自動ベクトル化 機能である。ベクトル 型のスーパーコンピュータは、多くの演算を同時に行うベクトル演算機能がハードウェア で提供されている。この機能を有効に使うために、FortranのDOループ をベクトル演算装置で演算させるために、自動的にベクトル命令 にする機能が提供された。また、DOループ内のベクトル演算に適さないものをDOループ外に追い出す機能などもある。たとえば、
DO I = 1 , N A ( I ) = B ( I ) * C ( I ) END DO のようなDO構文は、ほとんどの場合、1から数個のベクトル演算命令にコンパイル される。そのほかにもDOループの中にIF文を含むような例、たとえば、
DO I = 1 , N IF ( A ( I ) <= LIMIT ) THEN B ( I ) = A ( I ) * Z END IF END DO のようなものもベクトル化できる場合がある。これは、いったんAの各要素がLIMIT以下かどうかを示すマスクベクトルを作成して、Aという配列(=ベクトル)に、変数Zの値を乗じるとき、マスクベクトルを参照するベクトル演算を行うことで、DOループをベクトル化する。
このような作業は、すべてコンパイラ が行い、利用者にできるだけ負担をかけないようにしている。しかし、より高度なベクトル化を行うために、最適化 を行う支援ツールが用意されている場合もある。
コンピュータ上で日本語 の文字を扱えるようになると、FORTRANでも日本語を扱う需要が出てきた。そのため、各社(メインフレーム を作成していたメーカ)では、独自に言語仕様に日本語の文字を扱えるように拡張した。そのため、各社で日本語の扱い方が異なる事態になった。そこで、JEIDA では1985年に、JEIDA-42で日本語FORTRANを策定した。
FORTRANで日本語の文字を扱う場合、識別子である変数 名、仮引数名、プログラム名、関数名、サブルーチン名、共通ブロック名等には日本語の文字は使えず、データとしての日本語の文字列を扱うための専用の型(日本語型)、日本語の文字列を入出力するためのFORMAT文の編集子の拡張が行われた。
FORTRAN 77が登場する前にいろいろと作られたプリプロセッサ はFortranをベースとしてよりプログラムが読みやすく書きやすい言語の形式を提供するために広く使われた。プリプロセッサで処理されたコードは、標準のFORTRANコンパイラを備えた任意のマシンに対してコンパイルすることができる利点を持つ。これらのプリプロセッサは通常、構造化プログラミング、6文字よりも長い変数名、追加のデータ型、条件付きコンパイル、さらにはマクロ機能などをサポートしていた。
ポピュラーなプリプロセッサとしてFLECSとiftran、MORTRAN、SFtran、S-Fortran、Ratfor 、Ratfivがあった。例えば、RatforとRatfivはCライクな言語を実装して、標準的なFORTRAN 66コードを出力した。
LRLTRANは、ローレンス放射線研究所で、ベクトル演算および動的な記憶、システムのプログラミングをサポートする他の拡張機能を提供するために開発され、ディストリビューションにはLTSSオペレーティングシステムが含まれていた。Fortran 95規格は、任意の条件付きコンパイルの機能を定義するオプションパート3を備えている。この機能は、しばしば 『CoCo』と呼ばれている。SIMSCRIPTは、大規模な離散システムのモデリングとシミュレーションのためのアプリケーションに特化したFortranのプリプロセッサである。
また多くのFORTRANコンパイラは、Cプリプロセッサのサブセットを取り込んだ。Fortran言語の進歩にもかかわらず、プリプロセッサは条件付きコンパイルとマクロ置換のために使用され続けている。
プログラミング言語Fは、FortranのEQUIVALENCE文などの、冗長、非構造化、非推奨な機能を削除したFortran 95のクリーンなサブセットとして設計された。言語FはFortran 90で追加された配列演算の機能を使い、FORTRAN 77とFortran 90で追加された制御文を用い、構造化プログラミングのために廃止された制御文を削除した。設計者は言語Fを 『特に教育や科学技術計算に適した、構造化された配列プログラミング言語である。』 と述べている[ 32] 。しかしサブセット言語であるから,旧来のあるいはFで除かれた機能を含むFortranのソースコードは受け付けないため、実務用には普及しなかった。
HPF(High Performance Fortran )というFortran拡張系の言語もあるが、これもほぼ廃れた。
コンパイラディレクティブをFortran言語のソースコードに付加することでスレッド並列化をコンパイラに対して明示的に指示する、OpenMPやOpenACCなどの一種の言語拡張が近年盛んである。CUDA Fortran[ 33] もNvidia社のGPUに特化してFortran言語の仕様をベースにして独自拡張されたものである。
フリーソフト 商用ソフト Absoft Pro Fortran Intel Visual Fortran NAG Fortran Lahey Fortran 無償で利用できるコンパイラ GNU Fortran (GFortran )- 自由なソフトウェア(Free Software)のGNU コンパイラ・コレクションの1つ。現在 Fortran 95 に2003や2008の仕様の一部を追加。 G95 Open WatcomOpen Watcom AMD のAOCC compiler (C/C++/Fortran) - Zen アーキテクチャ-以降のみ対応。 Intel Fortran Composer XE 2011 for Linux - 非商用利用に限り無償で使用可 (ifort) . Intel oneAPI に含まれる LLVM ベースのコンパイラ ifx への移行により廃止予定。 Intel oneAPI に含まれているIntel Fortran コンパイラ ifx (LLVM ベース)。 Oracle developer studio - 開発向けに無期限の無償ライセンス NVIDIA HPC SDK - ライセンス契約への同意が必要 ※ nvfortran, CUDA Fortran を含む 有償の商用コンパイラ Absoft Pro Fortran Intel Visual Fortran NAG Fortran Open64 PGI Fortran ※ NVIDIA HPC SDKへの移行により販売終了。 un Studio ^ 陰山聡『Fortran90/95入門』、なぜFortran90/95か? ^a b HPF推進協議会 (HPFPC) ^ ISO/IEC JTC1/SC22/WG5-N489 (2 March 1990).Resolutions . London WG5 Meeting, February 26 - March 2, 1990.wg5-fortran.org . ISO/IEC JTC 1/SC 22/WG 5. 2024年3月6日閲覧 。 ^ 牛島省 2020 , はじめに.^ History of FORTRAN and FORTRAN II — Software Preservation Group ^ Fortranの開発者ジョン・バッカスが死亡 - Gadgets - MSNBC.com ^ 現代の我々がいう所の言語処理系のパスではないhttps://ibm-1401.info/1401-IBM-Systems-Journal-FORTRAN.html を参照 ^ Fortran Working Group (WG5) .It may also be downloaded as aPDF file orgzip
ped PostScript file , FTP.nag.co.uk^ N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology - Programming languages -Fortran - Part 1: Base languageftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1836.pdf (PDF , 101 KiB) ^ N1830, Information technology, Programminglanguages, Fortran, Part 1: Base languageftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdf (PDF , 7.9 MiB) ^ ISO page toISO/IEC DTS 29113, Further Interoperability of Fortran with C ^ Draft of the Technical Specification (TS) 29113ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdf (PDF , 312 kiB) ^ “Doctor Fortran in "Eighteen is the new Fifteen" ”. Software.intel.com. 2017年11月20日 閲覧。 ^ “Fortran 2018 ”. ISO. 2018年11月30日 閲覧。 ^ “Further Interoperability with C ”. ISO. 2017年11月20日 閲覧。 ^ “Additional Parallel Features in Fortran ”. ISO. 2017年11月20日 閲覧。 ^ “The New Features of Fortran 2015 ”. ISO. 2017年6月23日 閲覧。 ^ “Doctor Fortran in "One Door Closes" ”. Software.intel.com. 2015年9月21日 閲覧。 ^ “Doctor Fortran Goes Dutch: Fortran 2015 ”. Software.intel.com. 2014年11月19日 閲覧。 ^ PL22.3; WG5 (2018年10月9日). “Fortran 2018 Interpretation Document ” (pdf). J3. 2024年2月28日 閲覧。 内部資料。^ “Fortran 2023 ”. JTC1/SC22/WG5 . ISO. 2024年2月28日 閲覧。 ^ Metcalf, Michael; Reid, John; Cohen, Malcolm; Bader, Reinhold (2023). Modern Fortran explained : incorporating Fortran 2023 (Sixth ed.). Oxford. ISBN 978-0-19-887657-1 . OCLC 2023946356 . https://global.oup.com/academic/product/modern-fortran-explained-9780198876588?prevNumResPerPage=20&prevSortField=9&q=metcalf&start=20&lang=en&cc=de ^ “Documents ”. JTC1/SC22/WG5 . ISO. 2024年2月28日 閲覧。 ^ 情報処理学会 情報規格調査会 SC 22/Fortran WG小委員会 (2024年1月24日). “Fortran 202Y規格について議論しよう ”. GitHub . 2024年2月28日 閲覧。 ^ Kemeny, John G.; Kurtz, Thomas E. (11 October 1968). “Dartmouth Time-Sharing” . Science 162 (3850): 223–228. doi :10.1126/science.162.3850.223 . http://dtss.dartmouth.edu/sciencearticle/index.html . ^ Phillips, Lee. “Scientific computing's future: Can any coding language top a 1950s behemoth? ”. Ars Technica. 2014年5月8日 閲覧。 ^ Pasachoff, Jay M. (1984年4月). “Scientists: FORTRAN vs. Modula-2” . BYTE : pp. 404. https://archive.org/stream/byte-magazine-1984-04/1984_04_BYTE_09-04_Real-World_Interfacing#page/n403/mode/2up 2015年2月6日 閲覧。 ^ Galperin, Boris (1993). “26”. Large Eddy Simulation of Complex Engineering and Geophysical Flows . London: Cambridgey. p. 573. ISBN 978-0-521-43009-8 ^ ISO/IEC 1539 : 1991 (E) Fortran , ISO/IEC, (1991-07-01), https://wg5-fortran.org/N001-N1100/N692.pdf ^ JIS X 3001-1 :2009「プログラム言語Fortran――第1部: 基底言語」 (日本産業標準調査会 、経済産業省 )^ JIS X 3001-1 :2023「プログラム言語Fortran―第1部: 基底言語」 (日本産業標準調査会 、経済産業省 )^ F Programming Language Homepage ^ NVIDIA CUDA Fortran Programming Guide Jeanne C. Adams, Walter S. Brainerd, Jeanne T. Martin: "Fortran 95 Handbook: Complete Iso/Ansi Reference", MIT Press, 1997年。ISBN 978-0262510967 Jeanne C. Adams, Walter S. Brainerd, Richard A. Hendrickson, Richard E. Maine, Jeanne T. Martin, Brian T. Smith: "The Fortran 2003 Handbook : The Complete Syntax, Features and Procedures", Springer, 2009.ISBN 978-1-84628-378-9 Ed Akin: "Object-Oriented Programming via Fortran 90/95", Cambridge Univ Press, 2003年.ISBN 978-0-521-52408-7 . Sujit Kumar Bose: "Numerical Methods of Mathematics Implemented in Fortran", Springer, 2019. Walter S. Brainerd, Charles H. Goldberg, Jeanne C. Adams: "Programmer's Guide to Fortran 90" (3rd Ed.), Springer, 1996. Walter S. Brainerd: "Guide to Fortran 2003 Programming", Springer, 2009.ISBN 978-1-84882-542-0 Walter S. Brainerd: "Guide to Fortran 2008 Programming", 2nd Ed., Springer, 2015.ISBN 978-1447167587 Ian Chivers and Jane Sleightholme: "Introduction to Programming with Fortran", 4th Ed., Springer, 2018,ISBN 978-3-319-75501-4 Norman S. Clerman, Walter Spector: "Modern Fortran: Style and Usage", Cambridge University Press, 2012.ISBN 978-0-521-51453-8 Milan Curcic: "Modern Fortran: Building efficient parallel applications", Manning Publications, 2020.ISBN 978-1617295287 . ※ Coarrayについての例解説あり。 Mark Jones Lorenzo: "Abstracting Away the Machine: The History of the FORTRAN Programming Language (FORmula TRANslation)", Independently published, 2019.ISBN 978-1082395949 Arjen Markus: "Modern Fortran in Practice", Cambridge Univ. Press, 2012.ISBN 978-1-13908479-6 M. Metcalf, J. Reid 『詳解Fortran 90』bit 別冊、共立出版 、1993年。 - 原著 "Fortran 90 Explained"、Oxford Univ. Press、1990年。 Michael Metcalf, John Reid, Malcolm Cohen: "Modern Fortran Explained", Numerical Mathematics and Scientific Computation, 4th Ed., Oxford Univ Press, 2011.ISBN 978-0199601417 Michael Metcalf, John Reid, Malcolm Cohen: "Modern Fortran Explained : Incorporating Fortran 2018", 5th Ed., Oxford Univ. Press, 2018.ISBN 978-0198811886 Michael Metcalf, John Reid, Malcolm Cohen, Reinhold Bader: "Modern Fortran Explained: Incorporating Fortran 2023", 6th Ed., Oxford Univ. Press, (2023年12月7日),ISBN 9780198876571 Valmer Norrod, et al: "A self-study course in FORTRAN programing - Volume I - textbook ", Computer Science Corporation El Segundo, California, 1970. NASA(N70-25287). Valmer Norrod, Sheldom Blecher, and Martha Horton: "A self-study course in FORTRAN programing - Volume II - workbook ", NASA CR-1478, Vol. II, 1970. NASA(N70-25288). Robert W. Numrich: "Parallel Programming with Co-arrays", Chapman & Hall/CRC, (2018年9月10日),ISBN 9781439840047 . ※Co-Arrayについての解説書 Gregory Ruetsch and Massimiliano Fatica: "CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming", Morgan Kaufmann, (2013年9月17日),ISBN 978-0124169708 Gregory Ruetsch and Massimiliano Fatica: "CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming", 2nd Ed., Morgan Kaufmann, (2024年7月26日),ISBN 978-0443219771 低水準言語 高水準言語
1950年代 1960年代 1970年代 1980年代 1990年代 2000年代 2010年代
架空の言語