| パラダイム | マルチパラダイム:構造化、命令型(手続き型、オブジェクト指向)、ジェネリック、配列 |
|---|---|
| デザイン: | ジョン・バッカス |
| 開発者 | ジョン・バッカスとIBM |
| 初登場 | 1957年 |
| 安定リリース | Fortran 2023 (ISO/IEC 1539:2023) / 2023年11月17日 |
| タイピングの規律 | 強い、静的、明白な |
| ファイル名拡張子 | .f90、、.f.for |
| Webサイト | fortran.org で |
| 主な実装 | |
| Absoft、Cray、GFortran、G95、IBM XL Fortran、Intel、Hitachi、Lahey/Fujitsu、Numerical Algorithms Group、Open Watcom、PathScale、PGI、Silverfrost、Oracle Solaris Studio、その他 | |
| 影響を受けた | |
| スピードコーディング | |
| 影響を受けた | |
| ALGOL 58、BASIC、C、Chapel、[1] CMS-2、DOPE、Fortress、MATLAB、PL/I、PACT I、MUMPS、IDL、Ratfor、SAKO [2] | |
Fortran ( / ˈ f ɔːr t r æ n /、旧称FORTRAN ) は、数値計算や科学計算に特に適した、第 3 世代のコンパイル型命令型 プログラミング言語です。
FortranはもともとIBMによって開発されました。[3] 1958年に初めて正しくコンパイルされました。[4] Fortranコンピュータプログラムは、数値天気予報、有限要素解析、計算流体力学、地球物理学、計算物理学、結晶学、計算化学などの科学および工学アプリケーションをサポートするために書かれています。これは高性能コンピューティングのための人気のある言語であり[5]、世界最速のスーパーコンピュータをベンチマークしてランク付けするプログラムに使用されています。[6] [7]

Fortranは数多くのバージョンと方言を経て進化してきました。1966年、米国規格協会(ANSI)は、わずかに異なる構文を使用するコンパイラの増殖を制限するためにFortranの標準を開発しました。[8]その後のバージョンでは、文字データ型(Fortran 77)、構造化プログラミング、配列プログラミング、モジュラープログラミング、ジェネリックプログラミング(Fortran 90)、並列コンピューティング(Fortran 95)、オブジェクト指向プログラミング(Fortran 2003)、並行プログラミング(Fortran 2008)のサポートが追加されました。

2024年4月以来、Fortranはプログラミング言語の人気度を測るTIOBEインデックスで上位10言語にランクされています。 [9]
ネーミング
FORTRANの最初のマニュアルでは、これを「数式変換システム」と説明し、小文字で「Fortran」と表記した。[10] : p.2 [11]他の資料では、この名前は「数式トランスレータ」 の略であると示唆している。[12]または「数式翻訳」の略である。[13]
初期のIBMコンピュータは小文字をサポートしていなかったため、FORTRAN 77までの言語のバージョン名は通常すべて大文字で表記されていました。[14] FORTRAN 77は、Fortranの文字セットに大文字のみが含まれていた最後のバージョンでした。[15]
Fortran の公式言語規格では、Fortran 90 以降、この言語を頭文字が大文字の「Fortran」と呼んでいます。[引用が必要]
起源

1953年後半、ジョン・W・バッカスはIBMの上司に対し、 IBM 704メインフレーム・コンピュータのプログラミングにアセンブリ言語よりも実用的な代替言語を開発する提案書を提出した。[11] : 69 バッカスの歴史的なFORTRANチームは、リチャード・ゴールドバーグ、シェルドン・F・ベスト、ハーラン・ヘリック、ピーター・シェリダン、ロイ・ナット、ロバート・ネルソン、アーヴィング・ジラー、ハロルド・スターン、ロイス・ハイブト、デビッド・セイヤーのプログラマーで構成されていた。[16]そのコンセプトには、 J・ハルコム・レーニングによって開発され、 1952年のレーニングとジラーのシステムで実証された、コンピュータへの方程式の入力を容易にするというアイデアが含まれていた。 [17]

IBM数式変換システムの仕様草案は1954年11月に完成した。[11] : 71 FORTRANの最初のマニュアルは1956年10月に登場し、[10] [11] : 72 最初のFORTRANコンパイラは1957年4月に納品された。[11] : 75 Fortranは、アセンブリ言語プログラマーが高級プログラミング言語の代替として受け入れるのに十分な効率のよいコードを生成した。[18]
ジョン・バッカスは1979年にIBMの社員誌Thinkのインタビューで「私の仕事の多くは怠け心から生まれたものです。プログラムを書くのは好きではなかったのですが、IBM 701でミサイルの軌道を計算するプログラムを書いていたときに、プログラムを書きやすくするためのプログラミングシステムの開発を始めました。」と語っている。[19]
この言語は数値計算を多用するプログラムを書く科学者に広く採用されており、コンパイラ作成者はより高速で効率的なコードを生成できるコンパイラを作成するようになりました。言語に複素数データ型が含まれているため、Fortranは電気工学などの技術アプリケーションに特に適したものになりました。[20]
1960 年までに、FORTRAN のバージョンはIBM 709、650、1620 、および7090コンピュータで利用できるようになりました。FORTRAN の人気の高まりにより、競合するコンピュータ メーカーが自社のマシンに FORTRANコンパイラを提供するようになり、1963 年までに 40 を超える FORTRAN コンパイラが存在するようになりました。
FORTRAN は、IBM 1401コンピュータ用に、わずか 8000 (6 ビット) 文字のコア メモリで完全に動作する革新的な 63 フェーズ コンパイラによって提供されました。このコンパイラはテープまたは 2200 カード デッキから実行でき、それ以上のテープやディスク ストレージは使用しませんでした。このコンパイラはプログラムをメモリに保持し、オーバーレイをロードして、ヘインズが説明したように、その場で徐々に実行形式に変換しました。[21]この記事は、 Anatomy of a Compiler [22] の両版と IBM マニュアル「Fortran 仕様と操作手順、IBM 1401」に編集されて再掲載されました。[23] 実行形式は完全に機械語ではなく、浮動小数点演算、サブスクリプト、入出力、関数参照が解釈され、UCSD Pascal P コードより 20 年先行していました。GOTRANはFORTRAN Iの簡略化された解釈バージョン(32文ではなく12文のみ)で、「ロードして実行」操作用に利用可能でした(少なくとも初期のIBM 1620コンピュータでは)。[24]現代のFortran、およびそれ以降のほぼすべてのバージョンは、他の高性能言語と同様に完全にコンパイルされています。
Fortran の開発はコンパイラ技術の初期の進化と並行しており、コンパイラの理論と設計における多くの進歩は、特に Fortran プログラム用の効率的なコードを生成する必要性によって促進されました。
フォートラン
IBM 704 [10]用のFORTRANの最初のリリースには、次の32の文が含まれていました。
DIMENSIONおよびEQUIVALENCE声明- 代入文
- 3 方向の算術
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ループ- 書式付きI/O :
FORMAT、、、、、およびREADREAD INPUT TAPEWRITE OUTPUT TAPEPRINTPUNCH - フォーマットされていないI /O:
READ TAPE、、、およびREAD DRUMWRITE TAPEWRITE DRUM - その他のI/O:
END FILE、、REWINDおよびBACKSPACE PAUSE、STOP、 そしてCONTINUEFREQUENCYステートメント(コンパイラに最適化のヒントを提供するため)。
算術IFステートメントは、704 で使用できる 3 方向比較命令 (CAS - 記憶域付きアキュムレータの比較) を彷彿とさせますが、簡単には実装できません。このステートメントは、数値の差をテストすることで数値を比較する唯一の方法を提供しましたが、オーバーフローのリスクが伴いました。この欠点は、後に FORTRAN IV で導入された「論理」機能によって克服されました。
このFREQUENCY文は、もともと (オプションで) 算術IF文の 3 つの分岐ケースの分岐確率を与えるために使用されていました。また、ループが何回DO反復されるかを示すためにも使用されました。最初の FORTRAN コンパイラは、この重み付けを使用して、コンパイル時に生成されたコードのモンテ カルロ シミュレーションを実行し、その結果を使用してメモリ内の基本ブロックの配置を最適化しました。これは当時としては非常に高度な最適化でした。モンテ カルロ手法は、この最初の実装に関する Backus らの論文「FORTRAN Automatic Coding System 」に記載されています。
プログラムの基本単位は基本ブロックです。基本ブロックとは、1 つのエントリ ポイントと 1 つの終了ポイントを持つプログラムの一部です。セクション 4 の目的は、セクション 5 用に、基本ブロックを列挙し、各基本ブロックについて、フローの直接の先行となる可能性のある基本ブロックをそれぞれリストする先行テーブル (PRED テーブル) を準備することです。このテーブルは、プログラムをモンテカルロ方式で 1 回実行することで得られます。モンテカルロ方式では、IF タイプのステートメントと計算された GO TO から生じる条件付き転送の結果が、提供された FREQUENCY ステートメントに応じて適切に重み付けされた乱数ジェネレータによって決定されます。[16]
最初のFORTRANコンパイラは、エラーが見つかるとプログラムを停止し、コンソールにエラーコードを出力することで診断情報を報告しました。そのコードは、プログラマーがオペレーターマニュアルのエラーメッセージ表で調べることができ、問題の簡単な説明を提供しました。[10] : p.19–20 [25]その後、NASAによって開発されたゼロ除算などのユーザーエラーを処理するエラー処理サブルーチン[26]が組み込まれ、どのコード行にエラーが含まれているかをユーザーに通知しました。
固定レイアウトとパンチカード


ディスク ファイル、テキスト エディター、端末が開発される前は、プログラムはほとんどの場合、キーパンチキーボードで 80 列のパンチ カードに入力されていました(1 行に 1 枚)。その結果得られたカードのデッキは、カード リーダーに挿入されてコンパイルされました。パンチ カード コードには小文字や多くの特殊文字が含まれていなかったため、FORTRANで使用される再利用された特殊文字を正しく印刷する IBM 026キーパンチの特別バージョンが提供されていました。
パンチカード入力の慣習を反映して、Fortran プログラムは元々固定列形式で記述され、最初の 72 列が 12 個の 36 ビット ワードに読み込まれました。
列 1 に文字「C」があると、カード全体がコメントとして扱われ、コンパイラによって無視されます。それ以外の場合、カードの列は 4 つのフィールドに分割されます。
- 1 から 5 はラベル フィールドです。ここでの数字のシーケンスは、DO または GO TO や IF などの制御ステートメントで使用するラベルとして、または WRITE または READ ステートメントで参照される FORMAT ステートメントを識別するために使用されました。先頭のゼロは無視され、0 は有効なラベル番号ではありません。
- 6 は継続フィールドです。ここに空白またはゼロ以外の文字があると、そのカードは前のカードの記述の継続として扱われます。継続カードには通常 1、2などの番号が付けられており、そのため開始カードの継続列にはゼロがある場合があります。これは前のカードの継続ではありません。
- 7 から 72 はステートメント フィールドとして機能します。
- 73から80は無視された(IBM 704のカードリーダーは72列しか使用しなかった)。[27]
したがって、73列目から80列目は、カードの山が落ちた場合にカードを並べ替えるために使用できるシーケンス番号やテキストをパンチするなどの識別情報に使用できます。ただし、実際には、これは安定した製品プログラム用に予約されていました。IBM 519を使用して、プログラムデッキをコピーし、シーケンス番号を追加できます。一部の初期のコンパイラ、たとえばIBM 650には、カードリーダーの制限により追加の制限がありました。[28] キーパンチは、7列目にタブし、72列目以降をスキップするようにプログラムできます。後のコンパイラでは、固定形式の制限のほとんどが緩和され、この要件はFortran 90標準で削除されました。
ステートメント フィールド内では、テキスト リテラルの外側にある空白文字AVG OF X(ブランク) は無視されます。これにより、簡潔にするためにトークン間のスペースを省略したり、明確にするために識別子内にスペースを含めたりすることができます。たとえば、は と同等の有効な識別子でありAVGOFX、 と同等の有効なステートメントです。これは、列 6 のゼロがスペース (!) であるかのように扱われるためです。一方、 はではなく であり、 という変数に 1.101 が割り当てられています。カンマとピリオドの見た目のわずかな違いに注意してください。
101010DO101I=1,10110101 DO 101 I = 1, 101101010DO101I=1.10110101 DO101I = 1.101DO101I
もともと FORMAT および DATA ステートメントでのみ許可されていたホレリス文字列は、文字数と文字 H (例26HTHIS IS ALPHANUMERIC DATA.) がプレフィックスとして付加され、文字列内に空白を保持できるようになりました。誤カウントが問題でした。
進化
フォートランII
IBMのFORTRAN IIは1958年に登場しました。主な強化点は、参照渡しされたパラメータで値を返すユーザー記述のサブルーチンと関数を許可することで、手続き型プログラミングをサポートすることでした。COMMON文は、サブルーチンが共通(またはグローバル)変数にアクセスする方法を提供しました。6つの新しい文が導入されました:[29]
SUBROUTINE、FUNCTION、 そしてENDCALLそしてRETURNCOMMON
その後数年間で、FORTRAN II はDOUBLE PRECISIONおよびCOMPLEXデータ型のサポートを追加しました。
初期のFORTRANコンパイラはサブルーチンでの再帰をサポートしていなかった。初期のコンピュータアーキテクチャはスタックの概念をサポートしておらず、サブルーチン呼び出しを直接サポートしていた場合でも、戻り位置はサブルーチンコードに隣接する1つの固定位置(IBM 1130など)または特定のマシンレジスタ(IBM 360 など)に格納されることが多かった。これにより、スタックがソフトウェアによって維持され、戻りアドレスが呼び出し前にスタックに格納され、呼び出しが戻った後に復元される場合にのみ再帰が可能になる。FORTRAN 77では指定されていなかったが、多くのF77コンパイラは再帰をオプションとしてサポートし、再帰が組み込まれた設計のBurroughsメインフレームはデフォルトで再帰をサポートしていた。これは、新しいキーワードRECURSIVEによってFortran 90で標準となった。[30]
シンプルなFORTRAN IIプログラム
このプログラムは、ヘロンの公式のために、入力として 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さらに、三角形 C の 2 辺の合計は 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ストップ1 C ヘロンの公式を使用して三角形の面積を計算します 799 S = FLOATF ( IA + IB + IC ) / 2.0面積= SQRTF ( S * ( S - FLOATF ( IA )) * ( S - FLOATF ( IB )) * + ( S - FLOATF ( IC ) ) )出力テープ6、601 、IA 、IB 、IC 、エリア 601フォーマットの書き込み( 4 H A = 、I5、5 H B
= , I5 , 5 H C = , I5 , 8 H面積= , F10 . 2 , + 13 H平方単位)停止終了
フォートランIII
IBMは1958年にFORTRAN IIIも開発し、インラインアセンブリコードなどの機能を可能にしたが、このバージョンは製品としてリリースされることはなかった。704 FORTRANやFORTRAN IIと同様に、FORTRAN IIIにはマシン依存の機能が含まれており、そこで書かれたコードはマシン間で移植不可能であった。[11] : 76 他のベンダーによって提供されたFORTRANの初期バージョンも同様の欠点を抱えていた。
フォートランIV
IBMは顧客の要望に応えて、1961年にFORTRAN IVの開発を開始した。FORTRAN IVはFORTRAN IIの機種依存機能(などREAD INPUT TAPE)を削除し、LOGICALデータ型、論理ブール式、算術IF文の代わりとなる論理IF文などの新機能を追加した。FORTRAN IVは最終的に1962年にリリースされ、最初はIBM 7030(「ストレッチ」)コンピュータ向けにリリースされ、その後IBM 7090、IBM 7094、そして1966年にはIBM 1401向けのバージョンが続いた。 [31]
1965年までに、FORTRAN IVはアメリカ規格協会X3.4.3 FORTRANワーキンググループによって開発されていた標準に準拠する予定でした。 [32]
1966年から1968年にかけて、IBMはSystem/360向けにいくつかのFORTRAN IVコンパイラを提供した。それぞれは、コンパイラを実行するために必要な最小メモリ量を示す文字で名付けられていた。 [33] 文字(F、G、H)は、System/360のモデル番号で使用されるメモリサイズを示すコードと一致し、各文字の増分は2倍に増加した。[34] :p. 5
- 1966 : DOS/360 用 FORTRAN IV F (64K バイト)
- 1966 : OS/360 用 FORTRAN IV G (128K バイト)
- 1968 : OS/360 用 FORTRAN IV H (256K バイト)
デジタル・イクイップメント・コーポレーションは1967年から1975年までPDP-10用のDECSYSTEM-10 Fortran IV(F40)を保守していた。 [35] UNIVAC 1100シリーズ、Control Data 6000シリーズおよび7000シリーズシステム用のコンパイラも利用可能であった。[36]
この頃、FORTRAN IV は重要な教育ツールになり始めており、ウォータールー大学の WATFOR やWATFIVなどの実装が、以前のコンパイラの複雑なコンパイルおよびリンク プロセスを簡素化するために作成されました。
当時の FORTRAN IV プログラミング環境では、Control Data Corporation (CDC) システムで使用されていたものを除き、1 行に 1 つの命令しか配置できませんでした。CDC バージョンでは、$ (ドル) 文字で区切ることで、1 行に複数の命令を配置できました。FORTRANシートは、上記のように 4 つのフィールドに分割されていました。
当時の2つのコンパイラ、IBM「G」とUNIVACでは、命令と同じ行にコメントを記述することができ、特殊文字「マスタースペース」で区切られていた。UNIVACの場合はV(ミシン目7と8)、IBMの場合はミシン目12/11/0/7/8/9(16進数FF)である。これらのコメントは継続カードの途中に挿入されてはならない。[35] [36]
フォートラン66
FORTRAN の初期の歴史において最も重要な進展は、おそらく、米国規格協会(現在の米国規格協会(ANSI))が、ビジネス機器製造業者協会(BEMA) の後援を得て、米国標準 Fortran を開発するための委員会を設立するという決定だったでしょう。その結果、1966 年 3 月に承認された 2 つの標準では、FORTRAN (事実上の標準となっていた FORTRAN IV に基づく) とBasic FORTRAN (FORTRAN II に基づくが、マシン依存の機能を取り除いた) という 2 つの言語が定義されました。最初の標準で定義された 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および算術的(3方向)IFステートメント DOループ文READ、、、、WRITEおよび順次I/OBACKSPACEのREWINDステートメントENDFILEFORMATステートメントと割り当てられたフォーマットCALL、、、およびステートメントRETURNPAUSESTOP- および文、および手続きの引数としての
DATAホレリス定数FORMAT - 最大6文字の識別子
- コメント行
ENDライン
Heron プログラムの上記の Fortran II バージョンは、Fortran 66 プログラムとしてコンパイルするためにいくつかの変更が必要です。変更には、マシンに依存しないバージョンのREADおよびWRITEステートメントの使用、および不要なFLOATF型変換関数の削除が含まれます。必須ではありませんが、算術ステートメントは、より構造化された形式で
IF論理ステートメントと式を使用するように書き直すことができます。IF
C 標準平方根関数による三角形の面積
C 入力 - テープ リーダー ユニット 5、整数入力
C出力 - ライン プリンター ユニット 6、実数出力
C 入力エラー表示 エラー出力コード 1 ジョブ制御リストで
READ ( 5、501 ) IA 、IB 、IC 501 FORMAT ( 3I5 ) C C IA、IB、および ICは、負またはゼロであってはなりませんC さらに、三角形Cの2辺の合計は 3 番目の辺より大きく なければならないため、IF ( IA.GT.0 . AND.IB.GT.0 . AND.IC. GT . 0 ) GOTO 10 WRITE ( 6 , 602 ) 602 FORMAT ( 42 H IA 、IB 、IC はゼロより大きくなければなりません。) STOP 1 10 CONTINUE C IF ( IA + IB - IC . GT . 0 + . AND . IA + IC - IB . GT . 0 + . AND . IB + IC - IA . GT . 0 ) GOTO 20 WRITE ( 6 , 603 ) 603 FORMAT ( 50 H 2辺の合計は3番目の辺より大きくなければなりません。) STOP 1 20 CONTINUE C C ヘロンの公式を使用して三角形の C 面積を計算しますS = ( IA + IB + IC ) / 2.0面積= SQRT ( S * ( S - IA ) *
( S - IB ) * ( S - IC ))書き込み( 6 , 601 ) IA , IB , IC ,面積 601フォーマット( 4 H A = , I5 , 5 H B = , I5 , 5 H C = , I5 , 8 H面積= , F10 . 2 , + 13 H平方単位)停止終了
フォートラン77


FORTRAN 66 標準のリリース後、コンパイラ ベンダーは標準 Fortranにいくつかの拡張機能を導入しました。これを受けて、1969 年に ANSI 委員会 X3J3 は、 CBEMA (Computer Business Equipment Manufacturers Association、旧 BEMA)の支援を受けて 1966 年標準の改訂作業を開始しました。この改訂標準の最終草案は 1977 年に配布され、1978 年 4 月に新しい FORTRAN 標準が正式に承認されました。FORTRAN 77と呼ばれ、正式には X3.9-1978 と表記された新しい標準では、FORTRAN 66 の多くの欠点に対処するために、いくつかの重要な機能が追加されました。
- ブロック
IFとEND IF文、ELSE IFおよびオプションの句により、構造化プログラミングELSEの言語サポートが向上します。 DOパラメータ式、負の増分、ゼロトリップカウントを含むループ拡張OPEN、、CLOSEおよびINQUIREステートメントによりI/O機能が向上します- 直接アクセスファイルI/O
IMPLICITINTEGERステートメントは、宣言されていない変数の名前がI、、、、、または(それ以外の場合は)で始まる場合、暗黙の規則をオーバーライドしますJ。KLMNREALCHARACTERデータ型。ホレリス文字列を、文字入力と出力、および文字ベースのデータの処理のための大幅に拡張された機能に置き換えます。PARAMETER定数を指定するためのステートメントSAVE永続的なローカル変数のステートメント- 組み込み関数の汎用名 (例:またはなど
SQRTの他の型の引数も受け入れます)。COMPLEXREAL*16 - ASCII照合シーケンスに基づいた文字列の字句比較のための組み込み関数のセット (
LGE, LGT, LLE, LLT) 。 (これらの ASCII 関数は、米国国防総省の条件付き承認投票で要求されました。 [引用が必要] ) - 配列の最大次元数は 3 次元ではなく 7 次元です。許可される添え字式も一般化されました。
この標準の改訂版では、以前は標準に準拠していたプログラムを無効にする可能性のある方法で、いくつかの機能が削除または変更されました。(当時は、ANSI 標準ではまだ「非推奨」の概念が利用できなかったため、削除が X3J3 の唯一の許容可能な代替手段でした。) 競合リストの 24 項目 (X3.9-1978 の付録 A2 を参照) のほとんどは、以前の標準で許可されていたがめったに使用されない抜け穴や異常なケースに対処するものでしたが、次のような少数の特定の機能は意図的に削除されました。
- ホレリス定数とホレリスデータ、例えば
GREET = 12HHELLO THERE! - FORMAT仕様のH編集(ホレリスフィールド)記述子の読み込み
- 添字による配列境界のオーバーインデックス
次元A ( 10 , 5 ) Y = A ( 11 , 1 )
- DO ループの範囲外への制御の転送と DO ループの範囲への制御の転送 (「拡張範囲」とも呼ばれます)
Heron プログラムの Fortran 77 バージョンでは、Fortran 66 バージョンを変更する必要はありません。ただし、この例では、リスト指示 I/O の使用や、ステートメント内の Hollerith 編集記述子を引用符で囲まれた文字列に置き換えるなど、I/O ステートメントの追加のクリーンアップを示しています。また、 /ではなくFORMAT構造化IFandステートメントも使用します。
END IFGOTOCONTINUE
プログラムHERON
C 標準平方根関数を使用した三角形の面積
C 入力 - デフォルト 標準入力単位、整数入力
C 出力 - デフォルト 標準出力単位、実数出力
C 入力エラー表示 エラー出力コード 1 ジョブ制御リストで
読み取り( * 、* ) IA 、IB 、IC C C IA、IB、および IC は負またはゼロであってはなりませんC さらに、三角形 C の 2 辺の合計は3 番目の辺より大きくなければならないため、そのこともチェックしますIF ( IA . LE . 0 .または. IB . LE . 0 .または. IC . LE . 0 ) THEN WRITE ( * , * ) 'IA、IB、および IC はゼロより大きくなければなりません。' STOP 1 END IF C IF ( IA + IB - IC . LE . 0 + . OR . IA + IC - IB . LE . 0 + . OR . IB + IC - IA . LE . 0 ) THEN WRITE ( * , * ) '2 辺の合計は 3 辺より大きくなければなりません。'ストップ1終了 IF C C ヘロンの公式を使用して三角形の面積を計算しますS = ( IA + IB + IC ) / 2.0面積= SQRT ( S * ( S - IA ) * ( S - IB ) * ( S - IC )) WRITE ( * , 601 ) IA 、IB 、IC 、AREA 601 FORMAT ( 'A= ' 、I5 、' B= ' 、I5 、
' C = ' 、I5 、' AREA= ' 、F10.2 、+ '平方単位' ) STOPEND
ANSI標準Fortranへの移行
FORTRAN 77 の後継となる改訂標準の開発は、標準化プロセスがコンピューティングとプログラミングの実践の急速な変化に追いつくのに苦労したため、何度も延期されました。その間、FORTRAN 77 は 15 年近く「標準 FORTRAN」として使用され、歴史的に最も重要な方言となりました。
FORTRAN 77の重要な実用的な拡張は、1978年にリリースされたMIL-STD-1753でした。[37]米国国防総省によって開発されたこの仕様は、ほとんどのFORTRAN 77コンパイラによって実装されているがANSI FORTRAN 77標準には含まれていない多くの機能を標準化しました。これらの機能は最終的にFortran 90標準に組み込まれました。
DO WHILEおよびEND DO声明INCLUDE声明IMPLICIT NONEIMPLICIT声明の変形- ビット操作の組み込み関数。Industrial Real-Time Fortran (ANSI/ISA S61.1 (1976))に含まれる同様の関数に基づいています。
1991年にリリースされたIEEE 1003.9 POSIX標準は、FORTRAN 77プログラマーがPOSIXシステムコールを発行するためのシンプルな手段を提供しました。[ 38]この文書では100を超えるコールが定義されており、POSIX互換のプロセス制御、シグナル処理、ファイルシステム制御、デバイス制御、プロシージャポインティング、ストリームI/Oに移植可能な方法でアクセスできるようになりました。
フォートラン90
FORTRAN 77 の後継として、大幅に遅れて登場したFortran 90 (それ以前はFortran 8X ) は、1991 年に ISO/IEC 標準 1539:1991 として、1992 年に ANSI 標準としてようやくリリースされました。公式の綴りが FORTRAN から Fortran に変更されたことに加え、このメジャー リビジョンでは、1978 年の標準以降に進化したプログラミング手法の大きな変化を反映して、多くの新機能が追加されました。
- 自由形式のソース入力により、ステートメントを入力する前に最初の 6 文字の位置をスキップする必要がなくなりました。
- 小文字の Fortran キーワード
- 識別子の長さは最大 31 文字です (以前の標準では 6 文字のみでした)。
- インラインコメント
- 配列 (または配列セクション) 全体を操作できるため、数学およびエンジニアリングの計算が大幅に簡素化されます。
- 全体、部分、マスクされた配列代入文および配列式、例えば
X(1:N)=R(1:N)*COS(A(1:N)) WHERE選択的配列割り当てのステートメント- 配列値の定数と式、
- ユーザー定義の配列値関数と配列コンストラクター。
- 全体、部分、マスクされた配列代入文および配列式、例えば
RECURSIVE手順- モジュールは、関連する手順とデータをグループ化し、他のプログラム ユニットで使用できるようにします。モジュールの特定の部分のみにアクセスを制限する機能も含まれます。
- 大幅に改善された引数渡しメカニズムにより、コンパイル時にインターフェースをチェックできるようになりました。
- 汎用プロシージャ用のユーザー作成インターフェース
- 演算子のオーバーロード
- 派生(構造化)データ型
- 変数のデータ型やその他の属性を指定するための新しいデータ型宣言構文
ALLOCATABLE属性とALLOCATEステートメントによる動的メモリDEALLOCATE割り当てPOINTER動的なデータ構造NULLIFYの作成と操作を容易にする属性、ポインタ割り当て、ステートメントEND DOループ終了のためのステートメントと、EXIT通常のループ反復を秩序正しくCYCLE終了するためのステートメントを備えた構造化されたループ構造DOSELECT CASE、、、、多方向選択CASEのCASE DEFAULTためEND SELECTの構成- ユーザーが制御できる数値精度のポータブル仕様
- 新しく強化された固有の手順。
陳腐化と削除
以前の改訂とは異なり、Fortran 90では機能は削除されていません。[39]標準に準拠したFORTRAN 77プログラムは、Fortran 90でも標準に準拠しており、どちらの標準でもその動作を定義できるはずでした。
いくつかの機能は「時代遅れ」と判断され、将来の標準では削除される予定です。これらの初期バージョンの機能はすべて、新しい Fortran 機能で実行できます。古いプログラムの移植を簡素化するために一部は保持されていますが、多くは Fortran 95 で削除されました。
「Hello, World!」の例
プログラムhelloworld
print * , "Hello, World!"プログラムhelloworld終了
フォートラン95
Fortran 95 は、正式には ISO/IEC 1539-1:1997 として発行され、主に Fortran 90 標準の未解決の問題を解決するためにマイナー リビジョンされました。ただし、Fortran 95 では、特にHigh Performance Fortran仕様からの拡張機能もいくつか追加されました。
FORALLWHEREベクトル化を支援するネスト構造- ユーザー定義
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: 拡張データ型機能(非公式にはAllocatable TR として知られている)がありました。 この仕様は、 ALLOCATABLEFortran 2003 に完全準拠した Fortran コンパイラが利用可能になる前に、配列の拡張使用を定義しました。このような使用には、ALLOCATABLE派生型のコンポーネント、プロシージャのダミー引数リスト、および関数の戻り値としての配列が含まれます。(ALLOCATABLE配列は、 Fortran 95 によってスコープ外になると自動的に割り当て解除されることが保証されているPOINTERため、メモリリークの可能性が排除され、 ベースの配列よりも優れています。さらに、割り当て可能な配列の要素は連続しており、エイリアシングは配列参照の最適化で問題にならないため、コンパイラはポインタの場合よりも高速なコードを生成できます。[40])
ALLOCATABLE
Fortran 95 のもう一つの重要な補足は、ISO技術レポートTR-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
21世紀の標準で定義された言語は、特にオブジェクト指向プログラミングのサポートとそれに続くCoarray Fortranが組み込まれたことから、「Modern Fortran」と呼ばれることが多く、この用語は文献でもますます使用されるようになっています。[41]
フォートラン2003
Fortran 2003は、正式にはISO/IEC 1539-1:2004として発行され、多くの新機能を導入した主要な改訂版でした。[42] Fortran 2003の新機能の包括的な概要は、Fortranワーキンググループ(ISO/IEC JTC1/SC22 /WG5)の公式Webサイトで入手できます。[43]
その記事によると、今回の改訂版の主な機能強化は次のとおりです。
- 派生型の機能強化: パラメータ化された派生型、アクセシビリティの制御の改善、構造コンストラクタとファイナライザの改善
- オブジェクト指向プログラミングのサポート: 型の拡張と継承、ポリモーフィズム、動的な型の割り当て、型バインドされたプロシージャなど、抽象データ型を完全にサポートします。
- データ操作の強化: 割り当て可能なコンポーネント (TR 15581 を組み込んだもの)、遅延型パラメータ、
VOLATILE属性、配列コンストラクタと割り当てステートメントでの明示的な型指定、ポインタの強化、拡張された初期化式、および強化された組み込みプロシージャ - 入出力の強化:非同期転送、ストリーム アクセス、派生型のユーザー指定転送操作、フォーマット変換時の丸めのユーザー指定制御、事前接続単位の名前付き定数、ステートメント
FLUSH、キーワードの正規化、およびエラー メッセージへのアクセス - プロシージャポインタ
- IEEE 浮動小数点演算および浮動小数点 例外処理のサポート(TR 15580 を組み込んだもの)
- Cプログラミング言語との相互運用性
- 国際的な使用のサポート: ISO 10646 4 バイト文字へのアクセスと、数値形式の入力/出力での小数点またはカンマの選択
- ホスト オペレーティング システムとの統合の強化:コマンドライン引数、環境変数、プロセッサ エラー メッセージへのアクセス
Fortran 2003 の重要な補足として、ISO 技術レポート TR-19767: Fortran の拡張モジュール機能があります。 このレポートではサブモジュールが提供され、これにより Fortran モジュールはModula-2モジュールにさらに類似したものになりました。これらはAda のプライベート子サブユニットに似ています。これにより、モジュールの仕様と実装を別々のプログラム ユニットで表現できるようになり、大規模なライブラリのパッケージ化が改善され、明確なインターフェイスを公開しながら企業秘密を保持できるようになり、コンパイル カスケードを防止できます。
フォートラン2008
ISO/IEC 1539-1:2010(非公式にはFortran 2008として知られている)は、2010年9月に承認されました。 [44] [45] Fortran 95と同様に、これはFortran 2003の明確化と修正を組み込んだマイナーアップグレードであり、いくつかの新機能が導入されています。新しい機能は次のとおりです。
- サブモジュール – モジュールの追加構造化機能。ISO/IEC TR 19767:2005 に代わるものです。
- Coarray Fortran – 並列実行モデル
- DO CONCURRENT構造– 相互依存性のないループの繰り返し
- CONTIGUOUS属性 – ストレージレイアウトの制限を指定する
- BLOCK構造– 構造スコープを持つオブジェクトの宣言を含めることができます
- 再帰割り当て可能コンポーネント– 派生型の再帰ポインタの代替として
最終国際規格案(FDIS)は文書N1830として入手可能である。[46]
Fortran 2008の補足として、国際標準化機構(ISO)の技術仕様(TS)29113 「FortranとCのさらなる相互運用性」[47] [48]があり、2012年5月に承認のためにISOに提出されました。この仕様では、Cから配列記述子にアクセスするためのサポートが追加され、引数の型とランクを無視できるようになりました。
フォートラン2018
Fortran 2018言語の改訂版は、以前はFortran 2015と呼ばれていました。[49]これは重要な改訂版であり、2018年11月28日にリリースされました。[50]
Fortran 2018 には、以前に公開された 2 つの技術仕様が組み込まれています。
- ISO/IEC TS 29113:2012 Cとのさらなる相互運用性[51]
- ISO/IEC TS 18508:2015 Fortranにおける追加の並列機能[52]
その他の変更点と新機能には、ISO/IEC/IEEE 60559:2011(IEEE浮動小数点標準の最新マイナーリビジョンIEEE 754–2019以前のバージョン)のサポート、16進数の入出力、IMPLICIT NONEの機能強化、その他の変更点が含まれます。[53] [54] [55] [56]
Fortran 2018 では算術 IF 文が削除されました。また、END DO 文または CONTINUE 文で終了しないループである非ブロック DO 構造も削除されました。これらは Fortran 90 以来、言語の廃止された部分でした。
新しく廃止された機能は、COMMON および EQUIVALENCE ステートメントと BLOCK DATA プログラム ユニット、ラベル付き DO ループ、組み込み関数の特定の名前、および FORALL ステートメントと構造です。
フォートラン 2023
Fortran 2023(ISO/IEC 1539-1:2023)は2023年11月に発行され、ISOから購入できます。[57] Fortran 2023はFortran 2018のマイナー拡張であり、Fortran 2018のエラーと欠落を修正することに重点を置いています。また、列挙型機能 など、いくつかの小さな機能も追加されています。
言語機能
Fortran 95 によってもたらされた Fortran 言語機能の詳細な説明は、関連記事「Fortran 95 言語機能」で説明されています。後の標準で定義された言語バージョンは、総称して「Modern Fortran」と呼ばれることが多く、文献で説明されています。
科学と工学



1968年にBASICの著者らが書いた雑誌記事ではFORTRANは「時代遅れ」と評されていたが[58] 、何十年もの間FORTRANで書かれたプログラムがあり、科学および工学コミュニティ全体で日常的に使用されている膨大な数のFORTRANソフトウェアがある。[59] ジェイ・パサチョフは1984年に「物理学と天文学の学生はFORTRANを学ばなければならない。FORTRANには非常に多くの機能があるため、科学者がPascal、Modula-2、またはその他の言語に切り替える可能性は低いと思われる」と書いた。[60] 1993年にセシル・E・リースはFORTRANを「科学計算の母国語」と呼び、他の言語に置き換えることは「望み薄かもしれない」と付け加えた。[61]
Fortranは、天文学、気候モデリング、計算化学、計算経済学、計算流体力学、計算物理学、データ分析、[62]水文学モデリング、数値線形代数と数値ライブラリ(LAPACK、IMSL、NAG)、最適化、衛星シミュレーション、構造工学、天気予報など、最も集中的なスーパーコンピューティングタスクのいくつかで主要な言語です。[63] 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 などのプログラムを使用していましたが、[64] [65] 1977 年の標準以降、米国標準局 (現在のNIST ) がFIPS PUB 69 を発行して初めて、米国政府が購入するプロセッサは標準の拡張機能を診断する必要がありました。2 つのプロセッサを提供するのではなく、基本的にすべてのコンパイラーは最終的に拡張機能を診断するオプションを少なくとも 1 つ持つようになりました。[66] [67]
互換性のない拡張機能だけが移植性の問題ではありませんでした。数値計算では、演算の特性を考慮することが重要です。この問題は、1966 年の標準のコンテキストで Fox らによってPORTライブラリによって解決されました。[65]その中のアイデアは広く使用されるようになり、最終的には組み込みの問い合わせ関数の形で 1990 年の標準に組み込まれました。2 進浮動小数点演算のIEEE 754標準が広く (現在ではほぼ普遍的に) 採用されたことで、この問題は基本的に解消されました。
コンピューティング環境へのアクセス (プログラムのコマンド ライン、環境変数、エラー条件のテキストによる説明など) は、2003 年の標準で対処されるまで問題のままでした。
グラフィックス ライブラリなど、工学や科学計算にゆるやかに関連していると言えるライブラリ ソフトウェアの大規模なコレクションは C で記述されているため、それらへのアクセスには移植性の問題がありました。この問題は、2003 標準に C の相互運用性を組み込むことで解決されました。
プリプロセッサに頼らなくても、Fortran で完全に移植可能なプログラムを記述することが可能になりました (比較的簡単) 。
廃止されたバリアント
Fortran 66 標準が開発されるまで、各コンパイラは独自の Fortran バリアントをサポートしていました。一部のコンパイラは、他のコンパイラよりも主流から大きく逸脱していました。
最初の Fortran コンパイラは、コンパイルされたコードの効率性に高い基準を設定しました。この目標によりコンパイラの作成が困難になったため、通常はハードウェアの販売をサポートするためにコンピュータ メーカーによって作成されました。これにより、重要なニッチ市場が生まれました。それは、高速でプログラマ (多くの場合は学生) に優れた診断機能を提供するコンパイラです。例としては、Watfor、Watfiv、PUFFT、小規模では FORGO、Wits Fortran、Kingston Fortran 2 などがあります。
Fortran 5 は、1970 年代初頭から 1980 年代初頭にかけて、Data General Corp によってNova、Eclipse、MVシリーズのコンピュータ向けに販売されました。当時のミニコンピュータに非常に適していた最適化コンパイラが搭載されていました。この言語は FORTRAN 66 に最も似ています。
FORTRAN Vは、1968年にコントロールデータ社によってCDC 6600シリーズ向けに配布されました。この言語はFORTRAN IVに基づいています。[68]
Univac は、FORTRAN V として知られる 1100 シリーズ用のコンパイラも提供していました。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 Research Labsは、ベクトルと行列を処理するためにVECTRANと呼ばれる拡張FORTRANベースの言語も開発しました。
オブジェクト指向 Fortran は、データ項目をオブジェクトにグループ化し、インスタンス化して並列実行できる Fortran のオブジェクト指向拡張です。Sun、Iris、iPSC、nCUBE で使用できましたが、現在はサポートされていません。
このようなマシン固有の拡張機能は、時間の経過とともに消滅するか、主要な標準に要素が組み込まれました。残っている主要な拡張機能はOpenMPで、これは共有メモリ プログラミング用のクロスプラットフォーム拡張機能です。新しい拡張機能の 1 つである Coarray Fortran は、並列プログラミングをサポートすることを目的としています。
FOR TRANSITはIBM 704 FORTRAN言語の縮小版の名前であり、1950年代後半にカーネギーで開発された翻訳プログラムを使用してIBM 650用に実装されました。 [69]次のコメントはIBMリファレンスマニュアル( FOR TRANSIT Automatic Coding System C28-4038、Copyright 1957、1959 by IBM)に記載されています。
FORTRAN システムは 650 よりも複雑なマシン用に設計されているため、FORTRAN プログラマーズ リファレンス マニュアルに記載されている 32 のステートメントの一部は FOR TRANSIT システムでは受け入れられません。さらに、FORTRAN 言語には特定の制限が追加されています。ただし、これらの制限によって FOR TRANSIT 用に作成されたソース プログラムが 704 用の FORTRAN システムと互換性がないということはありません。
許容される記述は次のとおりです。
- 算術代入文、例:
a = b GO 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 つのパスが必要でした。オブジェクト プログラムは、マシンにロードしてプログラムを実行できます (データ入力にはパンチ カードを使用し、結果はパンチ カードに出力します)。
650 には、2000 ワードのメモリ ドラムを備えた FOR TRANSIT I (S) と FOR TRANSIT II の 2 つのバージョンがありました。後者は、インデックス レジスタと自動浮動小数点 10 進数 ( 25 進数) 演算を備えたマシン用です。マニュアルの付録 A には、 IBM 533カード リーダー/パンチコントロール パネルの配線図が含まれていました。
Fortranベースの言語
FORTRAN 77より前は、より使いやすい言語を提供するために多くのプリプロセッサが一般的に使用されており、プリプロセスされたコードは標準FORTRANコンパイラを備えたどのマシンでもコンパイルできるという利点がありました。 [70]これらのプリプロセッサは通常、構造化プログラミング、6文字を超える変数名、追加のデータ型、条件付きコンパイル、さらにはマクロ機能もサポートしていました。人気のあるプリプロセッサには、EFL、FLECS、iftran、MORTRAN、SFtran、S-Fortran、Ratfor、Ratfivなどがあります。たとえば、EFL、Ratfor、RatfivはCのような言語を実装し、プリプロセスされたコードを標準FORTRAN 66で出力しました。PFORTプリプロセッサは、コードが言語のポータブルなサブセットに準拠していることを確認するためによく使用されました。Fortran言語の進歩にもかかわらず、プリプロセッサは条件付きコンパイルとマクロ置換に引き続き使用されています。
1960年代に導入されたFORTRANの最も初期のバージョンの1つは、大学で広く使用されていました。ウォータールー大学によって開発、サポート、配布されたWATFORは、主にFORTRAN IVに基づいています。WATFORを使用する学生は、バッチFORTRANジョブを送信でき、構文エラーがなければ、プログラムはすぐに実行に移されます。この簡素化により、学生は、送信ジョブ制御言語(JCL)、コンパイル/リンク編集/実行の連続プロセス、またはメインフレーム/ミニコンピュータ環境のその他の複雑な部分を扱うのではなく、プログラムの構文とセマンティクス、または実行ロジックフローに集中することができました。この簡素化された環境の欠点は、ホストプロセッサの拡張された機能を必要とするプログラマにとってWATFORが適切な選択ではなかったことです。たとえば、WATFORは通常、I/Oデバイスへのアクセスが非常に制限されていました。WATFORの後継はWATFIVとそれ以降のバージョンです。
プログラム; s = 0 i = 1 , n ; s = s + 1 ;停止i ; s = 's'停止
(ラインプログラミング)
LRLTRAN は、システム プログラミングをサポートする拡張機能の中でも、ベクトル演算と動的ストレージのサポートを提供するために、ローレンス放射線研究所で開発されました。ディストリビューションには、Livermore Time Sharing System (LTSS) オペレーティング システムが含まれていました。
Fortran-95 標準には、オプションの条件付きコンパイル機能を定義するオプションのパート 3が含まれています。この機能は、多くの場合「CoCo」と呼ばれます。
多くの Fortran コンパイラは、C プリプロセッサのサブセットをシステムに統合しています。
SIMSCRIPT は、大規模な離散システムをモデル化およびシミュレートするためのアプリケーション固有の Fortran プリプロセッサです。
Fプログラミング言語は、Fortran 95のクリーンなサブセットとして設計され、EQUIVALENCE文などのFortranの冗長で非構造化で非推奨の機能を削除しようとしました。Fは、Fortran 90で追加された配列機能を保持し、FORTRAN 77とFortran 90の両方に追加された構造化プログラミング構造によって廃止された制御文を削除しました。Fは、その作成者によって「教育と科学計算に特に適したコンパイルされた構造化配列プログラミング言語」と説明されています。[71] Essential Lahey Fortran 90(ELF90)も同様のサブセットでした。
Laheyと富士通は協力してMicrosoft .NET Framework用のFortranを開発した。[72] Silverfrost FTN95も.NETコードを作成することができる。[73]
コード例
次のプログラムは、Fortran 90 で導入された 2 つの機能、動的メモリ割り当てと配列ベースの操作を示しています。特に注目すべきは、配列の操作にDOループやIF/THENステートメントがないことであり、数学的操作は配列全体に適用されます。また、現代のプログラミング スタイルに準拠した説明的な変数名と一般的なコード フォーマットが使用されていることも明らかです。この例では、対話的に入力されたデータの平均を計算します。
プログラム平均
! いくつかの数値を読み込んで平均を取ります
。 ! 書かれているとおり、データ ポイントがない場合、平均は 0 が返されます。 これは望ましい動作ではないかもしれませんが、この例をシンプルに保っています。
暗黙的なし
実数、割り当て可能:: points (:)整数:: number_of_points実数:: average_points 、positive_average 、negative_average average_points = 0. positive_average = 0. negative_average = 0. write ( * 、* ) "平均するポイント数を入力してください:" read ( * 、* ) number_of_points
割り当てる(ポイント(ポイント数))
平均するポイントを入力してください: ( * , * ) と書きます。( * , * )ポイントを読み込みます。
! ポイントを合計し、ポイント数で割って平均を求めます。if (ポイント数> 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_points write ( * , '(a,g12.4)' ) '正のポイントの平均 = ' , positive_average write ( * , '(a,g12.4)' ) '負のポイントの平均 = ' , negative_average deallocate ( points ) ! メモリを解放
プログラム終了平均
ユーモア
「FORTRAN 77」という名前が選ばれたのと同じFORTRAN標準委員会の会議で、「文字Oは有害とみなされる」というタイトルの風刺的な技術提案が公式配布物に組み込まれました。この提案は、文字「O」と数字のゼロの間で時々生じる混乱に対処するため、許容される変数名から文字を削除しようとしていました。しかし、提案された方法は文字セットから文字を完全に削除することでした(これにより、コロンによって49に増えた語彙文字の数は48のままになりました)。これは、悪名高いステートメントを以前のように使用できないようにすることで、構造化プログラミングを促進するという点で有益であると考えられましたGO TO(問題のあるFORMATステートメントも削除されます)。これにより「既存のプログラムの一部が無効になる可能性がある」が、そのほとんどは「いずれにしても非準拠である可能性が高い」と指摘されました。[74] [信頼できない情報源? ] [75]
X3J3 が Fortran 77 で DO ループの最小トリップ カウントを 0 にするか 1 にするかを議論したとき、Loren Meissner は、2 未満であればループの理由がないという理由で(冗談で)最小トリップ カウントを2 にすることを提案しました。
想定長配列が追加されたとき、上限と下限を区切るのに適切な文字について論争がありました。これらの議論を検証したコメントで、ウォルト・ブレイナードは「天文学対消化器学」と題する記事を執筆しました。これは、一部の支持者が星印またはアスタリスク (「*」) の使用を提案したのに対し、他の支持者はコロン (「:」) を好んだためです。[引用が必要]
I~Nの文字で始まる変数名のデフォルトの型は整数ですが、他の文字で始まる変数のデフォルトの型は実数です。ただし、プログラマーは明示的な宣言でデフォルトを上書きできます。[76]このことから、「FORTRANでは、GODは実数です(INTEGERと宣言されていない限り)」というジョークが生まれました。
参照
- f2c – Fortran 77 を C コードに変換するプログラム
- F2PY – 数値プログラミングのための Python ライブラリ
- FORMAC – FORTRAN に基づくコンピュータ代数システム
- Fortranコンパイラのリスト
- Fortran 数値ライブラリのリスト
- プログラミング言語の一覧
- 行列表現 - コンピュータメモリへの保存方法
- スパゲッティコード - 構造の悪いソフトウェアソースコード
参考文献
- ^ 「Chapel spec (Acknowledgements)」(PDF)。Cray Inc. 2015年10月1日。2016年2月5日時点のオリジナルよりアーカイブ(PDF) 。 2016年1月14日閲覧。
- ^ 1963 年、チェコスロバキアとポーランドにおける共通プログラミング言語に関する協議訪問報告書、John A. Gosden (編集者)、Roger E. Gay、John L. Jones、Jack N. Merner、Christopher J. Shaw
- ^ John Backus. 「FORTRAN I、II、III の歴史」(PDF)。Softwarepreservation.org。2007年 7 月 26 日時点のオリジナルよりアーカイブ(PDF) 。2014 年11 月 19 日閲覧。
- ^ Wilson , Leslie B. (2001).比較プログラミング言語、第3版。Addison-Wesley。p. 16。ISBN 0-201-71012-9
Fortran I のマニュアルは 1956 年にリリースされましたが、成功したコンパイラがプログラムを正しく実行できるようになるのは 1958 年になってからでした
。 - ^ Loh, Eugene (2010 年 6 月 18 日). 「理想的な HPC プログラミング言語」. ACM Queue . 8 (6): 30–38. doi :10.1145/1810226.1820518.
- ^ 「HPL – 分散メモリ コンピューター向け高性能 Linpack ベンチマークのポータブル実装」 。2015年2 月 21 日閲覧。
- ^ 「Q13. ベンチマークとは何ですか?」。概要 – CPU 2017。SPEC。2019年11月13日閲覧。
- ^ Wilson , Leslie B. (2001).比較プログラミング言語、第3版。Addison-Wesley。p. 18。ISBN 0-201-71012-9もう 1 つの問題は、
Fortran に標準がないため、わずかに異なるバージョンを別のコンパイラで使用すると失敗する可能性が高いことです。
- ^ TIOBE Software BV (2024年5月). 「TIOBE Index」. TIOBE.com . TIOBE . 2024年5月6日閲覧。
- ^ abcde Backus, John Warner ; Beeber, RJ; Best, Sheldon F.; Goldberg, Richard ; Herrick, Harlan L.; Hughes, RA; Mitchell, LB; Nelson, Robert A.; Nutt, Roy ; Sayre, David ; Sheridan, Peter B.; Stern, Harold; Ziller, Irving (1956 年 10 月 15 日). Sayre, David (ed.). The FORTRAN Automatic Coding System for the IBM 704 EDPM: Programmer's Reference Manual (PDF) . New York, USA: Applied Science Division and Programming Research Department, International Business Machines Corporation . pp. 2, 19–20. 2022 年 7 月 4 日時点のオリジナルよりアーカイブ(PDF) 。 2022 年7 月 4 日閲覧。(2+51+1ページ)
- ^ abcdef Backus, John (1998年10月~12月). 「Fortran I、II、IIIの歴史」(PDF) . IEEE Annals of the History of Computing . 20 (4): 68–78. doi :10.1109/85.728232. 2016年3月3日時点のオリジナルよりアーカイブ(PDF) 。 2020年6月17日閲覧。[1][2]
- ^ 「FORTRAN: 先駆的なプログラミング言語」。IBM 。 2012年3月7日。 2017年7月19日閲覧。
- ^ “FORTRAN”.ブリタニカ百科事典. 2021年6月14日. 2021年7月19日閲覧。
- ^ チャップマン、スティーブン J. (2018)。科学者とエンジニアのための Fortran (第 4 版)。ニューヨーク: McGraw-Hill Education。p . 13。ISBN 978-0-07-338589-1。
- ^ FORTRAN 77 標準で定義された「Fortran 文字セット」は、標準に準拠したコンパイラがサポートする必要のある最小限の文字セットでした。実際には、多くの FORTRAN 77 コンパイラが完全なASCII文字セットをサポートしていました。
- ^ ab JW Backus ; RJ Beeber; S. Best; R. Goldberg; LM Haibt ; HL Herrick; RA Nelson; D. Sayre ; PB Sheridan; H. Stern; L. Ziller; RA Hughes; R. Nutt (1957 年 2 月)。FORTRAN 自動コーディング システム(PDF)。Western Joint Computer Conference。pp. 188–198。doi :10.1145/1455567.1455599。
- ^ デビッド・ミンデル (2008)。デジタルアポロ。マサチューセッツ州ケンブリッジ:MITプレス。 p. 99.ISBN 978-0-262-13497-2. JSTOR j.ctt5hhn02. OCLC 228031739.
- ^ Padua, David (2000年1月~2月). 「Fortran I コンパイラ」(PDF) . Computing in Science & Engineering . 2 (1): 70–75. Bibcode :2000CSE.....2a..70P. doi :10.1109/5992.814661. 2020年6月17日時点のオリジナル(PDF)よりアーカイブ
。 Fortran I コンパイラは、コード最適化における最初の主要プロジェクトでした。これは、数十年にわたってコンパイラ技術の重要な研究対象であった一般的な解決法を伴う極めて重要な問題に取り組みました。コンパイラ分析および最適化のための多くの古典的な手法は、その起源とインスピレーションを Fortran I コンパイラに遡ることができます。
- ^ Brian Bergstein (2007年5月20日). 「Fortranの生みの親John Backus氏が死去」. MSNBC . 2018年10月29日閲覧。
- ^ 「FORTRAN – 数値計算のための最初のプログラミング言語」。SciHi Blog。2019年10月15日。
- ^ Haines, LH (1965). 「シリアルコンパイルと 1401 FORTRAN コンパイラ」. IBM Systems Journal . 4 (1): 73–80. doi :10.1147/sj.41.0073.
- ^ Lee, John AN (1967).コンパイラの解剖学. Van Nostrand Reinhold.
- ^ Fortran 仕様および操作手順、IBM 1401 (PDF)。IBM。C24-1455-2。2017年 9 月 23 日時点のオリジナルよりアーカイブ(PDF) 。
- ^ 「Subject: GOTRAN ON THE IBM 1316 DISK STORAGE PACK (Serial No. K7402)」。2006年2月21日時点のオリジナルよりアーカイブ。2006年3月3日閲覧。
- ^ IBM 704 EDPM 用 FORTRAN 自動コーディング システム: 予備オペレーター マニュアル(PDF)。プログラミング研究部門、International Business Machines Corporation。1957 年 4 月 8 日。6 ~ 37 ページ。2014年 2 月 26 日時点のオリジナルからアーカイブ(PDF) 。
- ^ Armstead, Betty Jo (2015年1月21日). 「My Years at NASA」(PDF) .デンバー自然科学博物館. 2019年12月24日時点のオリジナル(PDF)からアーカイブ。 2019年6月15日閲覧。
- ^ リファレンスマニュアル、IBM 7090 データ処理システム(PDF)。1961 年。A22-6528-3。2008年 12 月 1 日時点のオリジナルからアーカイブ(PDF) 。
- ^ Fortran II 一般情報マニュアル(PDF)。1963 年。2005 年 4 月 26 日時点のオリジナルよりアーカイブ(PDF) 。2014 年11 月 19 日閲覧。
- ^ リファレンスマニュアル、FORTRAN II for the IBM 704 Data Processing System (PDF) 。1958年。C28-6000-2。 2005年10月30日時点のオリジナルからアーカイブ(PDF) 。
- ^ "Ibibilio.org". Ibiblio.org . 2014年9月15日閲覧。
- ^ Fortran IV 言語仕様、プログラム仕様、および操作手順、IBM 1401、1440、および 1460 (PDF)。IBM。1966 年 4 月。C24-3322-2。2017年 9 月 23 日時点のオリジナルからアーカイブ(PDF) 。
- ^ McCracken, Daniel D. (1965) 「序文」 FORTRAN IV プログラミングガイドニューヨーク: Wiley. p. v. ISBN 978-0-471-58281-6。
- ^ 「1957年~1967年のFORTRAN実装一覧」 。BCS Fortran Specialist Group。IEEE Annals。2017年。 2017年10月17日閲覧。
- ^ IBM System/360 モデル 50 機能特性(PDF)。IBM。1967 年。A22-6898-1。2021年 10 月 29 日時点のオリジナルよりアーカイブ(PDF) – bitsavers 経由。
- ^ ab 「DECSYSTEM-10 FORTRAN IV (F40) プログラマーズリファレンスマニュアル」(PDF) . Github . Digital Equipment Corporation . 2022年4月15日閲覧。
- ^ ab "FORTRAN IV". WorldCat.org . 2023年12月10日閲覧。
- ^ MIL-STD 1753 - FORTRAN、米国国家規格X3.9-1978に対する国防総省の補足。米国政府印刷局。1978年11月9日。 2024年4月21日閲覧。
- ^ IEEE 1003.9-1992 – IEEE 情報技術標準 – POSIX(R) FORTRAN 77 言語インターフェース – パート 1: システムアプリケーションプログラムインターフェース (API) のバインディング。IEEE。2018年11 月 24 日閲覧。
- ^ 付録B.1
- ^ 「Fortran 95 リファレンス」。Gnu.Org。2014年5 月 10 日閲覧。
- ^ Lionel, Steve (2013 年 12 月 30 日). 「Doctor Fortran in "It's a Modern Fortran World"」. Intel (旧 DEC) Fortran フォーラム ディスカッション グループ. Intel . 2022 年4 月 11 日閲覧。
- ^ 「Fortran 2003 – 最終ワーキングドラフト」。Gnu.Org 。 2014年5月10日閲覧。
- ^ 「WG5がFortran 2003とTRの処理を完了」。nag.co.uk 2004年5月14日。2004年8月5日時点のオリジナルよりアーカイブ。2023年4月3日閲覧。. また、 「Fortran 2003 の新機能」(PDF)から PDF ファイルとしてダウンロードすることもできます。2018年 1 月 15 日時点のオリジナルからアーカイブ(PDF)されています。2023年4 月 3 日に取得。
- ^ 「N1836、ISO/IEC FDIS 1539-1、情報技術 - プログラミング言語 - Fortran - パート1: 基本言語に関する投票の概要/回答表」(PDF) 。 2018年1月15日時点のオリジナルよりアーカイブ(PDF) 。
- ^ 「Fortran 2008 – 最終ワーキングドラフト」(PDF)。Gnu.Org。2014年5月12日時点のオリジナルよりアーカイブ(PDF) 。2014年5月10日閲覧。
- ^ N1830、情報技術 – プログラミング言語 – Fortran – パート1:基本言語 [3] [リンク切れ]
- ^ ISO/IEC TS 29113:2012 – 情報技術 – Fortran と C のさらなる相互運用性。
- ^ 「技術仕様書 (TS) 29113 の草案」(PDF)。wg5 -fortran.org。2018 年 1 月 15 日時点のオリジナルよりアーカイブ(PDF) 。
- ^ 「『Eighteen is the new Fifteen』のDoctor Fortran」。Software.intel.com 。 2017年11月20日閲覧。
- ^ 「Fortran 2018」。ISO 。 2018年11月30日閲覧。
- ^ 「Cとのさらなる相互運用性」(PDF)。ISO。2017年12月1日時点のオリジナルよりアーカイブ(PDF) 。 2017年11月20日閲覧。
- ^ 「Fortran の追加並列機能」。ISO。2017年11 月 20 日閲覧。
- ^ 「Fortran 2015 の新機能」。ISO。2017年6 月 23 日閲覧。
- ^ 「『One Door Closes』のDoctor Fortran」。Software.intel.com 。 2015年9月21日閲覧。
- ^ 「Doctor Fortran Goes Dutch: Fortran 2015」。Software.intel.com 。 2014年11月19日閲覧。
- ^ Fortran 2018 解釈ドキュメント(PDF) 2018 年 10 月 9 日。
- ^ “Fortran 2023”. wg5-fortran.org . 2023年11月30日閲覧。
- ^ Kemeny, John G.; Kurtz, Thomas E. (1968 年 10 月 11 日). 「ダートマス タイムシェアリング」. Science . 162 (3850): 223–228. Bibcode :1968Sci...162..223K. doi :10.1126/science.162.3850.223. PMID 5675464.
- ^ Phillips, Lee (2014 年 5 月 8 日)。「科学計算の未来: 1950 年代の巨大言語を上回るコーディング言語は存在するか?」Ars Technica。2014年5 月 8 日閲覧。
- ^ Pasachoff, Jay M. (1984 年 4 月). 「科学者: FORTRAN vs. Modula-2」. BYTE (手紙). p. 404 . 2015 年2 月 6 日閲覧。
- ^ Galperin, Boris (1993). "26".複雑な工学と地球物理学的流れのラージエディシミュレーション。ロンドン: Cambridgey。p. 573。ISBN 978-0-521-43009-8。
- ^ Brandt, Siegmund (1970).データ分析における統計的および計算的手法. North-Holland Publishing Company. pp. 序文. ISBN 0-7204-2033-4。
- ^ Curcic、 ミラノ(2020年11月24日)。Modern Fortran:効率的な並列アプリケーションの構築。Simon and Schuster。ISBN 978-1-61729-528-7。
- ^ Gaffney, PW; Wooten, JW (1980 年 5 月 1 日)。FORTRAN ソフトウェアの標準化を確実にするための方法 (レポート)。オークリッジ国立研究所。OSTI 5361454。PFORT ...
ライブラリ ...
- ^ ab PA Fox (1977). 「Port — ポータブル数学サブルーチンライブラリ」.ポータブル数学サブルーチンライブラリ. コンピュータサイエンスの講義ノート. 第57巻. pp. 165–177. doi :10.1007/3-540-08446-0_42. ISBN 978-3-540-08446-4.
PORT ... (PFORT) で記述 .. ANS Fortran
- ^ Whitten, Douglas E.; Demaine, Paul AD (1975). 「マシンと構成に依存しない Fortran: ポータブル Fortran {PFortran}」. IEEE Transactions on Software Engineering . SE-1 (1). 米国電気電子技術者協会 (IEEE): 111–124. doi :10.1109/tse.1975.6312825. ISSN 0098-5589. S2CID 16485156.
- ^ 「移植性の問題」
。Fortran の移植性について説明しています。
- ^ Healy, MJR (1968). 「Towards FORTRAN VI」. CDC による Advanced Scientific Fortran . CDC. pp. 169–172. 2009年7月5日時点のオリジナルよりアーカイブ。 2009年4月10日閲覧。
- ^ Perlis, AJ; Smith, JW; Van Zoeren, HR Internal Translator (IT) A Compiler for the IBM 650 (PDF)。カーネギー工科大学計算センター。2012年10月2日時点のオリジナルよりアーカイブ(PDF) 。
- ^ Meissner, Loren (1975 年 9 月 1 日)。「構造化プログラミングを容易にするための Fortran 制御構造の拡張について」。ACM SIGPLAN 通知。acm.org。
- ^ 「Fプログラミング言語ホームページ」。Fortran.com。2015年1月9日時点のオリジナルよりアーカイブ。2014年11月19日閲覧。
- ^ 「Fortran for .NET Language System」。2014年10月18日時点のオリジナルよりアーカイブ。
- ^ 「FTN95: Fortran 95 for Windows」Silverfrost.com 。 2014年11月19日閲覧。
- ^ 1976 年 11 月にブルックヘブン国立研究所で開催された会議の X3J3 会議後配布物。
- ^ 「O の消滅」。Computer Weekly 1977 年 3 月 3 日。
- ^ データ型規則 (FORTRAN 77 言語リファレンス) . 2016 年9 月 29 日閲覧。
さらに読む
- 言語基準
- ANSI x3.9-1966。米国規格FORTRAN (PDF)。米国規格協会。2011年5月15日時点のオリジナル(PDF)からアーカイブ。2010年5月5日閲覧。非公式には FORTRAN 66 として知られています。
- ANSI x3.9-1978。米国国家規格 - プログラミング言語 FORTRAN。米国国家規格協会。2013年10月29日時点のオリジナルよりアーカイブ。2007年12月11日閲覧。ISO 1539–1980とも呼ばれ、非公式には FORTRAN 77 とも呼ばれます。
- ANSI X3.198-1992 (R1997) / ISO/IEC 1539:1991。米国国家規格 - プログラミング言語 Fortran 拡張。米国国家規格協会 / ISO/IEC。2002 年 5 月 1 日時点のオリジナルからアーカイブ。非公式には Fortran 90 として知られています。
- ISO/IEC 1539-1:1997. 情報技術 – プログラミング言語 – Fortran – パート 1: 基本言語(PDF) 。2011年 8 月 18 日時点のオリジナル(PDF)からアーカイブ。2007年12 月 13 日閲覧。非公式には Fortran 95 として知られています。この標準にはさらに 2 つのパートがあります。パート 1 は ANSI によって正式に採用されています。
- ISO/IEC 1539-1:2004. 情報技術 – プログラミング言語 – Fortran – パート1: 基本言語(PDF) 。 2023年7月31日時点のオリジナル(PDF)からアーカイブ。非公式には Fortran 2003 として知られています。
- ISO/IEC 1539-1:2010 (最終国際規格草案)。情報技術 – プログラミング言語 – Fortran – パート 1: 基本言語(PDF)。[永久リンク切れ]非公式には Fortran 2008 として知られています。
- 関連規格
- Kneis, Wilfried (1981年10 月)。「ドラフト標準 Industrial Real-Time FORTRAN」。ACM SIGPLAN 通知。16 (7) : 45–60。doi : 10.1145 / 947864.947868。ISSN 0362-1340。S2CID 8662381 。
- ISO 8651-1:1988 情報処理システム - コンピュータグラフィックス - グラフィカルカーネルシステム (GKS) 言語バインディング - パート 1: FORTRAN。ジュネーブ、スイス: ISO。1988。
- その他の参考資料
- ECMA Standard on FORTRAN (PDF)。欧州コンピュータ製造業者協会。1965 年 4 月。2008年 5 月 10 日時点のオリジナルからアーカイブ(PDF) 。2014年11 月 17 日閲覧。
- FORTRAN 77 4.0 リファレンスマニュアル(PDF) 。Sun Microsystems, Inc. 1995 年。2012 年 1 月 5 日時点のオリジナル(PDF)からアーカイブ。2014 年11 月 17 日に取得。
- 「FORTRAN コーディング フォーム」(PDF)。IBM。2015年 6 月 8 日時点のオリジナル(PDF)からアーカイブ。2014 年11 月 17日閲覧。
- IBM System/360 および System/370 Fortran IV 言語(PDF)。IBM。1974年 5 月。2011年 4 月 6 日時点のオリジナル(PDF)からアーカイブ。2014 年11 月 17 日閲覧。
- Goerz, Michael (2014)。「Modern Fortran Reference Card」(PDF)。2014 年 12 月 14 日時点のオリジナルよりアーカイブ(PDF) 。2014 年12 月 14 日に取得。
- 書籍
- Adams, Jeanne C. ; Brainerd, Walter S.; Hendrickson, Richard A.; Maine, Richard E.; Martin, Jeanne T.; Smith, Brian T. (2009). The Fortran 2003 Handbook (第 1 版). Springer . ISBN 978-1-84628-378-9。
- Akin, JE (2003).オブジェクト指向プログラミング - Fortran 90/95 . ケンブリッジ、ニューヨーク: ケンブリッジ大学出版局. ISBN 978-0-521-52408-7. OCLC 49906306.
- Arjen, Markus (2012)、「Modern Fortran in Practice」、Cambridge Univ. Press、ISBN 978-1-13908479-6。
- Brainerd, WS ; Goldberg, CH; Adams, JC (1996)。プログラマーズ ガイド for Fortran 90 (第 3 版)。Springer。ISBN 978-0-387-94570-5。
- ブレーナード、ウォルター (2015)。Fortran 2008プログラミングガイド。ロンドン: Springer。ISBN 978-1-4471-6758-7. OCLC 920530344.
- チャップマン、スティーブン J. (2018)。科学者とエンジニアのための Fortran (第 4 版)。ニューヨーク: McGraw-Hill Education。pp . xxiv + 1024。ISBN 978-0-07-338589-1。
- チヴァース、イアン;スレイトホルム、ジェーン (2018)。Fortranプログラミング入門(第 4 版)。Springer。ISBN 978-3-319-75501-4。
- クラーマン、ノーマン(2012年)。『Modern Fortran: style and usage』ニューヨーク:ケンブリッジ大学出版局。ISBN 978-0-521-51453-8. OCLC 776162717.
- Curcic, Milan (2020). Modern Fortran: 効率的な並列アプリケーションの構築. シェルターアイランド、ニューヨーク: Manning Publications Company. ISBN 978-1-61729-528-7. OCLC 1256806439.
- Ellis, TMR; Phillips, Ivor R.; Lahey, Thomas M. (1994). Fortran 90 プログラミング(第 1 版). Addison Wesley. ISBN 978-0-201-54446-6。
- エッター、DM (1990)。エンジニアと科学者のための構造化FORTRAN 77(第3版)。ベンジャミン/カミングス出版会社、ISBN 978-0-8053-0051-2。
- Kerrigan, JF (1993)。Fortran 90 への移行(第 1 版)。O'Reilly & Associates, Inc. ISBN 1-56592-049-X。
- Kupferschmid, Michael (2002)。Classical Fortran: エンジニアリングおよび科学アプリケーション向けプログラミング。Marcel Dekker (CRC Press) 。ISBN 978-0-8247-0802-3。(補足資料)
- ロレンゾ、マーク・ジョーンズ (2019)。機械の抽象化: FORTRAN プログラミング言語の歴史 (FORmula TRANslation)。独立出版。ISBN 978-1082395949。
- Loukides, Mike (1990)。Unix for FORTRAN Programmers。カリフォルニア州セバストポル:O'Reilly & Associates, Inc. ISBN 0-937175-51-X。
- McCracken, Daniel D. (1961)。FORTRANプログラミングガイド。ニューヨーク: Wiley。LCCN 61016618 。
- Nyhoff, Larry; Sanford Leestma (1995)。エンジニアと科学者のための FORTRAN 77と Fortran 90 入門(第 4 版) 。Prentice Hall。ISBN 978-0-13-363003-9。
- Page, Clive G. (1988)。プロフェッショナル プログラマー向け Fortran77 ガイド (2005 年 6 月 7 日版)。ロンドン: Pitman。ISBN 978-0-273-02856-7. 2010年5月4日閲覧。
- Press, William H. (1996)。Fortran 90 の数値計算法: 並列科学計算の技法。ケンブリッジ、イギリス: ケンブリッジ大学出版局。ISBN 978-0-521-57439-6。
- Ruetsch, Gregory; Fatica, Massimiliano (2013). CUDA Fortran for Scientists and Engineers (第 1 版). Elsevier . p. 338. ISBN 9780124169708。
- スライトホーム、ジェーン、チヴァース、イアン・デイビッド (1990)。インタラクティブ Fortran 77: 実践的アプローチ。コンピュータとそのアプリケーション (第 2 版)。チチェスター: E. ホーウッド。ISBN 978-0-13-466764-5. 2014年3月12日時点のオリジナルよりアーカイブ。2014年3月12日閲覧。
- 記事
- Allen, FE (1981年9 月)。「IBM における言語プロセッサ技術の歴史」。IBM Journal of Research and Development。25 (5): 535–548。doi :10.1147/rd.255.0535。S2CID 14149353 。
- JW Backus、RJ Beeber、S. Best、R. Goldberg、LM Haibt、HL Herrick、RA Nelson、D. Sayre 、 PB Sheridan、H. Stern、L. Ziller、RA Hughes、R. Nutt (1957 年 2 月)。FORTRAN 自動コーディング システム(PDF)。Western Joint Computer Conference。pp. 188–198。doi :10.1145/1455567.1455599。
- Chivers, Ian D.; Sleightholme, Jane (2022)。「Fortran 2008 および 2018 標準のコンパイラー サポート」。
- Pigott, Diarmuid (2006)。「FORTRAN – Backus らの高水準コンパイラ (コンピュータ言語)」。コンピュータ言語百科事典。マードック大学。2009 年 10 月 8 日時点のオリジナルよりアーカイブ。2010年5 月 5 日閲覧。
- Roberts, Mark L.; Griffiths, Peter D. (1985). 「IBM パーソナル コンピュータ プロフェッショナル FORTRAN の最適化コンパイラの設計上の考慮事項」IBM Systems Journal . 24 (1): 49–60. doi :10.1147/sj.241.0049.
外部リンク
- ISO/IEC JTC1/SC22/WG5 - Fortran 標準の公式ホーム
- Fortran 標準ドキュメント - GFortran 標準
- fortran-lang.org (2020).
- FORTRAN と Fortran II の歴史 —コンピュータ歴史博物館
- Valmer Norrod 他: FORTRAN プログラミングの自習コース - 第 1 巻 - 教科書、Computer Science Corporation、カリフォルニア州エルセグンド (1970 年 4 月)。NASA (N70-25287)。
- Valmer Norrod、Sheldom Blecher、Martha Horton: FORTRAN プログラミングの自習コース - 第 2 巻 - ワークブック、NASA CR-1478 (1970 年 4 月)、NASA (N70-25288)。
- Fortran プログラミング言語入門、Reinhold Bader、Nisarg Patel、Leibniz Supercomputing Centre 著。
- 共配列チュートリアル
- Victor Eijkhout : C++17/Fortran2008 による科学プログラミング入門、HPC の芸術、第 3 巻 (PDF) 2023 年 2 月 5 日にWayback Machineにアーカイブされました
