FORTRAN

FORTRANは、1954年にIBMのジョン・バッカスが考案して広く使われた、コンピュータ用で世界最初の高水準言語である。

1. 概要
-----

1956年に最初のマニュアルがリリースされ、1957年にIBM 704用の最初のコンパイラがリリースされた。名前 FORTRAN は enに由来し、FORTRAN 77 や Fortran 90 などの末尾の数字は規格が制定された年を示している。

FORTRAN は科学技術計算に向いた手続き型プログラミング言語であり、その長い歴史の間に開発された非常に多くの数学関数やサブルーチンを数値解析ソフトウェアとしてもっている。また、並列計算の並列性を明示的に書くことができるので最適化が行いやすく、したがって他の言語より高速であるなどの理由から、数値予報および気候モデル、構造力学における有限要素法、計算流体力学、計算物理学、計算機化学、計量経済学、動物と植物の品種改良などの大規模な計算を行う分野において、スーパーコンピュータで使われている。

ちょうどC言語に対するC++言語のように、Fortran 90/Fortran 95 の言語仕様は、FORTRAN 77 の頃と比べればかなり拡張され進歩したものとなっている。最新のソースコードは、初期のものと比較するとほとんど別の言語のように見える。初期の頃は、変数名が大文字で6文字までであり、動的な記憶領域の確保ができないなど多くの制約があったが、それらの制限はなくなり、Fortran 77 から構造化プログラミングが導入され、Fortran 90 からモジュラープログラミング、配列演算とユーザー定義総称関数が、Fortran 95 からHigh Performance Fortranが、Fortran 2003 からオブジェクト指向が、Fortran 2008 からはコンカレント・コンピューティングが導入された。

なお、大文字で FORTRAN と表記した場合は FORTRAN 77 以前の FORTRAN を指し、Fortranと表記した場合は Fortran 90 以降を指すことがある。

2. FORTRANの特徴
-------------

2.1. Fortran 90/95の特徴
---------------------

Fortran 90/95の特徴は、次のとおりに要約される牛島省。

数値計算プログラムを簡単かつ簡潔に記述できる。
プログラムの誤りを犯しにくい言語である。
数値計算のための便利な道具があらかじめ用意されている。
作成したプログラムを大規模高速演算に使用できる。
無料のコンパイラが公開されている。

2.2. FORTRAN 77の特徴
------------------

広く使われていたFORTRAN 77 の特徴は、以下のように要約される。

数式の計算が簡便に記述できる ほぼ数学の数式通りに計算式を記述できる。もっともこの特徴は他に計算向きの高級言語がなかった時代の話であり、現代の水準では「プログラミング言語における標準数式表現の始祖」といった方が当たっている。 入出力が容易 簡単に出力形式を定義できるFORMAT文や、実際の出力デバイスを意識しないで済む入出力文がある。 スタック指向／構造化指向の言語ではない COMMON文、BLOCK DATA文やSAVE文など、データを静的に割り当てることを前提としている。 プログラムの書式が固定形式である プログラム記述の方法がカラム位置に依存している

3. FORTRANの歴史
-------------

ジョン・バッカスは1953年末、メインフレームコンピュータIBM 704のプログラムを開発するにあたり、アセンブリ言語に代わるものを開発することをIBMの上司に提案した。歴史的なFORTRAN開発チームはRichard Goldberg、Sheldon F. Best、Harlan Herrick、Peter Sheridan、Roy Nutt、 Robert Nelson、Irving Ziller、Lois Haibt、David Sayreというメンバーで構成された。

//The IBM Mathematical Formula Translating System// のドラフト仕様は1954年中旬に作成された。1956年10月にFORTRANの最初のマニュアルが作成され、コンパイラは1957年4月に完成した。顧客はアセンブリ言語で記述されたコードに匹敵するパフォーマンスが得られない限り高級言語を採用しないので、最初から最適化コンパイラが開発された。

この新しい方法がハンドアセンブルより高速に動作するかどうかには疑いの目があったが、プログラム中の命令数を1/20に削減できるので急速に受け入れられていった。IBMの社内誌であるThinkに掲載された1979年のインタビューでバッカスは「私がこの仕事をしたのは面倒くさがりだったからです。私はプログラムを書くことが好きではなかったので、IBM 701でミサイルの軌道計算プログラムを開発したときに、プログラムの開発を簡単にするためにプログラミングシステムを作り始めました。」と語っている。

FORTRANは科学者の間で数学を応用したプログラムの記述に広く用いられたことから、より高速で効率的なコードを出力しようとする原動力となった。またライブラリでなく言語として複素数型をサポートしたことは、電気電子工学における動的特性の計算などに代表される科学や工学分野のプログラムを書きやすくした。

1960年までに様々なバージョンのFORTRANがIBM 709、IBM 650、IBM 1620、IBM 7090で動作していた。FORTRANのユーザー数は急増し、コンピューターメーカーがFORTRANコンパイラをこぞって提供したので、1963年までには40を超えるFORTRANコンパイラが存在していた。こうしたことから、FORTRANはアーキテクチャの異なる様々なコンピュータで広くサポートされた最初の言語と言える。

FORTRAN開発の歴史は、初期のコンパイラ技術の歴史そのものといえる。FORTRANで効率的なコードを出力したいという強い要求からコンパイラによる最適化技術が大きく進歩した。

3.1. FORTRAN
------------

IBM 704用に開発された最初のFORTRANは32の命令をもっていた。

3.2. IBM 1401版FORTRAN
---------------------

IBM 1401版は革新的な65パスのコンパイラであり、わずか8k語の磁気コアメモリで動作する。コアに記録されたプログラムが段階的に実行可能なコードへと変換されて上書きされる。変換されたコードは機械語ではなく、UCSD PascalのPコードが生まれるよりも20年も前ながら、中間コードを利用していた。

3.3. FORTRAN II
---------------

IBMの//FORTRAN II//は1958年に開発された。主な改良点は手続き型プログラミングのサポートであり、サブルーチンや関数を定義できるようになった。

その後、FORTRAN IIのデータ型として、DOUBLE PRECISIONとCOMPLEXが追加された。

3.4. FORTRAN III
----------------

IBMは1958年に//FORTRAN III//を開発していた。いくつかの新機能に加えインラインアセンブラが可能であった。しかしながらこのバージョンは販売されなかった。704 FORTRANやFORTRAN IIと同様に、FORTRAN IIIにも移植の妨げになるような機種依存の機能があった。他のベンダーから販売されていたFORTRANも初期は同様の問題を抱えていた。

3.5. FORTRAN IV
---------------

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に準拠した。

3.6. FORTRAN 66
---------------

//American Standards Association//がFORTRANの米国規格を委員会で制定するようになったことはFORTRANの歴史の要である。1966年に2つの異なる言語が制定された。一つは当時既にデファクトスタンダードであったFORTRAN IVを基にした//FORTRAN//であり、もう一つはFORTRAN IIを基にして機種依存部分を取り除いた//Basic FORTRAN//である。最初に制定されたFORTRANの規格は後に//FORTRAN 66//と呼ばれた。

3.7. FORTRAN 77
---------------

FORTRAN 66 規格のリリース後、コンパイラ・ベンダーは多くの拡張を"標準Fortran"に導入し、1966の規格の改訂を始めるようにANSIを促した。この改訂は1977年に制定され、最終的な改訂案は1978年4月に新しいFORTRAN標準として承認された。この新しい標準は//FORTRAN 77//として知られ、FORTRAN 66後の多くの変更を追加し、多くの重要な機能を加えた:

ブロック IFとEND IF ステートメント、オプショナルなELSEとELSE IF ステートメント。改善された言語サポートのための構造化プログラミング。
DOループ機能拡張、パラメータ記述を含む、負の増分とゼロのトリップ・カウント。
改良されたI/OのためのOPEN, CLOSE, と INQUIRE文。
ダイレクト-アクセス ファイル I/O。
IMPLICIT 文。
CHARACTER 型。文字の入出力と処理のための大幅な増補。。
PARAMETER 文。定数を指定するためのステートメント。
SAVE 　文。明示的にローカル変数を永続的に指定する。
内部関数のための総称関数。
ASCII コードの文字順序に基づいた、文字列比較のための内部命令セット。この規格の改訂において、多くの機能は除去されるか変えられて、以前の標準に合致していたプログラムの多くはおそらく無効になった。この時点で除去はX3J3の代替だけが許容された。だからコンセプト "不賛成"はANSI標準においては利用できなかった。しかし、コンフリクトリストの24アイテムループホールスとパスロジカルケースは以前の標準規格から許容されたが、しかし滅多に使用されない。少数の機能は慎重に除去された。

文字列定数をプログラム中で記述するためのホレリス記法、すなわち： GREET = 12HHELLO THERE!
FORMAT 記述子におけるH編集の読み込み。
配列の定義時の添字の範囲を超えたアクセス。 DIMENSION A Y= A
DOループの途中でいったん外に飛び出して後で戻る。
以前の規格では文字型がなかったので、文字データや文字列データを整数や実数の変数や配列に格納することが行われていたが、Fortran77ではそれを廃止した。

3.8. Fortran 90
---------------

一般に//Fortran 90// として知られている規格は、大幅に発表が遅れたもののFORTRAN 77の正当な継承者であり、最終的に1991年にISO規格、1992年にANSI規格としてリリースされた。この抜本的な改訂では1978年のFORTRAN 77規格制定からのプログラミング技術における大幅な変化を反映するために、以下の多くの新しい機能が加えられた

フリーフォームソース入力と小文字のFortranキーワード。プログラム本文を7桁目から書かなくても良く、80桁の制限も無い。 if  then x=0 end if

最長31文字までの識別子。 abcdefghijklmnopqrstuvwxyz12345=0.0e0

インラインコメント。 ! これは"!"を用いたコメントです

配列演算。これは数学とエンジニアリングの計算を大幅に簡素化する。
全部または部分マスクされた、配列の指定と配列の表現、例えば、 x=r*cos)

選択的配列のアサインのためのwhere文。 integer :: a real :: b a = f where  b = -1.0 elsewhere b = 1.0 end where

<WtXmlEndTag />

配列の定数と式による初期化。
ユーザ定義の配列を返す関数と配列コンストラクタ。 function sample result !配列yを返す integer, parameter :: nn = 4 real :: y =  !配列のコンストラクタと定数による初期化 !... end function sample

再帰手続き。
モジュラープログラム、すなわち関係するサブルーチンとデータのグループ化と、他のプログラムユニットで使用、モジュールの内の指定した部分だけの使用を含む。
interface文を使用してコンパイル時に型がチェックされる大幅に改善された引数渡しメカニズム。 module my_lib !モジュール interface function sample real, intent :: x !コンパイル時に変数の型の整合性とデータの入出力方向がチェックされる。 !... end function sample end interface end module

ユーザー定義総称関数のインターフェース。
演算子のオーバーローディング。
派生型データタイプ。
変数のデータタイプと他の属性を指定するための新たなデータタイプの宣言シンタックス、
allocatable属性と allocateとdeallocate文を用いたダイナミックメモリアロケーション。 real, allocatable :: temp allocate) deallocate

ポインター属性とポインターアサイン、nullify文によるダイナミックデータ構造の扱い。
do 文の end do による終端。
do while 文
exit文によるdo文からの脱出と、cycle文によるdo文の次の繰り返しへの移行。 do i = 1, nn if  /= 0) then a = 1.0 / b else exit end if end do

select文。 select case  case  a = a + 1 case  a = a - 1 case default a = 0 end select

ユーザがコントロールできる数値精度の移植性の良い指定方法。 a = 1.0e0_kind

新しく導入された内部関数。それに伴い従来の文関数は廃止予定に。

3.8.1. 削除または時代遅れとされた機能の一覧
-------------------------

以前のバージョンとは異なり、Fortran 90は、何の機能も削除しなかった。つまり、FORTRAN 77に準拠したプログラムは、Fortran 90にもまた準拠している。そして、両方の規格で、その動作が定義づけられた項目は使用可能でなければならない。一部の機能はFortran 95で「削除」され、また機能の小さな部分は「時代遅れ」と認定されて将来の規格で除去されることが予定された。



3.8.2. "Hello world"の例
----------------------

program helloworld print *, "Hello, world." end program helloworld

3.9. Fortran 95
---------------

//Fortran 95//は、マイナーな改訂版である。ほとんどは、Fortran 90規格の、いくつかの大きな問題を解決するためのものである。それにもかかわらず、Fortran 95もまた年号を付加されている。それは、Fortranの拡張として定義される並列言語、HPFの一部導入によることは明白である。なお、本格的なHPFは、地球シミュレータ等で使用されている。

forallと階層化されたwhereがベクトル化のために追加された。
ユーザ定義の pure と elemental プロセジャーが追加された。
派生タイプコンポーネントのデフォルト初期化、これはポインターの初期化を含むが追加された。
データオブジェクトの初期化表記を使うための拡張が追加された。
allocatable アレイがスコープから出た時に自動的にdeallocateされることの明確な定義が追加された。多くの内部関数は拡張された。一例としてmaxloc 内部関数にdim引数が追加された

Fortran 90で時代遅れとされた、いくつかの機能はFortran 95から削除された。

REALとDOUBLE PRECISION変数を使用したDO ステートメントは削除された。
END IFステートメントへのブロック外部からのブランチは削除された。
PAUSE ステートメントは削除された。
ASSIGNとASSIGN型GOTO ステートメント、ASSIGNフォーマット指定は削除された。
H edit descriptorは削除された。Fortran 95への重要な追加は、一般には//Allocatable TR//として知られる、//ISO technical report、TR-15581: Enhanced Data Type Facilities//である。この仕様は、Fortran 2003準拠のFortran コンパイラより前に、ALLOCATABLE アレイの強化した用法を定義した。そのような用法は、プロセジャーのダミー引数リストとしての派生タイプコンポーネントALLOCATABLEアレイと、関数の返し値を含む。ALLOCATABLEアレイは、POINTER-ベース・アレイより好ましいものである。なぜなら、ALLOCATABLE アレイは、スコープから抜けたとき、Fortran 95による自動的なdeallocateを保証しメモリリークの可能性をなくすからである。

エイリアシングはarrayの参照において最適化の障害にならず、Fortranコンパイラがポインタ-ベース・アレイより高速なコードを生成することを可能にする。

他の重要なFortran 95への追加は、ISO technical report //TR-15580: 浮動小数点例外ハンドリング//である。一般にはIEEE TRとして知られており、この仕様はIEEE 浮動小数点演算と例外ハンドリングを定義する。

3.9.1. 条件付コンパイルと可変長文字列
----------------------

必須のベース言語以外に、Fortran 95言語も以下の2つのオプショナルなモジュールを含む。

可変文字列
条件付コンパイル両者は、マルチパート国際標準を構成する。規格の開発者は、「オプショナル・パートは必要なものを完備した機能を記述している、それは多くのコンパイラ・インプリメンターとユーザーから要求されてきたものである。しかし、それらは、全てのFortran標準に合致するコンパイラは十分な一般性を持たないと考えられていた。それにもかかわらず、もし標準に合致したFortranがそのようなオプションを提供するなら、『それらの機能は、標準規格の適切なパートに記述に従って提供されなければならない。』」と述べている。

3.10. Fortran 2003
------------------

//Fortran 2003//はメジャーな改訂であり、たくさんの新しい機能を導入した。 Fortran2003における新しい機能の包括的なサマリーは、Fortran Working Group のオフィシャルWebサイトから得ることができる。

この記事によれば、このバージョンが含む大幅な強化は以下の通りである。

派生タイプの強化：使用法が進歩したコントロール、パラメータ化された派生型、改善された構造化コンストラクタとファイナライザー。
オブジェクト指向プログラミングのサポート：オブジェクト指向のタイプの拡張とインヘリタンス、ポリモーフィズム、ダイナミック・タイプアロケーション、タイプ-バウンド・プロセジャー。
データマニピュレーション・エンハンスメント：allocatable コンポーネント 、遅延タイプパラメータ、ボラタイル・アトリビュート、ポインタ-の強化、初期化拡張、内蔵関数の強化。
入出力の強化：非同期転送、ストリーム・アクセス、派生タイプのためのユーザ定義転送オペレーション、ユーザ指定のフォーマット変換時の丸めの制御、接続前のユニットの名前付定数、FLUSH ステートメント、キーワードの規則化、エラーメッセージへのアクセス。
プロセジャーのポインター。
IEEE 浮動小数点と浮動小数点例外処理のサポート。
C言語との相互運用。
国際的な慣習のサポート：ISO 10646の4バイト文字の利用、数値形式の入出力でのデシマルとコンマの選択。
ホスト・オペレーティングシステムとの一体化の強化。コマンドライン引数、環境変数とプロセッサーエラーメッセージ。Fortran 2003 への重要な追加は、ISO technical report TR-19767である。

Fortranにおけるモジュール機能の強化。このレポートは、//submodules//を提供する。これは、FortranのモジュールをよりModula-2言語のモジュールに近づける。これらは、Ada言語のプライベート・チャイルド・サブユニットに似ている。これは分離したプログラムユニットとして表現すべきモジュールの仕様と実装を可能にし、大規模なライブラリのパッケージ化を改善し、インターフェース定義を公開しても企業秘密を保持することを可能にし、コンパイレーション・カスケードを防ぐ。

3.11. Fortran 2008
------------------

最新の規格であり一般にはFortran 2008として知られているISO/IEC 1539-1:2010は2010年9月に承認された。Fortran 95と同様に、これはマイナー・アップグレードである。Fortran 2003の明確化と訂正と共に、新しい特長も導入された。新しい特長は、以下を含む

モジュール構造の追加、ISO/IEC TR 19767:2005にとってかわるサブモジュール。
Co-array Fortran―並列計算モデル。
do concurrent―相互依存のないループを並列に実行するDOループ。
メモリ上のレイアウトを指定するためのCONTIGUOUS属性。
コンストラクト・スコープ付のオブジェクトの宣言を含むブロック・コンストラクト。
派生タイプにおける再帰的ポインターの代替としての再帰的アロケータブル・コンポーネント。ファイナル・ドラフト・スタンダードは、ドキュメントN1830として利用できる。

Fortran 2008における重要な追加は、ISOテクニカルスペシフィケーション 29113のFortranにおけるC言語とのより高いインターオペラビリティであり、2012年5月のISOの承認に向けてまとめられた。C言語の配列へのFortranアクセスに関してタイプとランクを無視する仕様が加えられた。

3.12. Fortran 2018
------------------

Fortran 2018の最新版は、以前はFortran 2015と呼ばれていた。大きな改訂が行われ、2018年11月28日にリリースされた。

Fortran 2018には、それ以前に公開された以下の2つの技術仕様が含まれている。

ISO/IEC TS 29113:2012 Further Interoperability with C
ISO/IEC TS 18508:2015 Additional Parallel Features in Fortran追加の変更と新機能には、ISO/IEC/IEEE 60559:2011のサポート、16進の入出力、IMPLICIT NONE拡張など、様々な変更が含まれている。

4. 科学分野と工学分野での利用
----------------

1968年にBASICの作者等によって書かれた専門雑誌の記事でもすでに「旧式のプログラミング言語」と記述されていたが、Fortranは現在でも数十年に渡って使用されており、特に科学や工学のコミュニティでは、Fortranで書かれたソフトウェアが日常的に幅広く利用されている。ジェイ・パサコフは1984年に「物理学と気象学の学生はFORTRANを必ず学ぶ必要がある。大部分の成果がFORTRANで書かれており、科学者たちがPascalやModula-2などの他の言語に移行する可能性は極めて低い。」と書いている。1993年、Cecil E. Leithは、FORTRANを「科学計算の母語」であると評し、他の言語によって置き換えられる可能性は「永遠の希望であり続けるだろう」と述べている。

5. 言語仕様の変遷
----------

FORTRAN 66以降、ISO、ANSI、JISで仕様が制定されている。Fortranの言語仕様は、年代によってかなり変化して来ている。他のプログラミング言語で実装された構造化プログラミングの機能などがどんどん取り入れられて来ているからである。

FORTRAN 66とFORTRAN 77の言語仕様の詳細は、FORTRAN 77の言語仕様を参照のこと。
Fortran 90以降の言語仕様の詳細は、Fortranの言語仕様を参照のこと。

5.1. 初期 
--------------------

1966年にANSI X3.9-1966が制定され、JISとしては1967年に制定された。この時は、以下の3つの水準ごとに独立したJISが制定された。共通したタイトルは「電子計算機プログラム用言語 FORTRAN」だった。以下に水準間のおおよその違いを記す。

JIS C 6201
複素数型と倍精度実数型がある
DATA文と初期値設定副プログラムがある
FORMAT文中の欄記述子にD,G,Aが定義できる
変数、配列手続き名は最大6文字
JIS C 6202
変数、配列手続き名は最大6文字
JIS C 6203
変数、配列、手続き名は最大5文字
論理型のデータ、論理式、関係式、論理IF文は使えない。
型宣言文がない。
EXTERNAL文がない。
3次元の配列がない。
名前付きCOMMON文がない。
文番号は4桁
COMMON文に配列宣言が使えない。
整合配列がない。なお、1971、1976年に若干の改訂がなされている。

5.2. FORTRAN 77時代
-----------------

国際標準化機構は、米国規格協会の X3J3 が作成した FORTRAN の規格 X3.9-1978 を ISO 1539-1980 として定めた。基本水準と上位水準の2種類の水準からなっていた。これを基にして、同じく2水準の JIS C 6201-1982 が制定された。なお、1987年に、JISの分類が変更になり、この規格は JIS X 3001-1982 となった。内容には変更はない。

5.3. Fortran 90時代
-----------------

FORTRAN 77を基に他の言語の特徴を組み込み、言語仕様を近代化しようとしたが、そのため仕様がなかなか決まらず、1991年に ISO/IEC 1539:1991として制定された。JISではそれを受け、JIS X 3001:1994が制定された。

Fortran 90 から規格上の言語の呼称が頭文字のみを大文字とした“Fortan”に変更された。

5.4. Fortran 95時代
-----------------

JIS X 3001:1998では，Fortran 95と通称される規格が引用されている。該規格は一部例外を除きJIS X 3001 1-1994の上位互換拡張である。

5.5. Fortran 2003時代
-------------------

JIS X 3001:2009では，Fortran 2003と通称される規格が引用されている。当該規格は一部の例外を除いてJIS X 3001-1:1998の上位互換拡張である。

5.6. Fortran 2008時代
-------------------

対応するJISは制定されなかった。

5.7. Fortran 2018時代
-------------------

JIS X 3001-1:2023では，Fortran 2018と通称される規格が引用されている。

6. FORTRANと教育
-------------

6.1. 教育向けコンパイラ
--------------

FORTRANは、情報処理分野で広く使われていたため、学校や会社の教育で利用された。教育向けには、より詳細なエラー情報を出すための拡張がWaterloo大学でWATFORコンパイラとして実装された。この実装は日本の大学でも使われた。

7. Fortranとスーパーコンピュータ
---------------------

Fortranは科学技術計算用の言語なので、スーパーコンピュータでのプログラミング言語としてよく用いられる。実際、多くのスーパーコンピュータでベンダーが主に注力して提供されている言語は、C/C++およびFortranである。

C言語と比較すると、Fortranはスタック等を使わずに、コンパイル時に静的に記憶領域を確保するのが基本であった。そのため、自由度が高くあらゆる状況を想定しなければならないC言語と比べるとコンパイラはコードを最適化しやすいという利点がある。

Fortranの主な用途である科学と技術用の計算では配列を用いた演算が基本であり、ベクトル型スーパーコンピュータは、Fortranを使ったプログラムで使用することが多い。そこで、スーパーコンピュータの高速演算機能を有効に使うための工夫がなされた。その1つの例としては、自動ベクトル化機能である。ベクトル型のスーパーコンピュータは、多くの演算を同時に行うベクトル演算機能がハードウェアで提供されている。この機能を有効に使うために、FortranのDOループをベクトル演算装置で演算させるために、自動的にベクトル命令にする機能が提供された。また、DOループ内のベクトル演算に適さないものをDOループ外に追い出す機能などもある。たとえば、

DO I = 1, N A = B * C END DO

のようなDO構文は、ほとんどの場合、1から数個のベクトル演算命令にコンパイルされる。そのほかにもDOループの中にIF文を含むような例、たとえば、

DO I = 1, N IF  <= LIMIT) THEN B = A * Z END IF END DO

のようなものもベクトル化できる場合がある。これは、いったんAの各要素がLIMIT以下かどうかを示すマスクベクトルを作成して、Aという配列に、変数Zの値を乗じるとき、マスクベクトルを参照するベクトル演算を行うことで、DOループをベクトル化する。

このような作業は、すべてコンパイラが行い、利用者にできるだけ負担をかけないようにしている。しかし、より高度なベクトル化を行うために、最適化を行う支援ツールが用意されている場合もある。

8. FORTRANと日本語
--------------

コンピュータ上で日本語の文字を扱えるようになると、FORTRANでも日本語を扱う需要が出てきた。そのため、各社では、独自に言語仕様に日本語の文字を扱えるように拡張した。そのため、各社で日本語の扱い方が異なる事態になった。そこで、JEIDAでは1985年に、JEIDA-42で日本語FORTRANを策定した。

FORTRANで日本語の文字を扱う場合、識別子である変数名､仮引数名、プログラム名、関数名、サブルーチン名、共通ブロック名等には日本語の文字は使えず、データとしての日本語の文字列を扱うための専用の型、日本語の文字列を入出力するためのFORMAT文の編集子の拡張が行われた。

9. FORTRANベースの言語
----------------

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を 『特に教育や科学技術計算に適した、構造化された配列プログラミング言語である。』 と述べている。しかしサブセット言語であるから，旧来のあるいはFで除かれた機能を含むFortranのソースコードは受け付けないため、実務用には普及しなかった。

HPF- 自由なソフトウェアのGNU コンパイラ・コレクションの１つ。現在　Fortran 95 に2003や2008の仕様の一部を追加。

G95
Open Watcom [1]
Intel Fortran Composer XE 2011 for Linux - 非商用利用に限り無償で使用可
Oracle developer studio - 開発向けに無期限の無償ライセンス
NVIDIA HPC SDK - ライセンス契約への同意が必要有償の商用コンパイラ
Absoft Pro Fortran
Intel Visual Fortran
NAG Fortran
Open64
PGI Fortran
un Studio

9.1. その他
--------

f2c - ベル研究所のFortran77をC言語に変換するトランスレータ

10. 出典
------

11. 参考文献
--------

秋冨勝『学生のためのFORTRAN : JIS上位水準による』東京電機大学出版局、1990年。ISBN 978-4501515300。
新井親夫『Fortran90入門 : 基礎から再帰手続きまで』森北出版、1998年。ISBN 978-4627839816。
牛島省『数値計算のためのFortran 90/95プログラミング入門』森北出版、2007年。ISBN 978-4-627-84721-7。 - 第2版 2020年。
牛島省『数値計算のためのFortran90/95プログラミング入門・アンサーブック : 演習問題の解答と解説』日本電子書籍技術普及協会、2022年。978-4867538098}}。 - ペーパーバック版
浦昭二『FORTRAN 入門』培風館、1966 年。
浦昭二、近藤頌子、土居範久、原田賢一『FORTRAN 77入門』培風館、1982年。
陰山聡『[2]』
片桐孝洋、大島聡史『C＆Fortran　演習で学ぶ数値計算』共立出版、2022年。ISBN 978-4-320-12484-4．
田口俊弘『Fortran ハンドブック』技術評論社、2015年。ISBN 978-4774175065
竹澤照『Fortran I 基礎』、共立出版、2000年。ISBN 4-320-02977-1。 - 初版 1995年。
竹澤照『Fortran II 数値計算』共立出版、1997年。ISBN 4-320-02868-6。
竹澤照『Fortran III データ構造とアルゴリズム』共立出版、1999年。ISBN 4-320-02937-2。
田辺誠, 平山弘『実践Fortran95プログラミング : フリーソフトg95, gnuplotによるプログラミングから作図まで』第3版、共立出版、2008年。
冨田博之、齋藤泰洋『Fortran90/95プログラミング』培風館、1999年｡ - 改訂新版 2011年。
冨田博之、齋藤泰洋『Fortran90/95プログラミング』改訂新版、培風館、2011年。ISBN 978-4-563-01587-9
西村恕彦、酒井俊夫、高田正之『岩波FORTRAN辞典』岩波書店、1986年。ISBN 978-4000098816。 - Fortran77の規格を記述した辞典。
[3]、日本NAG社。
[4]、日本NAG社。
[5]、日本NAG社。
日向俊二『Fortran 2008入門』カットシステム、2016年。ISBN 978-4-87783-399-2
藤井文夫、田中真人、佐藤維美『Fortran90/95による有限要素法プログラミング : 非線形シェル要素プログラム付』丸善出版、2014年。ISBN 978-4621087848
松本敏郎、野老山貴行『みんなのFortran : 基礎から発展まで』名古屋大学出版会、2022年。ISBN 978-4-8158-1087-0　
森正武『FORTRAN77数値計算プログラミング』増補版、岩波書店、1987年。
森口繁一『JIS FORTRAN入門』上、第3版、東京大学出版会、1984年。ISBN 978-4130620307。
安田清和、水野正隆、小野英樹『Fortran90/95による実践プログラミング』大阪大学出版会、2014年。ISBN 978-4872594737
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" , 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
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.
Mark Jones Lorenzo: "Abstracting Away the Machine: The History of the FORTRAN Programming Language ", 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
Valmer Norrod, et al: "[6]", Computer Science Corporation El Segundo, California, 1970. NASA.
Valmer Norrod, Sheldom Blecher, and Martha Horton: "[7]", NASA CR-1478, Vol. II, 1970. NASA.
[8]
[9] - これはユーザー向けの解説書であって、言語規格の記述としては厳密ではないところが多少ある。
[10]

12. 関連項目
--------

FORTRAN 77の言語仕様
Fortranの言語仕様-
Co-array Fortran
High Performance Fortran
COBOL
PL/I
:en:F_ ※ F言語はFortran95のサブセット言語として主に教育用を想定して1996年頃に作成されたが普及せず。

13. 外部リンク
---------

[11]
[12]
[13]—the new home of Fortran on the internet .
[14]
[15]
[16].
[17]
[https://www.hitachihyoron.com/jp/pdf/1962/exc/1962_exc_18.pdf 島田正三、吉村一馬、高橋延匡、中田育男、多田敬子：「HARP 103 (HIPAC 103の自動プログラミングシステム）