Fortran/なぜFortranを学ぶのか?

Fortranは、主に科学技術分野で使用されている汎用のプログラミング言語です。高速で移植性に優れ、配列や並列処理をシームレスに行うことができます。初期の高水準言語の一つで、プログラムのエンコードにパンチカードを使用したオリジナルバージョンを認識している人も多い。その名前はFORmula TRANslationの短縮形であり(古いバージョンの言語は一般的にFORTRANと全て大文字で綴られます)、その誕生により、低レベルのアセンブリ言語よりも簡単に数学的表現ができるようになった。現在でも、数値気象予報、物理・化学モデリング、応用数学、その他の高性能計算に広く使用されています。Fortranには、豊富な数学ライブラリや科学的コードベースが用意されています。新しい規格では、継続的に最新の機能が追加され、完全な後方互換性があります。

本書は、モダンな Fortran のコードを書くのに役立つことを目的としています。古いバージョン、特にFORTRAN77で書かれたコードが多く存在するため、必要に応じて古いバージョンと現代の標準との使い方の違いを強調しています。

他の言語の方が良い場合は?編集

FORTRANは非常に冗長で、静的に型付けされたコンパイル言語です。他の動的型付け言語やインタプリタ言語に比べて、記述、コンパイル、デバッグに時間がかかります。そのため、多くの人が生産性を目的とした言語(PythonRubyなど)に移行しています。

Fortranの特徴編集

  • 数値計算プログラムを簡潔に書くことができます。
  • 数値計算のためのライブラリが充実しています、例えばLAPACKやFFTPACKなどが使えます。
  • GNUプロジェクトに無料のコンパイラがあります。
  • スーパーコンピュータを使った数値計算、例えば、数値気象予報ではFortranが採用されています。

したがってパソコンで開発したFortranのプログラムを、スーパーコンピュータに移植することが容易です。

  • 複素数の演算を言語レベルでサポートしています。
  • Fortranでは言語レベルで配列同士の加減算などがサポートされています。また、部分配列を使用できるようになりました。
do i = 1, n
   a(i, k + 1:n) = a(i, k + 1:n) - a(i, k) * a(k, k + 1:n)
   x(i) = x(i) - a(i, k) * x(k)
end do

その結果、たとえばガウスの消去法では3重のDoループが2重のDoループになるなど、アルゴリズムを簡潔に記述することができます。

  • Interfaceという新しい構文が導入され、SubroutineやFucntionの呼出時における整数型や実数型の並びが正しいかどうかのチェックが可能になりました。
  • Intentという新しい構文が導入され、サブルーチン仮引数が入力、出力、入出力かを指定することが可能になりました。

これらは従来からあるSubroutineやFunctionの使用において、意味不明なエラーを出にくくし、ミスの発見が容易になります。

  • Implicit noneが導入され暗黙の型宣言を停止することができます。これにより、変数名のタイプミスを見つけやすくなります。
  • 多くのFortran処理系では、4倍精度を正式にサポートしており、ヒルベルト行列のような悪条件の連立一次方程式を解くには必須です。C/C++言語では4倍精度をサポートすることがオプションであるため、long doubleとして4倍精度で宣言したつもりでも、倍精度や80ビットの「2.5倍精度」になるケースが多いです。(※GCC 4.6以降では拡張として4倍精度に対応する__float128が用意されている。[1])


  1. ^ https://www.wdic.org/w/TECH/long double