Fortran(/ ˈfɔːrtræn /、旧称FORTRAN)は、数値計算および科学計算用に設計された、第3世代のコンパイル型命令型 プログラミング言語です。
Fortran は元々 IBMによって開発され、1956 年にリファレンス マニュアルがリリースされました。[ 3 ]しかし、最初のコンパイラが正確なコードを生成し始めたのは 2 年後でした。[ 4 ] Fortran のコンピュータ プログラムは、数値天気予報、有限要素解析、計算流体力学、プラズマ物理学、地球物理学、計算物理学、結晶学、計算化学などの科学および工学アプリケーションをサポートするために作成されています。高性能コンピューティングで人気の言語であり[ 5 ]、世界最速のスーパーコンピュータのベンチマークとランキングを行うプログラムに使用されています。[ 6 ] [ 7 ]
Fortran は数多くのバージョンと方言を経て進化してきました。最も重要な初期のバージョンは FORTRAN II と FORTRAN IV でした。[ 8 ] 1966 年、米国規格協会(ANSI) は、わずかに異なる構文を使用するコンパイラの増殖を制限するために Fortran の標準を開発しました。[ 9 ]後継バージョンでは、文字データ型、構造化プログラミング(Fortran 77)、配列プログラミング、モジュール型プログラミング、汎用プログラミング(Fortran 90)、並列コンピューティング( Fortran 95 )、オブジェクト指向プログラミング(Fortran 2003)、および並行プログラミング(Fortran 2008) のサポートが追加されました。

FORTRANの最初のマニュアルでは、これを数式翻訳システムと説明し、名前を小文字でFortranと印刷しています。[ 10 ] : p.2 [ 11 ] 他の情報源では、この名前は数式翻訳機[ 12 ]、または最も一般的な数式翻訳[ 13 ] [ 14 ] [ 15 ]の略であると示唆しています。
初期のIBMコンピュータは小文字をサポートしていなかったため、FORTRAN 77までの言語バージョンの名前は 通常すべて大文字で表記されていました。[ 16 ] FORTRAN 77は、Fortran文字セットに大文字のみが含まれていた最後のバージョンでした。[ 17 ]
Fortran 90規格では、言語名がすべて大文字の「FORTRAN」から、先頭が大文字の「Fortran」に変更されました。[ 18 ]

1953年後半、ジョン・W・バッカスはIBMの上司に、IBM 704メインフレームコンピュータのプログラミングにアセンブリ言語よりも実用的な代替手段を開発するという提案を提出した。[ 11 ]: 69バッカスの歴史的なFORTRANチームは、プログラマーのリチャード・ゴールドバーグ、シェルドン・F・ベスト、ハーラン・ヘリック、ピーター・シェリダン、ロイ・ナット、ロバート・ネルソン、アービング・ジラー、ハロルド・スターン、ロイス・ハイブト、デビッド・セイヤーで構成されていた。[ 19 ]その概念には、数式をコンピュータに簡単に入力できるというアイデアが含まれており、これはJ. ハルコム・ラニングによって開発され、 1952 年のラニングとツィーラーのシステムで実証されました。 [ 20 ]コンピュータ黎明期の他の開発と同様に、この方向で並行して独立した取り組みがいくつかあり、プロト Fortran 言語の他の例としては、グレース・マレー・ホッパーの指揮の下、UNIVAC I用のA-0 システムとその後継機MATH-MATIC 、ハインツ・ルティシャウザーがZuse 4コンピュータ用に開発した高水準言語、RA ブルッカーがFerranti Mercury用に 作成したMark 1 Autocodeなどがあります。[ 15 ]

IBM 数式翻訳システムの仕様草案は 1954 年 11 月までに完成しました。[ 11 ] : 71 FORTRAN の最初のマニュアルは 1956 年 10 月に発行され、[ 10 ] [ 11 ] : 72最初の FORTRANコンパイラは1957 年 4 月に提供されました。[ 11 ] : 75 Fortran は、アセンブリ言語プログラマが高水準プログラミング言語の代替として受け入れるのに十分な効率的なコードを生成しました。[ 8 ]
ジョン・バッカスは、IBMの社員誌であるThinkとの1979年のインタビューで、「私の仕事の多くは怠惰から生まれたものです。私はプログラムを書くのが好きではなかったので、 IBM 701でミサイルの軌道を計算するプログラムを書いていたとき、プログラムを書きやすくするためのプログラミングシステムの開発に着手しました。」と述べています。[ 21 ]
この言語は、数値計算を多用するプログラムを作成するために科学者に広く採用され、コンパイラ開発者はより高速で効率的なコードを生成できるコンパイラを開発するようになった。言語に複素数データ型が組み込まれたことで、Fortranは電気工学などの技術的なアプリケーションに特に適したものとなった。[ 22 ]
1960年までに、 IBM 709、650、1620、および7090コンピュータ用のFORTRANのバージョンが利用可能になった。重要なことに、FORTRANの人気が高まるにつれて、競合するコンピュータメーカーが自社マシン用のFORTRANコンパイラを提供するようになり、1963年までに40以上のFORTRANコンパイラが存在するようになった。コンピュータ業界内でこの言語は非常に普及しており、その時点で22万冊以上のあらゆる種類のFORTRANマニュアルが配布されていた。[ 15 ]
IBM 1401コンピュータには、わずか 8000 文字 (6 ビット) のコア メモリ内で完全に実行される革新的な 63 フェーズ コンパイラによるFORTRAN が提供されました。コンパイラはテープまたは 2200 枚のカード デッキから実行でき、追加のテープやディスク ストレージは使用しませんでした。Haines が説明したように、プログラムをメモリに保持し、オーバーレイをロードして、その場で徐々に実行可能形式に変換しました。[ 23 ]この記事は、 Anatomy of a Compiler [ 24 ] の両版と IBM マニュアル「Fortran Specifications and Operating Procedures, IBM 1401」[ 25 ]に再掲載され、編集されました。 実行可能形式は完全に機械語ではなく、浮動小数点演算、添え字、入出力、関数参照が解釈され、UCSD Pascal P コードより 20 年も前に実現しました。 FORTRAN I の簡略化されたインタプリタ版であるGOTRAN (ステートメントの種類は 32 種類ではなく 12 種類のみ) が、「ロードして実行」操作のために利用可能でした (少なくとも初期のIBM 1620コンピュータでは)。[ 26 ]現代の Fortran およびそれ以降のほとんどすべてのバージョンは、他の高性能言語と同様に、完全にコンパイルされます。
Fortran の開発はコンパイラ技術の初期の進化と並行しており、コンパイラの理論と設計における多くの進歩は、 Fortran プログラム用の効率的なコードを生成する必要性によって特に動機付けられました。[ 27 ]実際、Fortran コンパイラは当時存在していたあらゆる種類のプログラムの中で最も複雑なものの 1 つであり、ニューヨーク州ポキプシーにある IBM の製品テスト グループによって、新しく構築されたコンピュータの受け入れテストの一部として使用されていました。[ 15 ]
IBM 704 [ 10 ]向け FORTRAN の初期リリースには、以下のものを含む32 種類のステートメントが含まれていました。
DIMENSIONおよびEQUIVALENCE声明IF式(現在は非推奨)は、算術式の結果が負、ゼロ、正のいずれであるかに応じて、プログラム内の3つの場所のいずれかに制御を渡していました。IF ACCUMULATOR OVERFLOW、、IF QUOTIENT OVERFLOWおよびIF DIVIDE CHECK)、およびセンススイッチとセンスライトを操作するための制御文(IF (SENSE SWITCH)、、IF (SENSE LIGHT)およびSENSE LIGHT)GO TO計算されGO TO、ASSIGN割り当てられましたGO TODOループFORMAT、、、、、およびREADREAD INPUT TAPEWRITE OUTPUT TAPEPRINTPUNCHREAD TAPE、、、およびREAD DRUMWRITE TAPEWRITE DRUMEND FILE、、REWINDおよびBACKSPACEPAUSE、STOP、 そしてCONTINUEFREQUENCY(コンパイラに最適化のヒントを提供するための)ステートメント。この算術IF式は、704で利用可能だった3方向比較命令(CAS:アキュムレータとストレージの比較)を彷彿とさせるものでしたが、(容易には実装できませんでした)。この式は、数値を比較する唯一の方法、つまり差をテストする方法を提供していましたが、オーバーフローのリスクを伴いました。この欠点は、後にFORTRAN IVで導入された「論理」機能によって克服されました。
このFREQUENCYステートメントは元々、算術ステートメントの 3 つの分岐ケースの分岐確率を示すために(オプションで)使用されていましたIF。また、ループが何回繰り返さDOれるかを示すためにも使用できました。最初の FORTRAN コンパイラは、この重み付けを使用してコンパイル時に生成されたコードのモンテカルロ シミュレーションを実行し、その結果を使用してメモリ内の基本ブロックの配置を最適化しました。これは当時としては非常に高度な最適化でした。モンテカルロ法については、Backus らによるこの最初の実装に関する論文「The FORTRAN Automatic Coding System」に記載されています。
プログラムの基本単位は基本ブロックです。基本ブロックとは、1つのエントリポイントと1つの出口ポイントを持つプログラムの区間です。第4節の目的は、第5節のために、基本ブロックを列挙し、各基本ブロックについて、フロー内でその直前の先行ブロックになり得る基本ブロックと、そのような各基本ブロックリンクの絶対頻度を一覧表示する先行ブロック表(PRED表)を準備することです。この表は、プログラムをモンテカルロ方式で1回実行することによって得られます。モンテカルロ方式では、IF型ステートメントと計算されたGO TOから生じる条件付き転送の結果は、指定されたFREQUENCYステートメントに応じて適切に重み付けされた乱数発生器によって決定されます。[ 19 ]
最初の FORTRAN コンパイラは、エラーが見つかったときにプログラムを停止し、コンソールにエラー コードを出力することで診断情報を報告しました。プログラマはそのコードをオペレーター マニュアルのエラー メッセージ テーブルで調べることができ、問題の簡単な説明が得られました。[ 10 ] : p.19–20 [ 28 ]その後、NASA によって開発された、ゼロ除算などのユーザー エラーを処理するエラー処理サブルーチン[ 29 ]が組み込まれ、エラーが含まれているコード行をユーザーに通知しました。



ディスクファイル、テキストエディタ、端末が開発される以前は、プログラムはキーパンチキーボードを使って80桁のパンチカードに入力されることがほとんどでした。1枚のカードに1行ずつ入力され、完成したカードはカードリーダーに読み込まれてコンパイルされました。パンチカードのコードには小文字や多くの特殊文字が含まれていなかったため、FORTRANで使用される特殊文字を正しく印刷できるIBM 026キーパンチの特別バージョンが提供されていました。
パンチカード入力の慣習を反映して、Fortranプログラムは当初、固定列形式で記述されていました。1列目に「C」という文字があると、カード全体がコメントとして扱われ、コンパイラによって無視されました。それ以外の場合、カードの列は4つのフィールドに分割されていました。
したがって、73 列目から 80 列目は、カードの束が落ちた場合にカードを並べ替えるために使用できるシーケンス番号やテキストなどの識別情報に使用できます。ただし、実際にはこれは安定した本番プログラムのために予約されていました。IBM 519 を使用してプログラム デッキをコピーし、シーケンス番号を追加することができました。IBM 650 などの初期のコンパイラには、カード リーダーの制限により追加の制限がありました。[ 31 ]キー パンチは、7 列目にタブして 72 列目以降をスキップするようにプログラムできました。後のコンパイラは固定フォーマットの制限のほとんどを緩和し、この要件は Fortran 90 標準で削除されました。
ステートメント フィールド内では、テキスト リテラル以外の空白文字AVG OF X(ブランク) は無視されました。これにより、簡潔にするためにトークン間のスペースを省略したり、明確化のために識別子内にスペースを含めたりすることができました。たとえば、は有効な識別子で、AVGOFXと同等です。また、 は有効なステートメントで、 と同等です。これは、6 列目のゼロがスペースとして扱われるためです。一方、 は、 という変数に 1.101 を代入したものです。カンマとピリオドのわずかな視覚的な違いに注意してください。101010DO101I=1,10110101DO 101I=1,101101010DO101I=1.10110101DO101I=1.101DO101I
ホレリス文字列は、元々はFORMAT文とDATA文でのみ使用可能でしたが、文字数と文字H(例26HTHIS IS ALPHANUMERIC DATA.:)を接頭辞として付けることで、文字列内に空白文字を保持することができました。しかし、文字数の間違いが問題となりました。
IBMのFORTRAN IIは1958年に登場しました。主な改良点は、参照渡しされたパラメータを持つ値を返すユーザー作成のサブルーチンと関数を可能にすることで、手続き型プログラミングをサポートすることでした。COMMONステートメントは、サブルーチンが共通(またはグローバル)変数にアクセスする方法を提供しました。6つの新しいステートメントが導入されました。[ 32 ]
SUBROUTINE、FUNCTION、 そしてENDCALLそしてRETURNCOMMONコンピューティングの先駆者であるロバート・ベマーの見解では、言語に個別にコンパイルされたサブルーチンが追加されたことは、「オリジナルのFORTRANと同等の重要性を持つ開発」であった。[ 15 ]
その後数年間で、FORTRAN II はDOUBLE PRECISIONおよびCOMPLEXデータ型のサポートを追加しました。
初期の FORTRAN コンパイラは、サブルーチンでの再帰をサポートしていませんでした。初期のコンピュータ アーキテクチャはスタックの概念をサポートしておらず、サブルーチン呼び出しを直接サポートしていた場合でも、戻り位置はサブルーチン コードに隣接する固定位置 ( IBM 1130など) または特定のマシン レジスタ ( IBM 360以降) に格納されることが多かったため、スタックがソフトウェアによって維持され、呼び出しが行われる前に戻りアドレスがスタックに格納され、呼び出しが戻った後に復元される場合にのみ再帰が可能になります。再帰の欠如は、特定のアルゴリズムやアプリケーションと組み合わせて言語を使用する際に大きな障害となり、[ 33 ]実際、プログラマがそのようなことを考える方法を制限していました。[ 34 ] FORTRAN 77 では規定されていませんでしたが、多くの F77 コンパイラはオプションとして再帰をサポートしており、[ 35 ]再帰が組み込まれた設計のBurroughsメインフレームはデフォルトでサポートしていました。これは、新しいキーワード RECURSIVE によって Fortran 90 で標準となりました。[ 36 ]
このプログラムは、ヘロンの公式を解くために、入力として3つの5桁の整数A、B、Cを含むテープリール上のデータを読み込みます。使用できる「型」宣言はありません。変数名がI、J、K、L、M、またはNで始まる変数は「固定小数点」(つまり整数)であり、それ以外の場合は浮動小数点です。この例では整数を処理するため、変数名は文字「I」で始まります。変数名は文字で始まり、FORTRAN IIでは最大6文字まで、文字と数字の両方を使用できます。A、B、Cが平面幾何学における三角形の辺を表せない場合、プログラムの実行はエラーコード「STOP 1」で終了します。そうでない場合は、A、B、C の入力値を示す出力行が印刷され、続いて計算された三角形の面積が浮動小数点数として出力行に沿って 10 スペースを占め、小数点以下 2 桁 (ラベル 601 の FORMAT ステートメントの F10.2 の .2) で表示されます。
C 標準的な平方根関数を用いた三角形の面積C入力 - テープリーダーユニット5、整数入力C出力 - ラインプリンタユニット6、実出力C 入力エラー表示エラー出力コード 1 ジョブ制御リスト入力テープ5、501 、IA 、IB 、ICを読み込む 501フォーマット( 3 I5 )C IA、IB、およびICは負の値またはゼロであってはなりません。C さらに、三角形の2辺の和Cは3辺目より大きくなければならないので、それも確認します。IF ( IA ) 777、777、701 701 IF ( IB ) 777、777、702 702 IF ( IC ) 777 , 777 , 703 703 IF ( IA + IB - IC ) 777 、777 、704 704 IF ( IA + IC - IB ) 777 、777 、705 705 IF ( IB + IC - IA ) 777 、777 、799 777ストップ1C ヘロンの公式を使用して計算します三角形の面積 799 S = FLOATF ( IA + IB + IC ) / 2.0面積= SQRTF ( S * ( S - FLOATF ( IA )) * ( S - FLOATF ( IB )) *+ ( S - FLOATF ( IC )))出力テープ6、601 、IA 、IB 、IC 、AREAに書き込みます 601フォーマット( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H AREA = , F10 . 2 ,+ 13 H平方単位)停止終わりIBMは1958年にインラインアセンブリコードなどの機能を備えたFORTRAN IIIも開発しましたが、このバージョンは製品としてリリースされることはありませんでした。704 FORTRANやFORTRAN IIと同様に、FORTRAN IIIにはマシン依存の機能が含まれており、そのコードで書かれたコードはマシン間で移植不可能でした。また、ブール式のサポートもありました。[ 11 ] : 76 他のベンダーが提供した初期のFORTRANバージョンも同様の欠点を抱えていました。
IBMは顧客の要望を受けて1961年にFORTRAN IVの開発を開始しました。FORTRAN IVはFORTRAN IIのマシン依存機能(などREAD INPUT TAPE)を削除し、LOGICALデータ型、論理ブール式、算術IF文の代替としての論理IF文などの新機能を追加しました。 型宣言が追加され、IMPLICIT変数名が、、、、、、またはで始まる場合は、それ以外の場合はとなるという以前の慣例を上書きする文も追加INTEGERされました。[ 37 ]: pp.70、71 [ 38 ]: p.6–9IJKLMNREAL
FORTRAN IVは最終的に1962年にリリースされ、最初はIBM 7030(「Stretch」)コンピュータ向けで、続いて1963年にIBM 7090/7094向けバージョン[ 39 ]、そして1966年にIBM 1401向けバージョン[ 40 ]がリリースされました。
1965年までに、FORTRAN IVは米国規格協会X3.4.3 FORTRANワーキンググループによって開発されていた標準に準拠することになっていた。[ 14 ]
1966年から1968年にかけて、IBMはSystem/360向けに複数のFORTRAN IVコンパイラを提供した。それぞれのコンパイラは、実行に必要な最小メモリ量を示す文字で命名されていた。 [ 41 ] 文字(F、G、H)は、System/360のモデル番号でメモリサイズを示すために使用されたコードと一致しており、文字が増えるごとにメモリサイズが2倍ずつ大きくなっていた。[ 42 ] : p. 5
特に、FORTRAN H コンパイラは、ループ中に変数の値を保持するために特定のレジスタセットを割り当てるなど、特定の種類の最適化手法の開発において重要な役割を果たしました。[ 43 ]全体として、コンパイラには 3 つのレベルの最適化が可能でした。[ 43 ] Fortran コンパイラの開発者は、最適化を無効にする機能が必要であることを早い段階で認識していました。なぜなら、最適化は、そもそも動作しないことが多いプログラムの実行時にコンパイル時間を大幅に増加させるからです。[ 15 ] 利用可能なメイン メモリの量が増えたにもかかわらず、FORTRAN H コンパイラは依然として多数のオーバーレイによって構成されていました。[ 43 ]全体として、Fortran コンパイラは IBM にとって重要な収益源であり、 1966 年の売上高は約 3 億ドル ( 2025 年換算で29 億 7700 万ドル) でした。[ 15 ]
デジタル・イクイップメント・コーポレーションは、 1967年から1975年までPDP-10用のDECSYSTEM-10 Fortran IV(F40)を維持した。[ 38 ] UNIVAC 1100シリーズ、Control Data 6000シリーズ、7000シリーズシステム用のコンパイラも利用可能だった。[ 44 ]
当時のFORTRAN IVプログラミング環境では、Control Data Corporation(CDC)システムで使用されていたものを除き、1行に1つの命令しか記述できませんでした。CDC版では、$(ドル記号)で区切れば、1行に複数の命令を記述することができました。FORTRANシートは、前述のように4つのフィールドに分割されていました。
当時のコンパイラである IBM "G" と UNIVAC は、命令と同じ行に特殊文字「マスタースペース」で区切られたコメントを記述することを許可していました。UNIVAC の場合は V (パーフォレーション 7 と 8)、IBM の場合はパーフォレーション 12/11/0/7/8/9 (16 進数の FF) です。これらのコメントは継続カードの途中に挿入してはなりませんでした。[ 38 ] [ 44 ]
FORTRANの初期の歴史において、おそらく最も重要な出来事は、米国規格協会(現在の米国国家規格協会(ANSI))が、ビジネス機器製造業者協会(BEMA)の支援を受けて、米国標準Fortranを開発するための委員会を設立することを決定したことだろう。その結果、1966年3月に承認された2つの規格は、2つの言語、FORTRAN(事実上の標準として機能していたFORTRAN IVに基づく)とBasic FORTRAN(FORTRAN IIに基づくが、マシン依存の機能を取り除いたもの)を定義した。最初の規格で定義されたFORTRANは、正式にはX3.9-1966と表記され、FORTRAN 66として知られるようになった(ただし、多くの人は、この規格の基盤となった言語であるFORTRAN IVと呼び続けた)。FORTRAN 66は、事実上、FORTRANの最初の業界標準バージョンとなった。FORTRAN 66には以下が含まれる。
SUBROUTINEおよびFUNCTIONプログラムBLOCK DATAユニットINTEGER、、、、およびデータ型REALDOUBLE PRECISIONCOMPLEXLOGICALCOMMON、、DIMENSIONおよびEQUIVALENCE声明DATA初期値を指定するためのステートメントEXTERNAL(ライブラリ)関数GO TO計算、GO TO割り当てGO TO、およびASSIGNステートメントIFかつ算術的な(三者択一の)IF命題DOループ文READ、、、、およびシーケンシャルI/OWRITEのステートメントBACKSPACEREWINDENDFILEFORMAT声明および割り当てられたフォーマットCALL、、、および声明RETURNPAUSESTOPDATAおよびFORMATプロシージャの引数として使用されます。ENDライン上記のFortran II版HeronプログラムをFortran 66プログラムとしてコンパイルするには、いくつかの修正が必要です。修正内容には、よりマシンに依存しないバージョンのREADandWRITE文の使用、および不要なFLOATF型変換関数の削除が含まれます。必須ではありませんが、算術IF式をより構造化された論理式と論理文を使用するように書き直すことも可能ですIF。
C 標準的な平方根関数を用いた三角形の面積C入力 - テープリーダーユニット5、整数入力C出力 - ラインプリンタユニット6、実出力C 入力エラー表示エラー出力コード 1 ジョブ制御リスト読む(5,501 )IA 、IB 、IC 501フォーマット( 3 I5 )CC IA、IB、およびICは負の値またはゼロであってはなりません。C さらに、三角形の2辺の和Cは3辺目より大きくなければならないので、それも確認します。IF ( IA . GT . 0 . AND . IB . GT . 0 . AND . IC . GT . 0 ) GOTO 10WRITE ( 6 , 602 ) 602形式(42 H IA 、IB 、およびICはゼロより大きい値でなければなりません。)ストップ1 10続きCIF ( IA + IB - IC . GT . 0+ . AND . IA + IC - IB . GT . 0+ . AND . IB + IC - IA . GT . 0 ) GOTO 20WRITE ( 6 , 603 ) 603形式(50H 2辺の合計は3辺目より大きくなければなりません。)ストップ1 20続きCC ヘロンの公式を使用して計算します三角形の面積S = ( IA + IB + IC ) / 2.0面積= SQRT ( S * ( S - IA ) * ( S - IB ) * ( S - IC ))書き込み( 6,601 ) IA 、IB 、IC 、AREA 601フォーマット( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H AREA = , F10 . 2 ,+ 13 H平方単位)停止終わりほとんどの軍事関連アプリケーションには不向きであるにもかかわらず、Fortran は 1970 年代に米国国防総省が使用を承認した数少ない高級言語の 1 つです。[ 34 ]これらはすべて国防総省が後援するAda プログラミング言語に置き換えられる予定でしたが、[ 34 ]それは実現せず、Ada 9X改訂の根拠は、多くの数学ソフトウェアがまだ存在し、Fortran で記述されていたため、Fortran ルーチンと明示的にインターフェースするためのサポートが Ada に必要だったことを示しています。[ 45 ]


FORTRAN 66規格のリリース後、コンパイラベンダーはStandard Fortranにいくつかの拡張機能を導入したため、ANSI委員会X3J3は1969年に、コンピュータビジネス機器製造業者協会(旧BEMA)であるCBEMAの後援の下、1966年規格の改訂作業を開始しました。この改訂版規格の最終草案は1977年に配布され、1978年4月に新しいFORTRAN規格が正式に承認されました。FORTRAN 77と呼ばれ、正式にはX3.9-1978と表記されるこの新しい規格は、FORTRAN 66の多くの欠点を解消するために、いくつかの重要な機能を追加しました。
IFとEND IFステートメント、ELSE IFおよびオプションの句を使用して、構造化プログラミングELSEに対する言語サポートを向上させます。DOループ拡張機能(パラメータ式、負の増分、ゼロトリップカウントを含む)OPEN、、CLOSEおよびINQUIREI/O機能を向上させるためのステートメントCHARACTERデータ型。ホレリス文字列を、文字入出力および文字ベースデータの処理のための大幅に拡張された機能で置き換える。PARAMETER定数を指定するためのステートメントSAVE永続的なローカル変数に関するステートメントSQRT他の型(例:またはCOMPLEX)REAL*16の引数も受け入れます)。LGE、、、)のセット。(これらのASCII関数は、米国国防総省が条件付き承認投票で要求したものです。)LGTLLELLTこの規格の改訂では、以前の規格に準拠していたプログラムを無効にする可能性のある機能が多数削除または変更されました。(当時、ANSI規格には「非推奨」という概念がまだなかったため、X3J3に代わる唯一の選択肢は削除でした。)競合リスト(X3.9-1978の付録A2を参照)の24項目のほとんどは、以前の規格で許可されていたもののほとんど使用されていなかった抜け穴や異常なケースに対処するものでしたが、次のような特定の機能が意図的に削除されました。
GREET=12HHELLOTHERE!次元A ( 10 , 5 ) Y = A ( 11 , 1 )Heron プログラムの Fortran 77 バージョンは、Fortran 66 バージョンに変更を加える必要はありません。ただし、この例では、リスト指向の I/O の使用や、ステートメント内の Hollerith 編集記述子を引用符付き文字列に置き換えるなど、I/O ステートメントのさらなるクリーンアップを示しています。また、 /ではなく、構造化されたandステートメントFORMATを使用しています。IFEND IFGOTOCONTINUE
プログラムヘロンC 標準的な平方根関数を用いた三角形の面積C入力 - デフォルト標準入力単位、整数入力C出力 - デフォルトの標準出力単位、実出力C 入力エラー表示エラー出力コード 1 ジョブ制御リスト読み取り(* 、* )IA 、IB 、ICCC IA、IB、およびICは負の値またはゼロであってはなりません。C さらに、三角形の2辺の和Cは3辺目より大きくなければならないので、それも確認します。IF ( IA . LE . 0 . OR . IB . LE . 0 . OR . IC . LE . 0 ) THENWRITE ( * , * ) 'IA、IB、およびICはゼロより大きい必要があります。'ストップ1END IFCIF ( IA + IB - IC . LE . 0+ . OR . IA + IC - IB . LE . 0+ .または. IB + IC - IA . LE . 0 ) THENWRITE ( * , * ) '2辺の合計は3辺目より大きくなければならない。'ストップ1END IFCC ヘロンの公式を使用して計算します三角形の面積S = ( IA + IB + IC ) / 2.0面積= SQRT ( S * ( S - IA ) * ( S - IB ) * ( S - IC ))書き込み(* 、601 )IA 、IB 、IC 、AREA 601 FORMAT ( 'A= ' , I5 , ' B= ' , I5 , ' C= ' , I5 , ' AREA= ' , F10 . 2 ,+ '平方単位' )停止終わりFORTRAN 77の後継となる改訂版標準の開発は、コンピューティングとプログラミングの実践における急速な変化に標準化プロセスが追いつくのに苦労したため、度々延期された。その間、約15年間「標準FORTRAN」として、FORTRAN 77は歴史的に最も重要な方言となった。
FORTRAN 77 の重要な実用的な拡張は、1978 年にリリースされた MIL-STD-1753 でした。[ 46 ]米国国防総省によって開発されたこの仕様は、ほとんどの FORTRAN 77 コンパイラで実装されているものの、ANSI FORTRAN 77 規格には含まれていない多くの機能を標準化しました。これらの機能は最終的に Fortran 90 規格に組み込まれることになります。
DO WHILEおよびEND DO声明INCLUDE声明IMPLICIT NONEIMPLICIT声明の変形1991年にリリースされたIEEE 1003.9 POSIX規格は、FORTRAN 77プログラマがPOSIXシステムコールを発行するためのシンプルな手段を提供しました。[ 47 ]この文書では100を超えるコールが定義されており、 POSIX互換のプロセス制御、シグナル処理、ファイルシステム制御、デバイス制御、プロシージャのポインティング、ストリームI/Oへのアクセスを移植可能な方法で可能にしました。
長らく開発が遅れていたFORTRAN 77の後継バージョン(非公式にはFortran 90、それ以前はFortran 8Xと呼ばれていた)は、1991年にISO/IEC規格1539:1991として、1992年にはANSI規格としてようやくリリースされた。この大幅な改訂では、公式の綴りをFORTRANからFortranに変更しただけでなく、1978年の規格以降に進化してきたプログラミング手法の大きな変化を反映するために、多くの新機能が追加された。
&次の行の6列目ではなく、行末の文字で指定されます。空白も意味を持ちます。通常、ファイル名が「」で終わるファイルは、.f90自由形式のソースコードであることを示します。従来の固定形式のソースコードも定義されていますが、廃止されたとみなされています。X(1:N)=R(1:N)*COS(A(1:N))WHERE選択的配列割り当てのためのステートメントRECURSIVE手順ALLOCATABLE属性とALLOCATEステートメントによるDEALLOCATE動的メモリ割り当てPOINTER属性、ポインタ代入、およびステートメントを使用して、動的データ構造NULLIFYの作成と操作を容易にします。END DO、通常のループ反復を秩序正しく終了させるためのステートメントを備えた、構造化されたループ構造。EXITCYCLEDOSELECT CASE、、、、、多方向選択CASEのためCASE DEFAULTのEND SELECT構成以前の改訂とは異なり、Fortran 90 では機能が削除されませんでした。[ 48 ]標準に準拠した FORTRAN 77 プログラムはすべて Fortran 90 でも標準に準拠しており、どちらの標準でもその動作を定義できたはずです。
少数の機能が「時代遅れ」と判断され、将来の標準規格で削除される予定でした。これらの初期バージョンの機能はすべて、より新しいFortranの機能で実現可能です。古いプログラムの移植を容易にするために一部は残されていますが、多くはFortran 95で削除されました。
プログラムhelloworld print * , "Hello, World!" end プログラムhelloworldISO/IEC 1539-1:1997として正式に発行されたFortran 95は、主にFortran 90規格の未解決の問題を解決するために行われたマイナーアップデートでした。しかしながら、Fortran 95は、特に高性能Fortran仕様からの拡張機能も多数追加しています。
FORALLベクトル化を支援するためのネストされたWHERE構造PUREおよびELEMENTAL手順NULL()ALLOCATABLE配列はスコープ外になると自動的に解放されることが明確に定義されている。いくつかの組み込み関数が拡張されました(例えば、組み込み関数dimに引数が追加されましたmaxloc)。
Fortran 90で「時代遅れ」と指摘されていたいくつかの機能は、Fortran 95から削除されました。
DOREALおよびDOUBLE PRECISIONインデックス変数を使用するステートメントEND IFブロック外からの声明に分岐するPAUSE声明ASSIGN割り当てられたGO TOステートメント、および割り当てられたフォーマット指定子Hホレリス編集記述子。Fortran 95 の重要な補足資料として、ISO 技術報告書TR-15581: Enhanced Data Type Facilities(非公式にはAllocatable TR として知られる)がありました。 この仕様では、 ALLOCATABLEFortran 2003 に完全準拠した Fortran コンパイラが利用可能になる前に、配列の拡張された使用法が定義されました。このような使用法にはALLOCATABLE、派生型コンポーネントとしての配列、プロシージャのダミー引数リスト、および関数の戻り値としてのALLOCATABLE配列が含まれます。(配列は、 Fortran 95 によってスコープ外になったときに自動的に解放されることが保証されているPOINTERため、メモリリークの可能性が排除され、ポインタベースの配列よりも好ましいです。さらに、アロケータブル配列の要素は連続しており、配列参照の最適化においてエイリアシングの問題がないため、コンパイラはポインタの場合よりも高速なコードを生成できます。[ 49 ])ALLOCATABLE
Fortran 95のもう一つの重要な補足資料は、 ISO技術報告書TR-15580「浮動小数点例外処理」(通称IEEE TR)でした。 この仕様では、 IEEE浮動小数点演算と浮動小数点例外処理のサポートが定義されていました。
必須の「基本言語」(ISO/IEC 1539-1 : 1997で定義)に加えて 、Fortran 95言語には2つのオプションモジュールが含まれていました。
これらが一体となって、複数部構成の国際規格(ISO/IEC 1539)を構成する。
標準規格の開発者によると、「オプション部分は、多数のユーザーや実装者から要望があったものの、すべての標準準拠Fortranコンパイラで必須となるほど汎用性が高いとはみなされていない、自己完結型の機能を記述している」とのことです。ただし、標準準拠Fortranがそのようなオプションを提供する場合は、「標準規格の該当部分に記載されている機能の説明に従って提供されなければならない」としています。
21世紀の標準によって定義された言語、特にオブジェクト指向プログラミングのサポートとそれに続くCoarray Fortranの組み込みにより、「モダンFortran」と呼ばれることが多く、この用語は文献でますます使用されるようになっている。[ 50 ]
ISO/IEC 1539-1:2004として正式に発行されたFortran 2003は、多くの新機能を導入したメジャー改訂版でした。 [ 51 ] Fortran 2003の新機能の包括的な概要は、Fortranワーキンググループ( ISO/IEC JTC1/SC22 /WG5)の公式Webサイトで入手できます。[ 52 ]
その記事によると、今回の改訂における主な改善点は以下のとおりです。
VOLATILE属性、配列コンストラクタと割り当てステートメントでの明示的な型指定、ポインタの強化、拡張初期化式、および強化された組み込みプロシージャFLUSH、キーワードの正規化、エラーメッセージへのアクセスFortran 2003 の重要な補足資料として、ISO 技術報告書TR-19767「Fortran の拡張モジュール機能」が挙げられます。 この報告書ではサブモジュールが提供され、 Fortran モジュールがModula-2モジュールにより近いものになりました。これらはAda のプライベート子サブユニットに似ています。これにより、モジュールの仕様と実装を別々のプログラム単位で表現できるようになり、大規模ライブラリのパッケージングが改善され、明確なインターフェースを公開しながら企業秘密を保護し、コンパイルの連鎖を防ぐことができます。
ISO/IEC 1539-1:2010(通称Fortran 2008)は、2010年9月に承認されました。[ 53 ] [ 54 ] Fortran 95と同様に、これはマイナーアップグレードであり、Fortran 2003の明確化と修正を組み込むとともに、いくつかの新機能を導入しています。新機能には以下が含まれます。
最終草案国際規格(FDIS)は文書N1830として入手可能です。[ 55 ]
Fortran 2008 の補足として、国際標準化機構(ISO) 技術仕様 (TS) 29113 「Fortran と C の相互運用性の向上」 [ 56 ] [ 57 ]が 2012 年 5 月に ISO に承認のために提出されました。この仕様では、 C から配列記述子にアクセスするサポートが追加され、引数の型とランクを無視できるようになります。
Fortran 2018 改訂版は、以前は Fortran 2015 と呼ばれていました。[ 58 ]これは重要な改訂であり、2018 年 11 月 28 日にリリースされました。[ 59 ]
Fortran 2018には、以前に公開された2つの技術仕様が組み込まれています。
その他の変更点と新機能には、ISO/IEC/IEEE 60559:2011 (最新のマイナーリビジョン IEEE 754–2019より前のIEEE 浮動小数点標準のバージョン) のサポート、16 進数の入出力、IMPLICIT NONE の拡張、その他の変更が含まれます。[ 62 ] [ 63 ] [ 64 ] [ 65 ]
Fortran 2018では、算術演算用のIF文が削除されました。また、END DO文やCONTINUE文で終了しないループである非ブロックDO構文も削除されました。これらはFortran 90以降、言語の廃止された部分となっていました。
新たに廃止される機能は、COMMON および EQUIVALENCE ステートメント、BLOCK DATA プログラム ユニット、ラベル付き DO ループ、組み込み関数の特定の名前、および FORALL ステートメントと構造です。
Fortran 2023 (ISO/IEC 1539-1:2023) は 2023 年 11 月に発行され、ISO から購入できます。[ 66 ] Fortran 2023 は Fortran 2018 のマイナーな拡張で、Fortran 2018 のエラーや欠落の修正に重点を置いています。また、条件式や引数、簡単な手続き、列挙型機能など、いくつかの小さな機能も追加されています。度数と半回転に基づく三角関数も追加されました。度数に基づく三角関数は、以前はベンダーの拡張機能として非常に一般的でした。
Fortran 95で導入されたFortran言語の機能の詳細については、関連記事「Fortran 95の言語機能」を参照してください。それ以降の規格で定義された言語バージョンは、まとめて「モダンFortran」と呼ばれることが多く、関連文献で説明されています。



BASICの著者による1968年の論文では既にFORTRANを「時代遅れ」と評していたが[ 67 ] 、何十年にもわたってFORTRANでプログラムが書かれており、科学技術コミュニティ全体で日常的に使用されているFORTRANソフトウェアが膨大に存在する。[ 68 ]ジェイ・パサチョフは1984年に「物理学や天文学の学生はFORTRANを学ぶ必要がある。FORTRANには非常に多くのものが存在するため、科学者がPascal、Modula-2、あるいは他の言語に変更する可能性は低いと思われる」と書いている[ 69 ]。 1993年、セシル・E・レイスはFORTRANを「科学計算の母語」と呼び、他の言語による置き換えは「絶望的な希望のままかもしれない」と付け加えた[ 70 ] 。
Fortran は、天文学、気候モデリング、計算化学、計算経済学、計算流体力学、計算物理学、データ分析[ 71 ] 、水文モデリング、数値線形代数および数値ライブラリ ( LAPACK、IMSLおよびNAG )、最適化、衛星シミュレーション、構造工学、天気予報[ 72 ]など、最も集中的なスーパーコンピューティング タスクの一部で主要な言語となっています。新しいコンピュータ プロセッサの性能を測定するための浮動小数点ベンチマークの多くは、 SPECベンチマーク (例: CFP2006、CFP2017 ) の浮動小数点コンポーネントのようにFortran で記述されています。数学アルゴリズムはNumerical Recipesで十分に文書化されています。
これとは別に、計算科学におけるより現代的なコードでは、グラフ分割のためのMETIS 、線形代数機能のためのPETScやTrilinos 、メッシュおよび有限要素サポートのためのdeal.IIやFEniCS 、その他の汎用ライブラリなど、大規模なプログラムライブラリが一般的に使用されています。2000年代初頭から、広く使用されているサポートライブラリの多くはC言語でも実装され、最近ではC++でも実装されています。一方、Wolfram Language、MATLAB、Python、Rなどの高水準言語は、計算科学の特定の分野で人気が高まっています。その結果、科学プログラムの大部分は、このような高水準スクリプト言語でも記述されるようになっています。このため、C言語との相互運用機能がFortran 2003に追加され、ISO/IEC技術仕様29113によって強化されました。この仕様はFortran 2018に組み込まれ、他のプログラミング言語とのより柔軟な相互運用を可能にしています。
初期の頃は、合意された標準規格(IBM のリファレンス マニュアルさえも)が存在しなかったため、移植性に問題がありました。コンピュータ カンパニーは、互換性のない機能を提供することで、他社製品との差別化を図っていました。標準規格によって移植性は改善されました。1966 年の標準規格は参照構文と意味論を提供しましたが、ベンダーは互換性のない拡張機能を提供し続けました。慎重なプログラマは、互換性のない拡張機能の使用が移植性の高コストな問題を引き起こすことに気づき、PFORT Verifier [ 73 ] [ 74 ]などのプログラムを使用するようになりましたが、米国政府が購入するプロセッサが標準規格の拡張機能を診断することが義務付けられたのは、1977 年の標準規格、つまり米国標準局 (現在のNIST ) がFIPS PUB 69を発行した後になってからのことでした。2 つのプロセッサを提供するのではなく、最終的にはほぼすべてのコンパイラが拡張機能を診断するオプションを少なくとも備えていました。[ 75 ] [ 76 ]
互換性のない拡張機能は、移植性の問題ではありませんでした。数値計算では、算術の特性を考慮することが重要です。これは、Fox らが 1966 年の標準のコンテキストでPORTライブラリによって対処しました。[ 74 ]そこでのアイデアは広く使用され、最終的には組み込みの照会関数によって 1990 年の標準に組み込まれました。バイナリ浮動小数点演算のIEEE 754標準が広く (現在ではほぼ普遍的に) 採用されたことで、この問題は実質的に解消されました。
コンピューティング環境(例えば、プログラムのコマンドライン、環境変数、エラー状況のテキストによる説明など)へのアクセスは、2003年の標準規格で解決されるまで問題として残っていた。
グラフィックスライブラリなど、工学や科学計算に緩やかに関連するライブラリソフトウェアの大規模なコレクションはC言語で記述されているため、それらへのアクセスには移植性の問題が生じていた。この問題は、2003年の標準規格にC言語の相互運用性を組み込むことで解決された。
現在では、プリプロセッサに頼ることなく、Fortranで完全に移植可能なプログラムを作成することが可能であり、比較的容易である。
Fortran 66 規格が開発されるまで、各コンパイラは独自の Fortran バリアントをサポートしていました。主流から大きく逸脱しているものもあれば、そうでないものもありました。当時最も有名な教科書の 1 つですが、Daniel D. McCrackenのA Guide to FORTRAN IV Programming (1965) では、24 の機能の違いと 29 のメーカーおよびコンピュータのバージョンを比較した 2 ページにわたるマトリックスが掲載されています。[ 14 ] 同時代の別の教科書の著者であるJohn M. Blatt は、同じことをするのは無理だと嘆き、「メーカーは「自社の」FORTRAN をセールス ポイントとみなす傾向があり、FORTRAN のある方言が何らかの「ギミック」を獲得すると、他の方言がそれを上回ろうとする」と書いています。[ 77 ]それにもかかわらず、Fortran プログラムはアセンブリ言語のプログラムよりもはるかに移植性が高く、実際には、あるメーカーの Fortran に精通している人は、別のメーカーの Fortran に容易に適応することができました。[ 78 ]
Fortran 5は、1970年代初頭から1980年代初頭にかけて、データ・ゼネラル社によってNova、Eclipse、MVといったコンピュータ向けに販売されました。当時のミニコンピュータ向けには非常に優れた最適化コンパイラを備えていました。この言語はFORTRAN 66に最も近いものです。
FORTRAN Vは、 1968年にControl Data CorporationによってCDC 6600シリーズ向けに配布されました。この言語はFORTRAN IVをベースにしています。[ 79 ]
Univacは、1100シリーズ向けにFORTRAN Vというコンパイラも提供していた。Univac Fortran Vから派生したのがAthena FORTRANである。
高性能科学計算機のベンダー(例えば、Burroughs、Control Data Corporation (CDC)、Cray、Honeywell、IBM、Texas Instruments、UNIVACなど)が開発した特定のバリアントは、命令キャッシュ、CPUパイプライン、ベクトル配列などの特殊なハードウェア機能を活用するためにFortranに拡張機能を追加しました。例えば、IBMのFORTRANコンパイラの1つ(H Extended IUP )は、複数の内部演算ユニットを同時に稼働させるためにマシンコード命令の順序を変更する最適化レベルを備えていました。もう1つの例は、 NASAエイムズ研究センターで稼働しているスーパーコンピュータILLIAC IV向けに特別に設計されたFORTRANの特殊なバリアントであるCFDです。IBM研究所は、ベクトルと行列を処理するためのVECTRANと呼ばれる拡張FORTRANベースの言語も開発しました。
オブジェクト指向Fortranは、Fortranのオブジェクト指向拡張であり、データ項目をオブジェクトにグループ化し、インスタンス化して並列実行することができます。Solaris 、IRIX、NeXTSTEP、iPSC、nCUBEで利用可能でしたが、現在はサポートされていません。[ 80 ] [ 81 ]
こうしたマシン固有の拡張機能は、時間の経過とともに消滅するか、あるいは主要標準にその要素が組み込まれてきました。現在も残っている主要な拡張機能はOpenMPで、これは共有メモリプログラミングのためのクロスプラットフォーム拡張機能です。また、並列プログラミングをサポートすることを目的とした新しい拡張機能であるCoarray Fortranも登場しました。
FOR TRANSITは、IBM 704 FORTRAN言語の簡略版の名称で、1950年代後半にカーネギー研究所で開発された翻訳プログラムを使用してIBM 650向けに実装されました。 [ 82 ] IBMリファレンスマニュアル( FOR TRANSIT自動コーディングシステムC28-4038、1957年、1959年IBM著作権)には、次のコメントが記載されています。
FORTRANシステムは650よりも複雑なマシン向けに設計されているため、FORTRANプログラマーズ・リファレンス・マニュアルに記載されている32のステートメントの一部はFOR TRANSITシステムでは使用できません。さらに、FORTRAN言語にはいくつかの制限が追加されています。しかし、これらの制限によってFOR TRANSIT用に作成されたソースプログラムが704用のFORTRANシステムと互換性がなくなることはありません。
許容される記述は以下のとおりでした。
a = bGO to nGO TO (n1, n2, ..., nm), iIF (a) n1, n2, n3PAUSESTOPDO n i = m1, m2CONTINUEENDREAD n, listPUNCH n, listDIMENSION V, V, V, ...EQUIVALENCE (a,b,c), (d,c), ...1つのプログラムで最大10個のサブルーチンを使用できる。
FOR TRANSIT文は7列目から56列目までしか使用できませんでした。IBM 650では、入出力にパンチカードが使用されました。ソースコードを「IT」言語に変換し、IT文をSOAPアセンブリ言語にコンパイルし、最後にオブジェクトプログラムを生成するという3段階の処理が必要でした。生成されたオブジェクトプログラムは、マシンにロードして実行できました(データ入力にはパンチカードを使用し、結果もパンチカードに出力しました)。
2000ワードのメモリドラムを備えた650シリーズには、FOR TRANSIT I (S)とFOR TRANSIT IIの2つのバージョンが存在し、後者はインデックスレジスタと自動浮動小数点10進数(25進数)演算機能を備えたマシン向けでした。マニュアルの付録Aには、 IBM 533カードリーダー/パンチ制御パネルの配線図が含まれていました。

最初の FORTRAN コンパイラは、コンパイル済みコードの効率性に関して高い基準を設定しました。この目標はコンパイラの作成を困難にしたため、通常はハードウェアの販売をサポートするためにコンピュータメーカーによって作成されました。実行効率の要件は、言語の初期進化を通じて、言語の主要な設計基準であり続けました。[ 8 ]これにより、重要なニッチが生まれました。コンパイルとロードのフェーズが高速で、プログラマ(この頃には FORTRAN IV が重要な教育ツールになり始めていたため、多くの場合学生でした)に優れた診断を提供するコンパイラです。
1960年代に導入されたWATFORは、大学で広く使用されました。ウォータールー大学によって開発、サポート、配布されたWATFORは、主にFORTRAN IVに基づいていました。[ 77 ] WATFORを使用する学生は、バッチFORTRANジョブを送信でき、構文エラーがなければ、プログラムは直接実行に進みます。この簡素化により、学生はジョブ制御言語(JCL)、コンパイル/リンク編集/実行の連続プロセス、またはメインフレーム環境のその他の複雑さに対処するのではなく、プログラムの構文と意味、または実行ロジックの流れに集中することができました。
さらに、WATFOR は Fortran 言語のスーパーセットを提示し、特に通常の Fortran の書式付きステートメントの代替として、いわゆる「フリー」およびコマンドを提供しました。[ 77 ]READ後者のステートメントはかなりの柔軟性がありましたが、非常に複雑になる可能性があり、[ 8 ]時には製造元の違いやサイト固有のガイドラインの影響を受けることもありました。[ 78 ]書式付きアプローチは経験豊富なプログラマーでさえ困難を引き起こしたため、学生コンパイラで代替手段を提供することは明らかに利点でした。[ 77 ]この簡素化された環境の欠点は、WATFOR がホスト プロセッサの拡張機能を必要とするプログラマーには適していなかったことです。たとえば、WATFOR は通常、I/O デバイスへのアクセスが非常に限られていました。WATFOR はWATFIV [ 77 ]およびそれ以降のバージョンに引き継がれました。PRINTREADWRITE>FORMAT
学生向けのコンパイラとしてはPUFFTがあり、小規模ながらFORGO、Wits Fortran、Kingston Fortran 2などもあった。
FORTRAN 77 より前は、多くのプリプロセッサが一般的に使用されており、プリプロセスされたコードは標準 FORTRAN コンパイラを備えたどのマシンでもコンパイルできるという利点があり、より使いやすい言語を提供していました。[ 83 ]これらのプリプロセッサは通常、構造化プログラミング、6 文字を超える変数名、追加のデータ型、条件付きコンパイル、さらにはマクロ機能もサポートしていました。人気のあるプリプロセッサには、 EFL、FLECS、iftran、MORTRAN、SFtran、S-Fortran、Ratfor、Ratfivなどがありました。たとえば、EFL、Ratfor、Ratfiv はCライクな言語を実装し、標準 FORTRAN 66 でプリプロセスされたコードを出力しました。PFORT プリプロセッサは、コードが言語の移植可能なサブセットに準拠していることを検証するためによく使用されました。Fortran 言語の進歩にもかかわらず、プリプロセッサは条件付きコンパイルとマクロ置換に引き続き使用されています。
プログラム; s = 0 i = 1 , n ; s = s + 1 ;停止i ; s = 's'停止(ラインプログラミング)
LRLTRANは、ローレンス放射線研究所で開発され、システムプログラミングをサポートするための拡張機能として、ベクトル演算や動的ストレージなどの機能を提供するように設計されました。配布版には、リバモア・タイムシェアリング・システム(LTSS)オペレーティングシステムが含まれていました。
Fortran-95規格には、オプションの条件付きコンパイル機能を定義するオプションのパート3が含まれています。この機能はしばしば「CoCo」と呼ばれます。
多くのFortranコンパイラは、Cプリプロセッサのサブセットをシステムに統合している。
SIMSCRIPTは、大規模な離散システムのモデリングとシミュレーションを行うための、アプリケーション固有のFortranプリプロセッサです。
Fプログラミング言語は、Fortran 95 のクリーンなサブセットとして設計され、EQUIVALENCEステートメントなどの Fortran の冗長で非構造化された非推奨の機能を削除しようとしました。F は Fortran 90 で追加された配列機能を保持し、FORTRAN 77 と Fortran 90 の両方に追加された構造化プログラミング構造によって廃止された制御ステートメントを削除します。F は、作成者によって「コンパイルされた構造化配列プログラミング言語であり、特に教育と科学計算に適しています」と説明されています。[ 84 ] Essential Lahey Fortran 90 (ELF90) も同様のサブセットでした。
Laheyと富士通は協力してMicrosoft .NET Framework用のFortranを作成した。[ 85 ] Silverfrost FTN95も.NETコードを作成できる。[ 86 ]
以下のプログラムは、Fortran 90で導入された2つの機能である動的メモリ割り当てと配列ベースの演算を示しています。特に注目すべきは、配列の操作にDOループやIF/THEN文が一切使用されていない点です。数学演算は配列全体に対して適用されます。また、分かりやすい変数名と、現代のプログラミングスタイルに準拠した一般的なコードフォーマットが用いられている点も明らかです。この例では、対話的に入力されたデータに対して平均値を計算します。
プログラム平均! いくつかの数値を読み取って平均を取る! 記載されているとおり、データポイントがない場合、平均値はゼロになります。これは望ましい動作ではないかもしれませんが、この例をシンプルに保つためにこのようにしています。暗黙のなし実数、割り当て可能::ポイント(:)整数::ポイント数実数::平均点、正の平均、負の平均平均得点= 0。positive_average = 0。負の平均= 0。write ( * , * ) "平均化する点の数を入力してください:"(* 、* )ポイント数を読み取る(ポイント(ポイント数))を割り当てるwrite ( * , * ) "平均する点を入力してください:"(* 、* )ポイントを読み込む! ポイントを合計して、ポイント数で割って平均値を求めます。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 ( * , '(a,g12.4)' ) '平均 = ' , average_pointswrite ( * , '(a,g12.4)' ) '正の点の平均 = ' , positive_averagewrite ( * , '(a,g12.4)' ) '負の点の平均 = ' , negative_averageメモリを解放します(ポイント) !最終プログラム平均「FORTRAN 77」という名称が選ばれたのと同じFORTRAN標準化委員会の会議で、「文字Oは有害」というタイトルの風刺的な技術提案が公式配布物に組み込まれた。この提案は、文字「O」と数字のゼロの間で時折発生する混乱に対処するため、許容される変数名から文字「O」を削除するというものだった。しかし、提案された方法は、文字セットから文字「O」を完全に削除することだった(これにより、コロンによって49に増えていた字句文字数を48に維持する)。これは、GO TO以前のように悪名高いステートメントを使用できなくなるため、構造化プログラミングを促進するという点で有益であると考えられた。(厄介なFORMATステートメントも削除される。)これは「既存のプログラムの一部を無効にする可能性がある」が、それらのほとんどは「いずれにせよおそらく非準拠であった」と指摘された。[ 87 ] [ 88 ]
X3J3がFortran 77におけるDOループの最小トリップ回数を0にするか1にするかを議論した際、ローレン・マイスナーは最小トリップ回数を2にすることを提案した。その理由は(冗談めかして) 2未満であればループを使う意味がないからだという。
想定長配列が追加された際、上限と下限を区切るのに適切な文字について議論が巻き起こりました。これらの議論を検証するコメントの中で、ウォルト・ブレインアードは「天文学対消化器病学」というタイトルの記事を執筆しました。これは、一部の支持者がアスタリスク("*")の使用を提案したのに対し、他の支持者はコロン(":")を好んだためです。
変数名が文字 I~N で始まる場合、デフォルトの型は整数型になりますが、それ以外の文字で始まる変数はデフォルトで実数型になります。ただし、プログラマーは明示的な宣言でデフォルトを上書きできます。[ 89 ]このことから、「FORTRAN では、GOD は REAL 型です (INTEGER 型として宣言しない限り)」というジョークが生まれました。
アメリカ数学月報(1978年11月号)は、詩の一行レビューを掲載した。「人を魅了する活気あふれるアプローチ、/スースによく似た手法。/手書きで、イラストとたくさんの笑い声とともに/Fortranを分かりやすく解説している。」
Fortran I のマニュアルは 1956 年に発行されたが、プログラムを正しく実行できるコンパイラが登場したのは 1958 年になってからだった。
もう一つの問題は、Fortranには標準規格がなかったため、わずかに異なるバージョンは、別のコンパイラで使用すると失敗する可能性が高かったことです。
Fortran I コンパイラは、コード最適化における最初の主要なプロジェクトでした。これは、数十年にわたりコンパイラ技術の重要な研究焦点であった一般的な解決策の極めて重要な問題に取り組みました。コンパイラの分析と最適化のための多くの古典的な手法は、Fortran I コンパイラにその起源と着想をたどることができます。
フォートラン標準委員会はデルフトで年次会議を開催した。[...]
...
PORT ... (PFORT) で記述 .. ANS Fortran
Fortranの移植性について議論しています。