1 歴史

1.1 開発の背景

FORTRAN(Formula Translation)は、1950年代にIBM社が開発した科学技術計算向けの高水準プログラミング言語である。当時、プログラムはアセンブリ言語や機械語で記述されるのが一般的であり、計算科学の進展に伴い、より人間に読みやすく、効率的に記述できる言語が求められていた。IBM社のジョン・バッカス率いるチームは、数式を直接記述できる言語を設計し、1957年に最初のコンパイラをリリースした。この開発はプログラミング言語史における画期的な出来事であり、高水準言語の実用性証明した。

1.2 初期のバージョン(FORTRAN I〜IV)

FORTRAN I(1957年)は、IBM 704向けに開発された最初の実装であり、代入文、DOループ、IF文、入出力機能などを備えていた。その後、FORTRAN II(1958年)ではサブルーチンと関数の独立コンパイルが導入され、FORTRAN III(1958年、非公開)を経て、FORTRAN IV(1962年)では論理IF文、DATA文、COMMONブロックなどが追加され、言語体系が大きく拡充された。FORTRAN IVは後の標準化の基盤となった。

1.3 標準化の流れ

FORTRANの普及に伴い、各ベンダーが独自の拡張を施したため、互換性の問題が顕在化した。1966年、米国規格協会(ANSI)は初の標準規格「FORTRAN 66」(X3.9-1966)を制定した。その後、1978年に「FORTRAN 77」(X3.9-1978)が公開され、構造化プログラミングの要素が強化された。1990年代以降は国際標準化機構(ISO)と国際電気標準会議(IEC)が主導し、Fortran 90、95、2003、2008、2018、2023と継続的に規格更新されている。

2 言語の特徴

2.1 構文の基本

FORTRANの構文は、1950年代のパンチカード文化の影響を強く受けており、固定形式(固定書式)が伝統的に用いられてきた。行の先頭に特定のカラムが割り当てられ、1〜5桁目は文番号、6桁目は継続行、7〜72桁目は実コード、73〜80桁目はコメントや識別用とされていた。Fortran 90以降は自由形式(フリーフォーマット)が導入され、行の長さやカラム位置に関する制約が大幅に緩和された。コメントは「!」で始まり、文の区切りは行単位または「;」によって行われる。

2.2 データ型と宣言

FORTRANは静的な型システムを持ち、主要なデータ型として整数型(INTEGER)、実数型(REAL、倍精度のDOUBLE PRECISION)、複素数型(COMPLEX)、論理型(LOGICAL)、文字型(CHARACTER)が用意されている。変数はIMPLICIT宣言(暗黙の型宣言)により、変数名の先頭文字がI〜Nの場合は整数、それ以外は実数とみなされる歴史的な規則があるが、IMPLICIT NONE文を使用することで明示的な宣言を強制できる。また、PARAMETER文による定数定義や、構造体に相当する派生型(TYPE)もFortran 90以降で利用可能である。

2.3 配列操作とDOループ

配列は多次元配列をネイティブにサポートし、配列全体に対する一括演算(配列演算)が可能である。例えば、「A = B + C」は要素ごとの加算を意味する。DOループは伝統的な反復制御構文であり、DO変数、初期値、終了値、増分を指定して繰り返し処理を行う。Fortran 90以降では、DO WHILEやDO CONCURRENT(並列実行可能なDOループ)が追加された。また、WHERE文やFORALL文によるマスク付き配列操作も提供されている。

2.4 モジュールとインタフェース

Fortran 90で導入されたモジュール(MODULE)は、変数、定数、型定義、サブルーチン、関数をひとまとめにし、他プログラム単位からの参照を可能にする。モジュールは明示的インタフェース(INTERFACEブロック)を自動生成し、サブルーチンや関数の引数の型チェックをコンパイル時に行える。これにより、従来のCOMMONブロックや外部サブルーチンに比べて安全性保守性が大幅に向上した。INTERFACEブロックは外部手続きとの互換性のために明示的に記述することもできる。

3 主要なバージョンと規格

3.1 FORTRAN 66

1966年にANSIが制定した初の標準規格「FORTRAN 66」(X3.9-1966)は、FORTRAN IVをベースとしており、基本入出力、算術IF、DOループ、COMMONブロック、EQUIVALENCE文などを標準化した。しかし、構造化プログラミングの概念は欠如しており、IF-THEN-ELSEも存在しない。この規格により、FORTRANは広く普及する基盤を得た。

3.2 FORTRAN 77

1978年に制定された「FORTRAN 77」は、構造化プログラミングを大きく推進した規格である。IF-THEN-ELSE文(ブロックIF)の導入、文字型の正式採用、CHARACTER変数と文字列操作の充実、DOループの拡張(DO WHILE)、PARAMETER定数の導入、IMPLICIT NONE文の追加などが主な特徴である。また、ファイル入出力の機能が強化され、OPEN、CLOSE、INQUIRE文が標準化された。この規格は長年にわたって広く使われ、多くのレガシーコードの基盤となっている。

3.3 Fortran 90/95

Fortran 90(1991年制定)は、言語に大きな変革をもたらした。固定形式から自由形式への移行、配列演算とWHERE文、動的配列(ALLOCATABLE)、モジュールと明示的インタフェース、再帰手続き、構造体(派生型)、ポインタ、新しい制御構造(SELECT CASE、EXIT、CYCLE)、内部サブルーチン・関数などを追加した。Fortran 95(1997年制定)はFortran 90のマイナー改訂版であり、FORALL文や純粋関数(PURE)、エレメンタル関数(ELEMENTAL)、WHERE文の拡張などが加えられた。

3.3.1 モダンな機能(動的配列、モジュール)

動的配列(ALLOCATABLE属性)は、実行時にサイズを決定・変更できる配列であり、メモリ管理の柔軟性を大幅に向上させた。モジュールは大規模プログラムのモジュール化と情報隠蔽を実現し、従来のCOMMONブロックや外部手続きに代わる主要な組織化手段となった。これらの機能により、Fortranはモダンなソフトウェア開発手法に対応できるようになった。

3.4 Fortran 2003/2008

Fortran 2003(2004年制定)は、オブジェクト指向プログラミング(OOP)の本格的なサポートを導入した。派生型の継承(EXTENDS)、型束縛手続き(TYPE-BOUND PROCEDURES)、多相性(CLASSキーワード)、抽象型(ABSTRACT TYPE)、インタフェースの継承、演算子の多重定義、入出力の拡張(ストリーム入出力、非同期入出力)、C言語との相互運用性(ISO_C_BINDINGモジュール)などが追加された。Fortran 2008(2010年制定)は、並列処理の強化(Coarray Fortranの正式採用)、サブモジュール、BLOCK構文、CONTIGUOUS属性、DO CONCURRENTの正式化などが主な改良点である。

3.4.1 オブジェクト指向拡張

Fortran 2003のOOP機能により、クラスベースの設計が可能になった。派生型に手続きを束縛し、継承と多相性を利用することで、大規模で複雑な数値計算コードの設計が容易になった。この拡張は、既存の数値計算ライブラリとの親和性を保ちながら、新しいソフトウェア設計パラダイムを導入した点で重要な意味を持つ。

3.5 Fortran 2018/2023

Fortran 2018(2018年制定)は、並列計算機能の強化に重点を置いている。Coarray Fortranの機能拡張(チーム機能、イベント駆動同期)、並列DOループ(DO CONCURRENT)の改良、新しい組み込み手続き(例:RANDOM_INIT)、IMPLICIT NONEのデフォルト化の推奨などが含まれる。Fortran 2023(2023年制定)では、条件付きコンパイル機能(CONDITIONAL COMPILATION)、文字列操作の拡張、配列引数の簡略化記法、言語の一貫性と安全性の向上が図られた。これにより、現代の高性能計算環境での要求に応える言語として進化を続けている。

4 応用分野

4.1 科学技術計算

FORTRANは数値解析、線形代数計算、微分方程式の解法、統計解析など、広範な科学技術計算分野で利用される。数値計算ライブラリ(LAPACK、BLAS、NAG、IMSLなど)の多くがFORTRANで記述されており、その高速性と信頼性から、研究機関や企業で長年にわたり採用されている。

4.2 気象・気候シミュレーション

気象予報モデル(例:WRF、GFS)や気候変動シミュレーションモデル(例:CESM、MPI-ESM)の多くはFORTRANで書かれている。大規模な格子系と複雑な物理過程(放射、乱流、雲微物理)を効率的に計算するために、配列演算や並列化機能が活用される。数十年にわたる膨大なレガシーコードも継続的にメンテナンスされている。

4.3 工学解析(CAE、FEM)

有限要素法(FEM)や有限体積法を用いた構造解析、流体解析(CFD)、電磁場解析などのエンジニアリングシミュレーションソフトウェア(例:ANSYS、NASTRAN、ABAQUS)のコア部分は、歴史的にFORTRANで開発されてきた。高速な行列演算と大規模疎行列ソルバの実装に適しており、性能重視の要件を満たしている。

4.4 金融モデリング

初期の金融工学やリスク管理モデル(例:オプション価格計算、ポートフォリオ最適化)では、FORTRANが使用された。特に1980年代から1990年代にかけて、高速な数値計算が必要とされるモンテカルロシミュレーションや偏微分方程式の解法に活用された。現在ではC++やPythonに取って代わられることが多いが、一部のレガシーシステムでは依然として稼働している。

5 開発環境とツール

5.1 主要なコンパイラ(GNU、Intel、PGI)

GNU Fortran(gfortran)は、GNU Compiler Collection(GCC)の一部として広く利用されるフリーのコンパイラであり、Fortran 2018までのほとんどの機能をサポートする。Intel Fortran Compiler(ifx/ifort)は、Intelプロセッサ向けに高度に最適化されたコードを生成し、科学技術計算分野で標準的に使われる。PGI Fortran(現在はNVIDIA HPC SDKに統合)は、GPU向けのオフロード機能を備え、並列計算を強力に支援する。このほか、NAG Fortran CompilerやCray Fortran Compilerなども利用されている。

5.2 デバッグと最適化

デバッグには、GDBやTotalViewなどのデバッガがFORTRANプログラムにも対応している。また、コンパイラのデバッグオプション(-g、-check、-traceback)やランタイムチェック機能(配列境界チェック、未初期化変数検出)が役立つ。最適化では、コンパイラの最適化レベル(-O2、-O3)、自動ベクトル化、自動並列化、プロファイルに基づく最適化(PGO)などが利用される。Intel VTuneやAMD uProfなどのパフォーマンス解析ツールも併用される。

5.3 Fortranコミュニティとパッケージ管理

Fortranコミュニティは、comp.lang.fortranニュースグループ、Fortran Discourseフォーラム、GitHub上の多数のオープンソースプロジェクトを通じて活動している。パッケージ管理システムとしては、fpm(Fortran Package Manager)が標準的に使われつつあり、依存関係の解決やビルドの自動化を提供する。また、Fortran標準ライブラリの一環として、stdlib(Fortran Standard Library)プロジェクトが整備されつつある。

6 影響と遺産

6.1 後続言語への影響(BASIC、Cの数値計算ライブラリ)

FORTRANの数式表記や配列操作の概念は、BASIC言語の設計に直接的な影響を与えた。また、C言語で書かれた数値計算ライブラリ(BLAS、LAPACKのCインタフェース)の多くは、元々FORTRANで実装されたアルゴリズムをベースにしており、その呼び出し規約や引数渡しの慣習は現在も受け継がれている。MATLABなどの高級数値計算環境も、その根幹にFORTRANの配列演算思想を持っている。

6.2 現代のレガシーコードと互換性

多くの科学技術計算コードがFORTRANで書かれており、その中には数十年にわたって改良・保守されてきたものもある。これらのレガシーコードを現代の環境で動かすため、コンパイラは旧規格(FORTRAN 66/77)との高い互換性を維持している。また、C言語との相互運用性(ISO_C_BINDING)により、新規開発部分の言語を問わず、既存のFORTRANコードを容易に結合できる。

6.3 教育的価値と軽い逸話

FORTRANは、プログラミング教育の歴史においても重要な位置を占める。特に数値計算やシミュレーションの入門として、その直感的な数式記法は初学者にとって理解しやすい。逸話として、FORTRANコンパイラの開発時にジョン・バッカスが「プログラマの時間よりコンピュータの時間の方が高かった」時代背景が語られることがある。また、FORTRANのDOループの仕様にまつわる「DO 10 I=1,10」の後に続く文番号が誤って10と解釈され、月探査機の軌道計算ミスを引き起こしたという都市伝説も有名である(実際には検証されていないが、プログラミングの教訓として語り継がれている)。