Fortran

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

Fortran
Fortran logo.svg
パラダイムマルチパラダイム構造化命令型手続き型オブジェクト指向)、ジェネリック配列
によって設計されたジョン・バッカス
デベロッパージョン・バッカスIBM
初登場1957 ; 64年前 (1957)
安定リリース
Fortran 2018(ISO / IEC 1539-1:2018)/ 2018年11月28日; 2年前 (2018-11-28)
規律の入力強い静的なマニフェスト
ファイル名拡張子.f.for.f90
Webサイトfortran-lang .org
主要な実装
AbsoftのクレイのgfortranG95IBM XL Fortranの、インテル日立、レイヒー/富士通、ニューメリカルアルゴリズムズグループ株式会社オープンWatcomのPathScalePGISilverfrostのOracle Solaris Studioの、他
に影響を受けた
スピードコーディング
影響を受ける
ALGOL 58BASICCChapel[1] CMS-2DOPEFortressPL / IPACT IMUMPSIDLRatfor

FORTRAN/ F ɔːr T R æ N / ;以前FORTRANは)汎用であり、コンパイルされた 命令型 プログラミング言語、特にに適した数値計算科学技術計算

Fortranは、もともと1950年代に科学および工学アプリケーションのためにIBM [2]によって開発され、その後、科学計算を支配するようになりました。それは、次のような計算集約的分野における6十年以上のために使用されている数値予報有限要素解析計算流体力学地球物理学計算物理学結晶学および計算化学これは、ハイパフォーマンスコンピューティング[3]で人気のある言語であり、世界最速のスーパーコンピューターのベンチマークとランク付けを行うプログラムに使用されます[4] [5]

米国イリノイ州ルモントのアルゴンヌ国立研究所にあるアルゴンヌリーダーシップアンジェラヤンコンピューティング施設での2007年のIBMBlue Gene / Pスーパーコンピューターのインストール。

Fortranには多数のバージョンがあり、それぞれに拡張機能が追加されていますが、以前のバージョンとの互換性はほぼ維持されています。後続のバージョンでは 、文字ベースのデータの構造化プログラミングと処理(FORTRAN 77)、配列プログラミングモジュラープログラミング汎用プログラミング(Fortran 90)、高性能Fortran(Fortran 95)、オブジェクト指向プログラミング(Fortran 2003)、並行プログラミング(Fortran 2008)、およびネイティブ並列コンピューティング機能(Coarray Fortran 2008/2018)。

Fortranの設計は、他の多くのプログラミング言語の基礎でした。よく知られているのはBASICです。これは、FORTRAN IIに基づいており、多くの構文のクリーンアップ、特に優れた論理構造[6]や、インタラクティブ環境でより簡単に機能するその他の変更が含まれています。[7]

2021年8月の時点で、Fortranは13位にランクされた番目TIOBEインデックスの42のランキングから29点の位置を登る、プログラミング言語の人気の指標をND 8月2020に[8]

ネーミング

FORTRANという名前は、Formula Translating System[9] Formula Translator、[10] Formula Translation[11]またはFormularTranslationに由来しています。[要出典] FORTRAN 77を介した以前のバージョンの言語の名前は、従来はすべて大文字で綴られていました[12](FORTRAN 77は、Fortranの文字セットに大文字のみが含まれる最後のバージョンでした[13])。Fortranの公用語標準で、Fortran 90以降、言語(大文字の「FORTRAN」ではなく)頭文字が付いた「Fortran」と呼んでいます。

起源

1953年後半、John W. Backusは、IBM 704メインフレームコンピューターをプログラミングするためのアセンブリ言語のより実用的な代替手段を開発するという提案をIBMの上司に提出しました[9] :69の バッカスの歴史的FORTRANチームはプログラマリチャード・ゴールドバーグ、シェルドンF.ベスト、ハーラン・ヘリック、ピーター・シェリダン、から構成さロイ・ナット、ロバート・ネルソン、アーヴィングツィラー、ハロルド・スターン、ロイス・ハイブト、そしてデビッドセイヤー[14]その概念には、コンピューターへの方程式のより簡単な入力が含まれていました。これは、J。HalcombeLaningによって開発され、 1952年のLaningandZierlerシステム[15]

IBM 704用のFortran自動コーディングシステム(1956年10月15日)、Fortranの最初のプログラマー用リファレンスマニュアル

IBM Mathematical Formula Translating Systemのドラフト仕様は1954年11月までに完成しました。[9] :71  FORTRANの最初のマニュアルは1956年10月に登場し、[9] :72 1957年4月に最初のFORTRANコンパイラーを提供しました。[9] : 75 これは最初の最適化コンパイラーでした。なぜなら、コンパイラーが手作業でコーディングされたアセンブリー言語に近いパフォーマンスのコードを生成できない限り、顧客は高レベルのプログラミング言語を使用することを躊躇したからです。[16]

コミュニティは、この新しい方法がハンドコーディングよりも優れている可能性があることに懐疑的でしたが、マシンを操作するために必要なプログラミングステートメントの数を20分の1に減らし、すぐに受け入れられました。 John Backusは、1979年のIBM従業員誌Thinkとのインタビューで、「私の仕事の多くは怠惰なことから来ています。プログラムを書くのが好きではなかったので、IBM 701に取り組んでいたとき、コンピューティング用のプログラムを書いていました。ミサイルの軌道、私はプログラムを書きやすくするためにプログラミングシステムの作業を始めました。」[17]

この言語は、数値を多用するプログラムを作成するために科学者によって広く採用されました。これにより、コンパイラの作成者は、より高速で効率的なコードを生成できるコンパイラを作成するようになりました。包含複素数データ型言語では、Fortranは、特に、電気工学などの技術的用途に適しました。[18]

1960年までに、FORTRANのバージョンが利用可能であったIBM 7096501620、および7090台のコンピュータ。重要なことに、FORTRANの人気の高まりにより、競合するコンピューターメーカーは、自社のマシンにFORTRANコンパイラーを提供するようになり、1963年までに40を超えるFORTRANコンパイラーが存在しました。これらの理由から、FORTRANは最初に広く使用されているクロスプラットフォームプログラミング言語であると考えられています

Fortranの開発は、並列コンパイラ技術の初期進化を、との理論とデザインで多くの進歩のコンパイラは、特にFortranプログラムのための効率的なコードを生成する必要が動機ました。

FORTRAN

IBM 704用のFORTRANの初期リリースには、以下を含む32のステートメントが含まれていました。

  • DIMENSIONおよびEQUIVALENCEステートメント
  • 割り当てステートメント
  • 算術 IFステートメントの結果が負、ゼロ、または正のいずれであるかに応じて、プログラム内の3つの場所のいずれかに制御を渡した3方向算術ステートメント。
  • IF例外をチェックするための書類(ACCUMULATOR OVERFLOWQUOTIENT OVERFLOW、およびDIVIDE CHECK)。およびIF操作のための文センススイッチとセンスライト
  • GO TO、計算GO TOASSIGNおよび割り当てGO TO
  • DO ループ
  • 書式付きI / O: 、FORMATREADREAD INPUT TAPEWRITEWRITE OUTPUT TAPEPRINTおよびPUNCH
  • 書式なしI / O: 、READ TAPEREAD DRUMWRITE TAPEおよびWRITE DRUM
  • その他のI / O: 、END FILEREWINDおよびBACKSPACE
  • PAUSE、、、STOPおよびCONTINUE
  • FREQUENCYステートメント(コンパイラーに最適化のヒントを提供するため)。

算術IFステートメントは、704で利用可能な3者間比較命令(CAS-アキュムレータとストレージの比較)を彷彿とさせます(ただし、容易に実装することはできません)。このステートメントは、数値を比較する唯一の方法を提供しました。オーバーフローのリスク。この欠陥は、後にFORTRANIVで導入された「論理的」機能によって克服されました。

このFREQUENCYステートメントは、元々(およびオプションで)、算術IFステートメントの3つの分岐ケースの分岐確率を与えるために使用されていました。最初のFORTRANコンパイラは、実行するには、この重み付けを使用コンパイル時にモンテカルロシミュレーション生成されたコードの、その時間の間、メモリは非常に洗練された最適化における基本ブロックの配置を最適化するために使用された結果を。モンテカルロ法は、この元の実装に関するBackus etal。の論文であるFORTRAN自動コーディングシステムに文書化されています

プログラムの基本単位は基本ブロックです。基本ブロックは、1つのエントリポイントと1つの出口ポイントを持つ一連のプログラムです。セクション4の目的は、セクション5の前身のテーブル(PREDテーブル)を準備することです。このテーブルは、基本ブロックを列挙し、すべての基本ブロックについて、フローの直前の前身となる可能性のある各基本ブロックを、の絶対頻度とともに一覧表示します。そのような各基本ブロックリンク。このテーブルは、モンテカルロ方式でプログラムを1回実行することによって取得されます。この場合、IFタイプのステートメントと計算されたGO TOから生じる条件付き転送の結果は、提供されたFREQUENCYステートメントに従って適切に重み付けされた乱数ジェネレーターによって決定されます。 。[14]

何年も後、このFREQUENCYステートメントはコードに影響を与えず、コンパイラーがこの種のコンパイル時シミュレーションを実行しなくなったため、コメントステートメントとして扱われました。同様の運命はCキーワードなど、他のいくつかのプログラミング言語のコンパイラヒントも当てはまります。[要出典]register

最初のFORTRANコンパイラは、エラーが見つかったときにプログラムを停止し、コンソールにエラーコードを出力することにより、診断情報を報告しました。そのコードは、プログラマーがオペレーターズマニュアルのエラーメッセージテーブルで調べて、問題の簡単な説明を提供することができます。[19] [20]その後、NASAによって開発されたゼロ除算などのユーザーエラーを処理するエラー処理サブルーチン[21]が組み込まれ、エラーが含まれているコード行をユーザーに通知しました。

レイアウトとパンチカードを修正

パンチカードのFORTRANコード。列1〜5、6、および73〜80の特殊な使用法を示しています。
紙に印刷され、キーパンチオペレーターがカードにパンチするためのプログラムを準備するためにプログラマーが使用することを目的としたFORTRANコーディングフォームの複製現在は廃止されています。

ディスクファイル、テキストエディタ、および端末が開発される前は、プログラムはほとんどの場合、キーパンチキーボードで80列のパンチカードに1行ずつ入力されていました。得られたカードのデッキは、コンパイルするためにカードリーダーに送られます。パンチカードコードには小文字や多くの特殊文字が含まれていませんでした。また、FORTRANで使用される再利用された特殊文字を正しく印刷するIBM026キーパンチの特別バージョンが提供されました。

パンチカード入力の慣行を反映して、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列しか使用しませんでした)。[22]

したがって、列73から80は、シーケンス番号やテキストのパンチなどの識別情報に使用できます。これらの情報は、カードのスタックがドロップされた場合にカードを並べ替えるために使用できます。実際には、これは安定した本番プログラムのために予約されていました。アンIBM 519は、プログラムのデッキをコピーして、シーケンス番号を追加するために使用することができます。一部の初期のコンパイラー、たとえばIBM 650には、カードリーダーの制限のために追加の制限がありました。[23] キーパンチは、列7にタブで移動し、列72の後でスキップするようにプログラムできます。後のコンパイラーは、ほとんどの固定形式の制限を緩和し、Fortran90標準で要件が削除されました。

ステートメントフィールド内では、テキストリテラルの外側の空白文字(空白)は無視されました。これにより、簡潔にするためにトークン間のスペースを省略したり、わかりやすくするために識別子内にスペースを含めることができました。たとえば、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.が付けられ、文字列内に空白を保持できるようになりました。ミスカウントが問題でした。

進化

FORTRAN II

IBMのFORTRANIIは1958年に登場しました。主な機能強化は参照によって渡されたパラメーターで値を返すユーザー作成のサブルーチンと関数を許可することにより、手続き型プログラミングをサポートすることでした。COMMONステートメントは、サブルーチンが共通(またはグローバル)変数にアクセスする方法を提供しました6つの新しいステートメントが導入されました:[24]

  • SUBROUTINE、、、FUNCTIONおよびEND
  • CALLRETURN
  • COMMON

今後数年間で、FORTRANIIはDOUBLE PRECISIONおよびCOMPLEXデータ型のサポートも追加する予定です。

初期のFORTRANコンパイラーは、サブルーチンで再帰サポートしていませんでした初期のコンピューターアーキテクチャーはスタックの概念をサポートしていませんでした。サブルーチン呼び出しを直接サポートした場合、戻り場所は、サブルーチンコード(IBM 1130など)または特定のマシンレジスター(IBM 360 以降)に隣接する1つの固定場所に格納されることがよくありました。)。これは、スタックがソフトウェアによって維持され、呼び出しが行われる前に戻りアドレスがスタックに保管され、呼び出しが戻った後に復元される場合にのみ再帰を許可します。FORTRAN 77では指定されていませんが、多くのF77コンパイラーはオプションとして再帰をサポートし、バロウズのメインフレームはは、再帰が組み込まれて設計されており、デフォルトでそうしました。これは、新しいキーワードRECURSIVEを介してFortran90の標準になりました。[25]

単純なFORTRANIIプログラム

このプログラムは、ヘロンの公式のためのものです、入力として3つの5桁の整数A、B、およびCを含むテープリールのデータを読み取ります。使用可能な「型」宣言はありません。名前がI、J、K、L、M、またはNで始まる変数は「固定小数点」(つまり整数)であり、それ以外の場合は浮動小数点です。この例では整数が処理されるため、変数の名前は文字「I」で始まります。変数の名前は文字で始まる必要があり、FORTRANIIでは最大6文字まで文字と数字の両方で続けることができます。 A、B、およびCが平面ジオメトリで三角形の辺を表すことができない場合、プログラムの実行は「STOP1」のエラーコードで終了します。それ以外の場合は、A、B、およびCの入力値を示す出力行が出力されます。続いて、出力行に沿って10スペースを占め、小数点以下2桁を示す浮動小数点数として、三角形の計算されたAREA、ラベル601のFORMATステートメントのF10.2の.2が続きます。

AトライアングルWITH A STANDARD平方根機能のC AREA 
C INPUT -テープリーダ部5、INTEGER入力
C OUTPUT -ラインプリンタ部6、REAL OUTPUT 
C入力エラー表示エラー出力コード1 IN JOB CONTROL LISTING 
READの入力TAPE 5 501 IA IB IC   501形式3 I5 C IA、IB、およびICは、負またはゼロCである可能性があります。さらに、三角形Cの2つの側面の合計は、3番目の側面よりも大きくなければならないため、それを確認します。 TOO 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  STOP 1個の
HERON'SフォーミュラWE CALCULATE THE USING C 
THE三角形のC AREA 
  799  S  =  FLOATF  IA  +  IB  +  IC  /  2.0 
AREA = SQRTF S * S - FLOATF IA ))*をS - FLOATF IB ))* + S - FLOATF IC                  
            )))
のWRITE OUTPUT TAPE 6 601 IA IB IC AREA   601 FORMAT 4 H 、A = I5 5 H B = I5 5 H C = I5 8 H AREA = F10 2 + 13 Hスクエアユニットストップエンド             
             
               
      
      

FORTRAN III

IBMはまた、1958年にFORTRAN III開発しました。これにより、他の機能の中でもインラインアセンブリコードが可能になりましたただし、このバージョンが製品としてリリースされることはありませんでした。704FORTRANおよびFORTRANIIと同様に、FORTRAN IIIには、マシンに依存する機能が含まれており、そこに記述されたコードをマシン間で移植できなくなりました。[9] 他のベンダーによって提供された76の 初期バージョンのFORTRANは、同じ欠点に悩まされていました。

IBM 1401 FORTRAN

FORTRANは、わずか8000(6ビット)文字のコアメモリ完全に実行される革新的な63フェーズコンパイラによってIBM1401コンピュータに提供されました。コンパイラは、テープまたは2200カードデッキから実行できます。それ以上のテープやディスクストレージは使用しませんでした。Hainesが説明しているように、プログラムをメモリに保持し、オーバーレイロードして、プログラムを実行可能形式に徐々に変換しました。[26] この記事は、Anatomy of a Compiler [27]の両方のエディションと、IBMのマニュアル「Fortranの仕様と操作手順、IBM1401」の両方で再版、編集されました。[28] 実行可能形式は完全に機械語ではありませんでした ; むしろ、浮動小数点演算、サブスクリプト、入力/出力、および関数参照が解釈され、UCSD PascalP コードより20年先行していました

IBMは後に、1400シリーズのコンピューター用にFORTRANIVコンパイラーを提供しました。[29]

FORTRAN IV

IBMは、顧客の要求の結果として、1961年からFORTRANIVの開発を開始しました。FORTRAN IVは、FORTRAN IIのマシン依存機能(などREAD INPUT TAPE)を削除し、LOGICALデータ型、論理ブール式論理IFステートメントなどの新しい機能を算術IFステートメントの代わりに追加しました FORTRAN IVは最終的に最初のために、1962年にリリースされたIBM 7030用のバージョンが続く(「ストレッチ」)コンピュータ、IBM 7090IBM 7094、およびそれ以降のためにIBM 1401 1966年。

1965年までに、FORTRAN IVは米国規格協会X3.4.3FORTRANワーキンググループによって開発されている規格準拠することになっていました[30]

1966年から1968年の間に、IBMはSystem / 360用にいくつかのFORTRANIVコンパイラーを提供しました。それぞれのコンパイラーは、コンパイラーの実行に必要な最小メモリー量を示す文字で名前が付けられています。 [31] 文字(F、G、H)は、メモリサイズを示すためにSystem / 360モデル番号で使用されるコードと一致しました。各文字の増分は2倍大きくなります:[32] :p。5 

  • 1966:DOS / 360用のFORTRANIV F(64Kバイト)
  • 1966:OS / 360用のFORTRANIV G(128Kバイト)
  • 1968:OS / 360用のFORTRANIV H(256Kバイト)

この頃、FORTRAN IVは重要な教育ツールになり始め、ウォータールー大学のWATFORやWATFIVなどの実装は、以前のコンパイラの複雑なコンパイルおよびリンクプロセスを簡素化するために作成されました。

FORTRAN 66

おそらく、FORTRANの初期の歴史における最も重要な進展は、米国規格協会(現在の米国規格協会(ANSI))が、米国規格Fortranを開発するためにBEMA(Business Equipment Manufacturers Association)が後援する委員会を設立するという決定でした。 1966年3月に承認された結果の2つの標準は、FORTRAN(事実上の標準として機能していたFORTRAN IVに基づく)とBasic FORTRAN(FORTRAN IIに基づくが、マシンに依存する機能を取り除いた)の2つの言語を定義しました。 FORTRANは、最初に標準で定義され、正式に示さX3.9-1966、として知られるようになったFORTRAN 66(多くの人がそれをFORTRAN IVと呼び続けましたが、標準が主に基づいていた言語です)。FORTRAN 66は、事実上、FORTRANの最初の業界標準バージョンになりました。FORTRAN 66が含まれています:

  • メインプログラム、SUBROUTINEFUNCTION、およびBLOCK DATAプログラム・ユニット
  • INTEGERREALDOUBLE PRECISIONCOMPLEX、およびLOGICAL データ型
  • COMMONDIMENSION、およびEQUIVALENCEステートメント
  • DATA 初期値を指定するためのステートメント
  • 本質的およびEXTERNAL(例えば、ライブラリ)関数
  • 割り当てステートメント
  • GO TO、計算済みGO TO、割り当て済みGO TO、およびASSIGNステートメント
  • 論理IFおよび算術(3方向)IFステートメント
  • DO ループステートメント
  • READWRITEBACKSPACEREWIND、およびENDFILEシーケンシャルI / Oのための文
  • FORMAT ステートメントと割り当てられた形式
  • CALLRETURNPAUSE、およびSTOPステートメント
  • DATAFORMATステートメントのホレリス定数およびプロシージャの引数として
  • 最大6文字の長さの識別子
  • コメント行
  • END ライン

FORTRAN 77

書かれたコンパイラの出力を持つFORTRAN-77プログラム、CDC 175アーヘン工科大学は1987年に、ドイツ
4.3 BSD for the Digital Equipment Corporation(DEC)VAXFORTRAN 77(f77)コンパイラのマニュアル表示

FORTRAN 66標準のリリース後、コンパイラベンダーは標準Fortranにいくつかの拡張機能を導入し、1969年にANSI委員会X3J3に、CBEMA、コンピュータビジネス機器製造業者協会(以前のBEMA)の支援の下、1966標準の改訂作業を開始するよう促しましたこの改訂基準の最終草案は、4月、1978年の新しい標準と呼ばれる新しいFORTRAN標準の正式な承認につながる、1977年に循環FORTRAN 77の多くのアドレスへの重要な機能を多数追加し、正式にX3.9-1978表記しますFORTRAN 66の欠点:

  • ブロックIFおよびEND IFオプションを持つ文、ELSEおよびELSE IF句、改善のための言語サポートを提供するために構造化プログラミングを
  • DO パラメータ式、負の増分、ゼロトリップカウントを含むループ拡張
  • OPENCLOSE、およびINQUIRE改善されたI / O機能のための文
  • 直接アクセスファイルI / O
  • IMPLICIT ステートメント。名前がI、J、K、L、M、またはNで始まる場合は宣言されていない変数がINTEGERであるという暗黙の規則をオーバーライドします(それ以外の場合はREAL)。
  • CHARACTER データ型。ホレリス文字列を、文字の入出力および文字ベースのデータの処理のための大幅に拡張された機能に置き換えます。
  • PARAMETER 定数を指定するためのステートメント
  • SAVE 永続ローカル変数のステートメント
  • 組み込み関数の一般名(たとえばSQRTCOMPLEXまたはなどの他のタイプの引数も受け入れますREAL*16)。
  • ASCII照合シーケンスに基づく文字列の字句比較のLGE, LGT, LLE, LLTための組み込み関数()のセット。 (これらのASCII関数は、米国国防総省の条件付き承認投票で要求されました[要出典]

この規格の改訂では、以前の規格に準拠したプログラムを無効にする可能性のある方法で、いくつかの機能が削除または変更されました。 (「非推奨」の概念はANSI規格ではまだ利用できなかったため、当時X3J3の唯一の許容可能な代替手段は削除でした。) 競合リストの24項目のほとんど(X3.9-1978の付録A2を参照)以前の規格で許可されていたがほとんど使用されなかった抜け穴や病理学的ケースに対処し、次のような少数の特定の機能を意図的に削除しました。

  • ホレリス定数ホレリスデータなどGREET = 12HHELLO THERE!
  • FORMAT仕様のH編集(ホレリスフィールド)記述子への読み込み
  • 下付き文字による配列境界のオーバーインデックス
          DIMENSION A 10 5 
    Y = A 11 1         
    
  • DOループの範囲外および範囲内への制御の転送(「拡張範囲」とも呼ばれます)

バリアント:ミネソタFORTRAN

Control Data Corporationのコンピューターには、ミネソタFORTRAN(MNF)と呼ばれる別のバージョンのFORTRAN 77があり、出力構造のバリエーション、COMMONおよびDATAステートメントの特別な使用、コンパイル用の最適化コードレベル、詳細なエラーリスト、広範な警告を備えた、学生用に特別に設計されています。メッセージ、およびデバッグ機能。[33] MNFは、ミネソタ大学の人々(Liddiard&Mundstock)によって開発されました[34] MNFは基本的に無料で入手できた。

ANSI標準Fortranへの移行

FORTRAN 77を成功させるための改訂された標準の開発は、標準化プロセスがコンピューティングとプログラミングの実践の急速な変化に追いつくのに苦労したため、繰り返し遅れることになります。その間、15年近くの間「標準のFORTRAN」として、FORTRAN77は歴史的に最も重要な方言になるでしょう。

FORTRAN 77の重要な実用的な拡張は、1978年のMIL-STD-1753のリリースでした。[35]米国国防総省によって開発されたこの仕様は、ほとんどのFORTRAN 77コンパイラによって実装されたが、ANSIには含まれていない多くの機能を標準化しました。 FORTRAN77標準。これらの機能は、最終的にはFortran90標準に組み込まれる予定です。

IEEE 1003.9 POSIX 1991年にリリースされた標準は、問題POSIXシステムコールにFORTRAN 77プログラマのための簡単な手段を提供します。[36] 100を超える呼び出しがドキュメントで定義されており、POSIX互換のプロセス制御、信号処理、ファイルシステム制御、デバイス制御、プロシージャポインティング、およびストリームI / Oへのポータブルなアクセスを可能にします。

Fortran 90

大幅に遅れたFORTRAN77の後継であるFortran90(およびそれ以前はFortran 8X)は、1991年にISO / IEC標準1539:1991として、1992年にANSI標準として最終的にリリースされました。 FORTRANからFortranへのスペルで、このメジャーリビジョンは、1978年の標準以降に進化したプログラミング慣行の重要な変更を反映するために多くの新機能を追加しました。

  • 自由形式のソース入力、これも小文字のFortranキーワード
  • 長さが最大31文字の識別子(以前の標準では、6文字のみでした)。
  • インラインコメント
  • 配列(または配列セクション)全体を操作する機能。これにより、数学と工学の計算が大幅に簡素化されます。
    • 全体、部分、およびマスクされた配列割り当てステートメントと配列式(次のような) X(1:N)=R(1:N)*COS(A(1:N))
    • WHERE 選択的な配列割り当てのステートメント
    • 配列値の定数と式、
    • ユーザー定義の配列値関数と配列コンストラクター。
  • RECURSIVE 手順
  • モジュール。関連するプロシージャとデータをグループ化し、モジュールの特定の部分のみにアクセスを制限する機能など、他のプログラムユニットで利用できるようにします。
  • 大幅に改善された引数受け渡しメカニズムにより、コンパイル時にインターフェイスをチェックできます
  • 一般的な手順のためのユーザー作成のインターフェース
  • 演算子のオーバーロード
  • 派生(構造化)データ型
  • 変数のデータ型およびその他の属性を指定するための新しいデータ型宣言構文
  • ALLOCATABLE属性とALLOCATEandDEALLOCATEステートメントによる動的メモリ割り当て
  • POINTERNULLIFY動的データ構造の作成と操作を容易にするための属性、ポインター割り当て、およびステートメント
  • 構造化して、ループ構造END DOループ終了のための声明、そしてEXITそしてCYCLE通常終了するための書類DO整然とループの反復を
  • SELECTCASE多方向選択のための構築
  • ユーザーが制御できる数値精度のポータブル仕様
  • 新しく強化された固有の手順。

退行と削除

以前のリビジョンとは異なり、Fortran90は機能を削除しませんでした。[37]標準に準拠するFORTRAN77プログラムは、Fortran 90でも標準に準拠しており、どちらの標準もその動作を定義するために使用できる必要があります。

少数の機能セットが「廃止」として識別され、将来の標準で削除される予定です。これらの初期バージョンの機能のすべての機能は、新しいFortran95機能によって実行されます。古いプログラムの移植を簡素化するために保持されているものもありますが、最終的には削除される可能性があります。

退行と削除
廃止された機能 Fortran95のステータス/運命
算術IFステートメント
      IF  X  10  20  30
非推奨
整数以外のDOパラメーターまたは制御変数
      DO 9  X =  1.7  1.6  - 0.1
削除されました
共有DOループの終了またはENDDOまたはCONTINUE以外の  
ステートメントによる終了
      DO 9  J =  1  10 
DO 9 K = 1 10   9   L = J + K             
         
非推奨
ENDIFへの分岐

ブロックの外から

66    GO  TO  77  ;    
IF E THEN ; 77   END IF                
 
削除されました
代替リターン
      CALL SUBR  X  Y  * 100  * 200  
非推奨
PAUSEステートメント
      一時停止600
削除されました
ASSIGNステートメント
  と割り当てられた GOTOステートメント
100     
ASSIGN 100 TO H GO TO H         
         
           
削除されました
割り当てられたステートメント番号とFORMAT指定子
      ASSIGN 606  TO  F  ...  WRITE   6  F  )...
削除されました
H編集記述子
606 フォーマット  9 H1GOODBYE  
削除されました
計算されたGOTOステートメント
      GO  TO  10  20  30  40 )、 インデックス
(廃止)
ステートメント関数
      FOIL  X  Y  =   X ** 2  +  2 * X * Y  +  Y ** 2
(廃止)

  実行可能ステートメントの中の DATAステートメント
      X =  2 7.3 
DATA   A B C / 5.0 1 2.0 1 3.0 /               
        
(廃止)
CHARACTER *形式のCHARACTER宣言
      CHARACTER * 8  STRING    CHARACTER(8)を使用する
(廃止)
想定される文字長関数
      文字* *  文字列
(廃止)[38]
固定形式のソースコード 列1には、Cまたは*または!が含まれています。コメントのために。
ステートメント番号の列1から5
継続のための列6の任意の文字。
73列目以降は無視されます
(廃止)

"こんにちは世界!"

プログラムのHelloWorld
     印刷 *  "こんにちは、世界!" 
プログラムhelloworldを終了します

Fortran 95

ISO / IEC 1539-1:1997として公式に公開されたFortran 95はマイナーな改訂であり、主にFortran90標準からのいくつかの未解決の問題を解決するためのものでした。それにもかかわらず、Fortran 95は、特にHigh Performance Fortran仕様から、いくつかの拡張機能も追加しました

  • FORALLWHEREベクトル化を支援するネストされた構成
  • ユーザー定義PUREELEMENTAL手順
  • ポインタの初期化を含む、派生型コンポーネントのデフォルトの初期化
  • データオブジェクトの初期化式を使用する機能が拡張されました
  • へのポインタの初期化 NULL()
  • ALLOCATABLE配列がスコープ外になると自動的に割り当てが解除されることを明確に定義しました

いくつかの組み込み関数が拡張されました(たとえば、dim引数が組み込み関数に追加されましたmaxloc)。

Fortran90で「廃止」と記載されているいくつかの機能がFortran95から削除されました。

  • DO変数を使用するステートメントREALDOUBLE PRECISIONインデックス変数
  • END IFブロックの外側からステートメントに分岐する
  • PAUSE 声明
  • ASSIGNおよび割り当てられたGO TOステートメント、および割り当てられたフォーマット指定子
  • H ホレリス編集記述子。

Fortran 95の重要な補足は、ISOテクニカルレポート TR-15581:拡張データ型機能でした。これは非公式に割り当て可能TRとして知られています。 この仕様はALLOCATABLE、Fortran 2003に完全に準拠したFortranコンパイラーが利用可能になる前に、配列の拡張使用を定義しました。このような用途にはALLOCATABLE、派生型コンポーネント、プロシージャのダミー引数リスト、および関数の戻り値としての配列が含まれます。 (ALLOCATABLE配列は、Fortran 95によってスコープ外になると自動的に割り当てが解除されることが保証されているPOINTERためベースの配列よりも望ましいです。これALLOCATABLEにより、メモリリークの可能性が排除されます。さらに、割り当て可能な配列の要素は連続しており、エイリアスが作成されます。配列参照の最適化の問題ではないため、コンパイラーはポインターの場合よりも高速なコードを生成できます。[39]

Fortran 95のもう1つの重要な補足は、ISOテクニカルレポートTR-15580:浮動小数点例外処理でした。これは非公式にIEEETRとして知られています。 この仕様では、IEEE浮動小数点演算および浮動小数点 例外処理のサポートが定義されています。

条件付きコンパイルとさまざまな長さの文字列

必須の「基本言語」(ISO / IEC 1539-1:1997で定義)に加えて、Fortran95言語には2つのオプションモジュールも含まれています。

  • さまざまな長さの文字列(ISO / IEC 1539-2:2000)
  • 条件付きコンパイル(ISO / IEC 1539-3:1998)

これは、一緒になって、マルチパート国際規格(ISO / IEC 1539)を構成します。

標準開発者によると、「オプションの部分は、かなりの数のユーザーや実装者から要求されたが、すべての標準準拠で必要とされるほど一般的ではないと見なされる自己完結型の機能を記述しています。 Fortranコンパイラ。」それにもかかわらず、標準に準拠したFortranがそのようなオプションを提供する場合、それらは「標準の適切な部分のそれらの機能の説明に従って提供されなければならない」。

最新のFortran

21世紀の標準で定義されている言語は、特にオブジェクト指向プログラミングのサポートとそれに続くCoarray Fortranが組み込まれているため、「Modern Fortran」と呼ばれることが多く、この用語は文献でますます使用されています。

Fortran 2003

ISO / IEC 1539-1:2004として正式に公開されているFortran 2003は、多くの新機能を導入したメジャーリビジョンです。[40] Fortran 2003の新機能の包括的な要約は、Fortranワーキンググループ(ISO / IEC JTC1 / SC22 / WG5)の公式Webサイトで入手できます。[41]

その記事から、このリビジョンの主な機能強化は次のとおりです。

  • 派生型の機能強化:パラメーター化された派生型、アクセシビリティの改善された制御、改善された構造コンストラクター、およびファイナライザー
  • オブジェクト指向プログラミングのサポート:型の拡張と継承ポリモーフィズム、動的な型の割り当て、および型にバインドされたプロシージャ。抽象データ型の完全なサポートを提供します。
  • データ操作の機能強化:割り当て可能なコンポーネント(TR 15581を組み込む)、遅延型パラメーター、VOLATILE属性、配列コンストラクターと割り当てステートメントでの明示的な型指定、ポインターの機能強化、拡張初期化式、および拡張された組み込みプロシージャ
  • 入出力の機能強化:非同期転送、ストリームアクセス、派生型のユーザー指定の転送操作、形式変換中の丸めのユーザー指定の制御、事前接続された単位の名前付き定数、FLUSHステートメント、キーワードの正則化、およびエラーメッセージへのアクセス
  • プロシージャポインタ
  • IEEE浮動小数点演算および浮動小数点 例外処理のサポート(TR 15580を組み込む)
  • Cプログラミング言語との相互運用性
  • 国際使用のサポート:ISO 10646 4バイト文字へのアクセス、および数値形式の入出力での10進数またはコンマの選択
  • ホストオペレーティングシステムとの統合の強化:コマンドライン引数、環境変数、およびプロセッサエラーメッセージへのアクセス

Fortran 2003の重要な補足は、ISOテクニカルレポート TR-19767:Fortranの拡張モジュール機能でした。 このレポートは FortranモジュールをModula-2モジュールにより類似させるサブモジュールを提供しましたそれらは、Adaのプライベートチャイルドサブユニットに似ています。これにより、モジュールの仕様と実装を個別のプログラムユニットで表現できるようになり、大規模なライブラリのパッケージ化が改善され、最終的なインターフェイスを公開しながら企業秘密を保持できるようになり、コンパイルカスケードが防止されます。

Fortran 2008

非公式にFortran2008として知られるISO / IEC 1539-1:2010は、2010年9月に承認されました。[42] [43]これは、Fortran 95と同様に、Fortran 2003の説明と修正を組み込んだマイナーなアップグレードであり、いくつかの新機能。新機能は次のとおりです。

  • サブモジュール-モジュール用の追加の構造化機能。ISO / IEC TR 19767:2005に取って代わります
  • Co-Array Fortran —並列実行モデル
  • DO CONCURRENTのコンストラクトのためのループの反復がない相互依存関係を持ちます
  • CONTIGUOUS属性-ストレージレイアウトの制限を指定します
  • BLOCK構築物は、構築物スコープを持つオブジェクトの宣言を含む-CAN
  • 再帰的な割り当て可能なコンポーネント—派生型の再帰的なポインタの代わりとして

最終ドラフト国際規格(FDIS)は、ドキュメントN1830として入手できます。[44]

Fortranの2008年にサプリメントがある国際標準化機構(ISO)の技術仕様書(TS)29113 CとFortranののさらに相互運用性[45] [46] 承認のために2012年5月にISOに提出されています。この仕様では、Cから配列記述子にアクセスするためのサポートが追加され、引数のタイプとランクを無視できるようになっています。

Fortran 2018

言語の最新リビジョン(Fortran 2018)は、以前はFortran 2015と呼ばれていました。[47]これは重要なリビジョンであり、2018年11月28日にリリースされました。[48]

Fortran 2018には、以前に公開された2つの技術仕様が組み込まれています。

  • ISO / IEC TS 29113:2012Cとのさらなる相互運用性[49]
  • ISO / IEC TS 18508:2015Fortranの追加の並列機能[50]

追加の変更と新機能には、ISO / IEC / IEEE 60559:2011(最新のマイナーリビジョンIEEE 754-2019より前のバージョンのIEEEフローティングポイント標準)のサポート、16進入出力、IMPLICITNONEの機能強化およびその他の変更が含まれます。[51] [52] [53] [54]

言語機能

Fortran 95によってもたらされるFortran言語機能の完全な説明は、関連記事、Fortran95言語機能で説明されています後の標準で定義されている言語バージョンは、まとめて「Modern Fortran」と呼ばれることが多く、文献に記載されています。

科学と工学

デカルト適応メッシュ(www.bhac.science)でBHACコードを使用したブラックホール降着の一般相対論的電磁流体力学Fortranシミュレーション。
バルセロナスーパーコンピューティングセンター(2020)のNEMO Fortranコード(Nucleus for European Modeling of the Ocean、https://www.nemo-ocean.eu)を使用して計算された、海洋の速度と海面水温

BASICの著者による1968年のジャーナル記事では、FORTRANはすでに「昔ながらの」と説明されていますが[55]プログラムは60年以上Fortranで作成されており、科学および工学全体で日常的に使用されているFortranソフトウェアの膨大な量があります。コミュニティ。[56] ジェイ・パサチョフは1984年に、「物理学と天文学の学生は単にFORTRANを学ばなければならない。FORTRANには非常に多くのことが存在するため、科学者がPascalModula-2などに変更する可能性は低いと思われる」と書いています。[57] 1993年、セシルE.リースFORTRANを「科学計算の母国語」と呼び、他の可能な言語に置き換えることは「決死隊のままかもしれない」と付け加えた。[58]

これは、天文学気候モデリング、計算化学、計算経済学計算流体力学計算物理学、データ分析、水文モデリング、数値線形代数、数値ライブラリなど、最も集中的なスーパーコンピューティングタスクの主要言語ですLAPACKIMSLおよびNAG)、最適化、衛星シミュレーション、構造工学、および気象予測[要出典]SPECベンチマークの 浮動小数点コンポーネントCFP2006CFP2017などなど、新しいコンピュータープロセッサのパフォーマンスを測定するための浮動小数点ベンチマークの多くは、Fortranで記述されています。数学アルゴリズムは、数値レシピに詳しく記載されています

これとは別に、計算科学のより近代的なコードは、一般的のような大規模なプログラムライブラリ、使用METISをグラフ分割のためPETScまたはTrilinos線形代数機能のため、DUNEまたはFENICSメッシュと有限要素のサポート、およびその他の一般的なライブラリのために。 2000年代初頭以来、広く使用されているサポートライブラリの多くはCでも実装されており、最近ではC ++でも実装されています。一方、MATLABPythonRなどの高級言語計算科学の特定の分野で人気が高まっています。その結果、科学プログラムのますます多くの部分がそのような高レベルのスクリプト言語で書かれています。このため、Cとの相互運用機能がFortran 2003に追加され、他のプログラミング言語とのより柔軟な相互運用を可能にするためにFortran2018に組み込まれたISO / IEC技術仕様29113によって拡張されました。

NASAプローブVoyager1およびVoyager2のソフトウェアは、元々FORTRAN 5で作成され、後にFORTRAN 77に移植されました。2013年9月25日の時点で、一部のソフトウェアは引き続きFortranで作成され、一部はCに移植されています。[59]

移植性

合意された標準がなく、IBMのリファレンスマニュアルさえもなかったため、初期の頃は移植性が問題でした。コンピューター会社は、互換性のない機能を提供することで、自社の製品を他の製品と差別化しようと努めました。標準により、移植性が向上しました。 1966規格は参照構文とセマンティクスを提供しましたが、ベンダーは互換性のない拡張機能を提供し続けました。慎重なプログラマが互換性のない拡張機能の利用を実現するために来ていたものの、高価な移植性の問題を引き起こし、そのためのようなプログラムを使用していた、PFORT検証を[60] [61]それはなかったまで1977標準の後、とき国立標準局(現在NIST)公開されたFIPS PUB 69、米国政府が購入したプロセッサは、規格の拡張を診断する必要がありました。 2つのプロセッサを提供するのではなく、基本的にすべてのコンパイラには、最終的に少なくとも拡張機能を診断するオプションがありました。[62] [63]

互換性のない拡張機能だけが移植性の問題ではありませんでした。数値計算では、算術の特性を考慮することが重要です。これはFoxらによって対処されました。PORTライブラリによる1966年の標準のコンテキストで[61]その中のアイデアは広く使用されるようになり、最終的には固有の照会機能によって1990年の標準に組み込まれました。バイナリ浮動小数点演算にIEEE754標準が広く(現在はほぼ普遍的に)採用されているため、この問題は本質的に解消されています。

コンピューティング環境(プログラムのコマンドライン、環境変数、エラー状態のテキストによる説明など)へのアクセスは、2003年の標準で対処されるまで問題のままでした。

グラフィックライブラリなど、工学および科学計算に大まかに関連していると説明できるライブラリソフトウェアの大規模なコレクションは、Cで記述されているため、それらへのアクセスには移植性の問題がありました。これは、2003年の標準にCの相互運用性を組み込むことで対処されています。

プリプロセッサに頼らなくても、Fortranで完全に移植可能なプログラムを書くことが可能になりました(そして比較的簡単になりました)。

廃止されたバリアント

Fortran 66標準が開発されるまで、各コンパイラーは独自のFortranのバリアントをサポートしていました。いくつかは他のものより主流からより分岐していました。

最初のFortranコンパイラーは、コンパイルされたコードに高水準の効率を設定しました。この目標によりコンパイラーの作成が困難になったため、通常、ハードウェアの販売をサポートするためにコンピューターメーカーによって行われました。これは重要なニッチを残しました:高速でプログラマー(多くの場合学生)に優れた診断を提供するコンパイラー。例としては、Watfor、Watfiv、PUFFT、および小規模ではFORGO、Wits Fortran、およびKingston Fortran2があります。

Fortran 5、1970年代後半から1980年代初頭にかけて、Data General CorpによってNovaEclipse、およびMVシリーズのコンピューター向けに販売されました当時のミニコンピューターに非常に適した最適化コンパイラーがありました。言語はFORTRAN66に最もよく似ています。

FORTRAN V、1968年にControl DataCorporationによってCDC6600シリーズに配布されました言語はFORTRANIVに基づいていました。[64]

Univacは、FORTRANVとして知られる1100シリーズ用のコンパイラーも提供しました。UnivacFortranVのスピンオフはAthenaFORTRANでした。

特定の変異体の高性能科学コンピュータ(のベンダーによって作ら例えば、 バロウズコントロール・データ・コーポレーション(CDC)、クレイハネウェルIBMテキサス・インスツルメンツ、およびUNIVAC)特別なハードウェアを活用するためのFortranの拡張機能を追加したような機能命令キャッシュ、CPUパイプライン、およびベクトル配列。たとえば、IBMのFORTRANコンパイラーの1つ(H Extended IUP)には、マシンコード 命令を並べ替えるレベルの最適化がありました。複数の内部演算ユニットを同時にビジー状態に保つため。もう1つの例はNASAエイムズ研究センターで実行されているILLIACIVスーパーコンピューター用に特別に設計されたFORTRANの特別なバリアントであるCFDです。IBM Research Labsは、ベクトルと行列を処理するためのVECTRANと呼ばれる拡張FORTRANベースの言語も開発しました

オブジェクト指向Fortranは、Fortranのオブジェクト指向拡張であり、データ項目をオブジェクトにグループ化して、インスタンス化して並行して実行することができます。Sun、Iris、iPSC、およびnCUBEで利用可能でしたが、サポートされなくなりました。

このようなマシン固有の拡張機能は、時間の経過とともに姿を消したか、主要な標準に要素が組み込まれています。残りの主要な拡張機能はOpenMPです。これは、共有メモリプログラミング用のクロスプラットフォーム拡張機能です。1つの新しい拡張機能であるCoarrayFortranは、並列プログラミングをサポートすることを目的としています。

FOR TRANSITは、1950年代後半にCarnegieで開発された翻訳プログラムを使用して、IBM650用に実装されたIBM704FORTRAN言語の縮小版の名前でした。[65] 次のコメントがIBMリファレンスマニュアル( FOR TRANSIT自動コーディングシステムC28-4038、Copyright 1957、1959 by IBM)に記載されています。

FORTRANシステムは、650よりも複雑なマシン用に設計されているため、FORTRANプログラマーズリファレンスマニュアルにある32のステートメントの一部は、FORTRANSITシステムでは受け入れられません。さらに、FORTRAN言語に特定の制限が追加されました。ただし、これらの制限のいずれも、FORTRANSIT用に作成されたソースプログラムを704のFORTRANシステムと互換性のないものにするものではありません。

許容されるステートメントは次のとおりです。

  • 算術代入ステートメント、例えば、 a = b
  • GO to n
  • GO TO (n1, n2, ..., nm), i
  • IF (a) n1, n2, n3
  • PAUSE
  • STOP
  • DO n i = m1, m2
  • CONTINUE
  • END
  • READ n, list
  • PUNCH n, list
  • DIMENSION 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進(2進)演算を備えたマシン用です。マニュアルの付録Aには、IBM533カードリーダー/パンチコントロールパネルの配線図が含まれています。

Fortranベースの言語

FORTRAN 77よりは、より使いやすい言語を提供するために多くのプリプロセッサが一般的に使用されていました。前処理されたコードは、標準のFORTRANコンパイラを使用して任意のマシンでコンパイルできるという利点がありました。これらのプリプロセッサは通常、構造化プログラミング、6文字を超える変数名、追加のデータ型、条件付きコンパイル、さらにはマクロ機能をサポートします。人気のあるプリプロセッサには、FLECSiftranMORTRANSFtranS-FortranRatfor、およびRatfivが含まれていました。たとえば、RatforとRatfivはCを実装しました-言語のように、標準のFORTRAN 66で前処理されたコードを出力します。Fortran言語の進歩にもかかわらず、条件付きコンパイルとマクロ置換にはプリプロセッサが引き続き使用されます。

60年代に導入されたFORTRANの最も初期のバージョンの1つは、大学で広く使用されていました。ウォータールー大学によって開発、サポート、配布されたWATFOR主にFORTRANIVに基づいていました。WATFORを使用している学生は、バッチFORTRANジョブを送信でき、構文エラーがない場合、プログラムは直接実行に移されます。この単純化により、学生は提出ジョブ制御言語を扱うのではなく、プログラムの構文とセマンティクス、または実行ロジックフローに集中することができました。(JCL)、コンパイル/リンク編集/実行の連続プロセス、またはメインフレーム/ミニコンピューター環境の他の複雑さ。この単純化された環境の欠点は、ホストプロセッサの拡張機能を必要とするプログラマにとってWATFORが適切な選択ではなかったことです。たとえば、WATFORは通常I / Oデバイスへのアクセスが非常に制限されていました。WATFORは、WATFIV以降のバージョンに引き継がれました

プログラム;  s = 0  i = 1 n ;  s = s + 1 ;  私を止めて; s = 's'停止   

(ラインプログラミング)

LRLTRAN、システムプログラミングをサポートする他の拡張機能の中でも、ベクトル演算と動的ストレージのサポートを提供するためにローレンス放射線研究所で開発されましたディストリビューションには、LTSSオペレーティングシステムが含まれていました

Fortran-95標準には、オプションの条件付きコンパイル機能を定義するオプションのパート3含まれていますこの機能は、「CoCo」と呼ばれることがよくあります。

多くのFortranコンパイラーは、Cプリプロセッサーのサブセットをシステムに統合しています。

SIMSCRIPTは、大規模なディスクリートシステムをモデル化およびシミュレーションするためのアプリケーション固有のFortranプリプロセッサです。

Fプログラミング言語は冗長、非構造化、およびなどのFortranの廃止予定の機能、削除しようとしたのFortran 95のきれいなサブセットであるように設計されたEQUIVALENCE声明を。 Fは、Fortran 90で追加された配列機能を保持し、FORTRAN77とFortran90の両方に追加された構造化プログラミング構造によって廃止された制御ステートメントを削除します。教育と科学的コンピューティングへ」。[66] Essential Lahey Fortran 90(ELF90)も同様のサブセットでした。

レイヒーと富士通は、マイクロソフトのためのFortranを作成するために提携し、.NET Frameworkの[67] SilverfrostFTN95は.NETコードを作成することもできます。[68]

コード例

次のプログラムは、動的メモリ割り当てと配列ベースの操作、Fortran 90で導入された2つの機能を示しています。特に注目すべきは、配列の操作DOループやIF/THENステートメントがないことです。数学演算は配列全体に適用されます。また、現代のプログラミングスタイルに準拠した説明的な変数名と一般的なコードフォーマットの使用も明らかです。この例では、インタラクティブに入力されたデータの平均を計算します。

プログラム平均

  いくつかの数字を読んで、平均を取って
  ください!書かれているように、データポイントがない場合、平均ゼロが返され
  ます!これは望ましい動作ではないかもしれませんが、この例を単純に保ちます

  暗黙的なし

  実際の 寸法(:)、 割り当て :: 
  整数                         ::  NUMBER_OF_POINTS
                              ::  average_points  positive_average  negative_averageの
  average_points  =  0.0 
  positive_average  =  0.0 
  negative_average  =  0.0
  ライト * *  "点の入力数平均を"
  読み取り  * *  number_of_points

  割り当て ポイントnumber_of_points ))

  write  * *  "平均するポイントを入力してください:" 
  read   * *  ポイント

  ポイントを合計し、number_of_pointsで割って平均を取ります
  if  number_of_points  >  0  average_points  =  sum points  /  number_of_points

  !ここで、正と負のポイントの平均を形成するのは
   count ポイント >  0。 >  0  positive_average  =  sum ポイント ポイント >  0。 /  count ポイント >  0。
  if  count ポイント <  0。 >  0  negative_average  = 合計ポイント ポイント <  0。 / カウントポイント <  0。

  結果を端末に出力する
  write  * '(a、g12.4)'  'Average ='  average_points 
  write  * '(a、g12.4)'  '正のポイントの平均='  positive_average 
  write  * '(a、g12.4)'  '負の点の平均='  negative_average

プログラム終了平均

ユーモア

「FORTRAN77」という名前が選ばれた同じFORTRAN標準委員会の会議中に、風刺的な技術提案が「Letter O ThoughdHarmfulというタイトルの公式配布に組み込まれました。この提案は、許容される変数名から文字を削除することにより、文字「O」と数字のゼロの間で時々発生する混乱に対処することを目的としています。ただし、提案された方法は、文字セットから文字を完全に削除することでした(これにより、コロンが49に増加した字句文字の数として48が保持されます)。これはGO TO、以前のように悪名高いステートメントを使用することを不可能にすることにより、構造化プログラミングを促進するという点で有益であると考えられました。 (面倒FORMATこれは「既存のプログラムの一部を無効にする可能性がある」が、これらのほとんどは「とにかく不適合だった」と指摘された。[69] [70]

X3J3は、DOループの最小トリップ数は、Fortran 77に0または1でなければならないかどうかを議論するとき、ローレンマイスナーは、二推論の最小トリップカウント提案(冗談)が2未満であった場合はそこであろうことをループの理由はありません!

想定される長さの配列が追加されていたとき、上限と下限を分離するための適切な文字に関して論争がありました。これらの議論を検討するコメントの中で、ウォルトブレーナード博士は、「天文学と消化器病学」というタイトルの記事を執筆しました。[要出典]

I〜Nの文字で始まる変数名のデフォルトのタイプは整数ですが、他の文字で始まる変数はデフォルトで実数になりますが、プログラマーは明示的な宣言でデフォルトをオーバーライドできます。[71]これは冗談につながった:「FORTRANでは、神は本物である(INTEGERと宣言されていない限り)」。

も参照してください

参考文献

  1. ^ 「チャペル仕様(謝辞)」 (PDF)Cray Inc. 2015年10月1日取り出さ年1月14 2016
  2. ^ ジョン・バッカス。「FORTRANI、II、IIIの歴史」(PDF)Softwarepreservation.org 取得した19年11月2014
  3. ^ Eugene Loh(2010年6月18日)。「理想的なHPCプログラミング言語」キュー8(6)。
  4. ^ 「HPL–分散メモリコンピュータ用の高性能Linpackベンチマークのポータブル実装」取得した21年2月2015
  5. ^ 「Q13。ベンチマークは何ですか?」概要-CPU2017SPEC 2019年11月13日取得
  6. ^ 「BASICの50年」時間2014年4月29日。
  7. ^ Szczepaniak、ジョン(2014年5月1日)。「50歳の誕生日のBASICの基本的な歴史」ガマスートラ
  8. ^ TIOBEソフトウェアBV(2021年8月)。「2021年8月のTIOBEインデックス」TIOBE.comTIOBE 2021年8月4日取得
  9. ^ a b c d e f バッカス、ジョン(1998年10月〜12月)。「FortranI、II、およびIIIの歴史」(PDF)コンピューティングの歴史のIEEE年報20(4):68–78。土井10.1109 /85.7282322016年3月3日にオリジナルからアーカイブ(PDF)2020年6月17日取得 [1] [2]
  10. ^ 「FORTRAN:先駆的なプログラミング言語」2012年3月7日2017年7月19日取得
  11. ^ 「FORTRAN」ブリタニカ百科事典2021年6月14日2021年7月19日取得
  12. ^ Chapman、Stephen J.(2018)。科学者およびエンジニアのためのFortran(第4版)。ニューヨークMcGraw-HillEducationNS。13. ISBN 978-0-07-338589-1
  13. ^ FORTRAN 77標準で定義されている「Fortran文字セット」は、標準準拠のコンパイラがサポートする必要のある最小限の文字セットでした。実際には、多くのFORTRAN77コンパイラーは完全なASCII文字セットをサポートしていました
  14. ^ a b J. W. Backus ; RJビーバー; S.ベスト; R.ゴールドバーグ; LMハイブト; HLヘリック; RAネルソン; D.セイヤー; PBシェリダン; H.スターン; L.ジラー; RAヒューズ; R.ナット(1957年2月)。FORTRAN自動コーディングシステム(PDF)西部合同コンピュータ会議。pp。188–198。土井10.1145 /1455567.1455599
  15. ^ Mindell, David, Digital Apollo, MIT Press, Cambridge MA, 2008, p.99
  16. ^ Padua, David (January–February 2000). "The Fortran I Compiler" (PDF). Computing in Science and Engineering (CiSE). the Top Algorithms. University of Illinois: IEEE. 2 (1): 70–75. Bibcode:2000CSE.....2a..70P. doi:10.1109/5992.814661. Archived from the original (PDF) on 17 June 2020. The Fortran I compiler was the first major project in code optimization. It tackled problems of crucial importance whose general solution was an important research focus in compiler technology for several decades. Many classical techniques for compiler analysis and optimization can trace their origins and inspiration to the Fortran I compiler.
  17. ^ Brian Bergstein (20 May 2007). "Fortran creator John Backus dies". MSNBC. Retrieved 29 October 2018.
  18. ^ http://scihi.org/fortran-programming/
  19. ^ Applied Science Division and Programming Research Department, International Business Machines Corporation (15 October 1956). The FORTRAN Automatic Coding System for the IBM 704 EDPM : Programmer's Reference Manual (PDF). pp. 19–20.
  20. ^ Programming Research Department, International Business Machines Corporation (8 April 1957). The FORTRAN Automatic Coding System for the IBM 704 EDPM : Preliminary Operator's Manual (PDF). pp. 6–37.
  21. ^ Betty Jo Armstead (21 January 2015). "My Years at NASA" (PDF). Denver Museum of Nature & Science. Archived from the original (PDF) on 24 December 2019. Retrieved 15 June 2019.
  22. ^ Reference Manual, IBM 7090 Data Processing System, 1961, IBM A22-6528-3.
  23. ^ "Fortran II User Manual" (PDF). Bitsavers.org. Retrieved 19 November 2014.
  24. ^ Reference Manual, FORTRAN II for the IBM 704 Data Processing System (PDF). 1958. C28-6000-2.
  25. ^ "Ibibilio.org". Ibiblio.org. Retrieved 15 September 2014.
  26. ^ Haines, L. H. (1965). "Serial compilation and the 1401 FORTRAN compiler". IBM Systems Journal. 4 (1): 73–80. doi:10.1147/sj.41.0073.
  27. ^ Lee, John A. N. (1967). Anatomy of a Compiler. Van Nostrand Reinhold.
  28. ^ Fortran Specifications and Operating Procedures, IBM 1401 (PDF). IBM. C24-1455-2.
  29. ^ Fortran IV Language Specifications, Program Specifications, and Operating Procedures, IBM 1401, 1440, and 1460 (PDF). IBM. April 1966. C24-3322-2.
  30. ^ McCracken, Daniel D. (1965). "Preface". A Guide to FORTRAN IV Programming. New York: Wiley. p. v. ISBN 978-0-471-58281-6.
  31. ^ "List of FORTRAN Implementations 1957 - 1967". IEEE Annals. 2017. Retrieved 17 October 2017.
  32. ^ IBM System/360 Model 50 Functional Characteristics (PDF). IBM. 1967. A22-6898-1.
  33. ^ "FORTRAN Compilers and Loaders". Chilton-programming.org.uk. Retrieved 19 November 2014.
  34. ^ Frisch, Michael (December 1972). "Remarks on Algorithms". Communications of the ACM. 15 (12): 1074. doi:10.1145/361598.361914. S2CID 6571977.
  35. ^ Mil-std-1753. DoD Supplement to X3.9-1978. United States Government Printing Office. Archived from the original on 9 November 2007. Retrieved 13 December 2007.
  36. ^ IEEE 1003.9-1992 - IEEE Standard for InformationTechnology - POSIX(R) FORTRAN 77 Language Interfaces - Part 1: Binding for System Application Program Interface (API). IEEE. Retrieved 24 November 2018.
  37. ^ Appendix B.1
  38. ^ "Declaration Statements for Character Types". Compaq Fortran Language Reference Manual. Texas, Huston, US: Compaq Computer Corporation. 1999. Archived from the original on 18 September 2018. Retrieved 17 September 2018. The form CHARACTER*(*) is an obsolescent feature in Fortran 95.
  39. ^ "Fortran 95 Reference". Gnu.Org. Retrieved 10 May 2014.
  40. ^ "Fortran 2003– Last Working Draft". Gnu.Org. Retrieved 10 May 2014.
  41. ^ Fortran Working Group (WG5). It may also be downloaded as a PDF file, FTP.nag.co.uk
  42. ^ "N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology – Programming languages – Fortran – Part 1: Base language" (PDF).
  43. ^ "Fortran 2008 – Last Working Draft" (PDF). Gnu.Org. Retrieved 10 May 2014.
  44. ^ N1830, Information technology – Programming languages – Fortran – Part 1: Base language [3][dead link]
  45. ^ ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C
  46. ^ "Draft of the Technical Specification (TS) 29113" (PDF). wg5-fortran.org.
  47. ^ "Doctor Fortran in "Eighteen is the new Fifteen"". Software.intel.com. Retrieved 20 November 2017.
  48. ^ "Fortran 2018". ISO. Retrieved 30 November 2018.
  49. ^ "Further Interoperability with C" (PDF). ISO. Retrieved 20 November 2017.
  50. ^ "Additional Parallel Features in Fortran". ISO. Retrieved 20 November 2017.
  51. ^ "The New Features of Fortran 2015". ISO. Retrieved 23 June 2017.
  52. ^ "Doctor Fortran in "One Door Closes"". Software.intel.com. Retrieved 21 September 2015.
  53. ^ "Doctor Fortran Goes Dutch: Fortran 2015". Software.intel.com. Retrieved 19 November 2014.
  54. ^ Fortran 2018 Interpretation Document, 9 October 2018
  55. ^ Kemeny, John G.; Kurtz, Thomas E. (11 October 1968). "Dartmouth Time-Sharing". Science. 162 (3850): 223–228. Bibcode:1968Sci...162..223K. doi:10.1126/science.162.3850.223. PMID 5675464.
  56. ^ Phillips, Lee. "Scientific computing's future: Can any coding language top a 1950s behemoth?". Ars Technica. Retrieved 8 May 2014.
  57. ^ Pasachoff, Jay M. (April 1984). "Scientists: FORTRAN vs. Modula-2". BYTE (letter). p. 404. Retrieved 6 February 2015.
  58. ^ Galperin, Boris (1993). "26". Large Eddy Simulation of Complex Engineering and Geophysical Flows. London: Cambridgey. p. 573. ISBN 978-0-521-43009-8.
  59. ^ "Interstellar 8-Track: How Voyager's Vintage Tech Keeps Running". WIRED. Retrieved 23 December 2017.
  60. ^ "Methods to ensure the standardization of FORTRAN software". OSTI 5361454. PFORT ... Library ... Cite journal requires |journal= (help)
  61. ^ a b P. A. Fox (1977). "Port — A portable mathematical subroutine library". A portable mathematical subroutine library. Lecture Notes in Computer Science. 57. pp. 165–177. doi:10.1007/3-540-08446-0_42. ISBN 978-3-540-08446-4. PORT ... written in (PFORT) .. ANS Fortran
  62. ^ D. E. Whitten (1975). "A machine and configuration independent Fortran: Portable Fortran". doi:10.1109/TSE.1975.6312825. S2CID 16485156. Cite journal requires |journal= (help)
  63. ^ "Portability Issues". .. discusses .. portability of .. Fortran
  64. ^ Healy, MJR (1968). "Towards FORTRAN VI". Advanced scientific Fortran by CDC. CDC. pp. 169–172. Archived from the original on 5 July 2009. Retrieved 10 April 2009.
  65. ^ "Internal Translator (IT) A Compiler for the IBM 650", by A. J. Perlis, J. W. Smith, and H. R. Van Zoeren, Computation Center, Carnegie Institute of Technology
  66. ^ "F Programming Language Homepage". Fortran.com. Archived from the original on 9 January 2015. Retrieved 19 November 2014.
  67. ^ "Fortran for .NET Language System". Archived from the original on 18 October 2014.
  68. ^ "FTN95: Fortran 95 for Windows". Silverfrost.com. Retrieved 19 November 2014.
  69. ^ X3J3 post-meeting distribution for meeting held at Brookhaven National Laboratory in November 1976.[unreliable source?]
  70. ^ "The obliteration of O", Computer Weekly, 3 March 1977.
  71. ^ "Rules for Data Typing (FORTRAN 77 Language Reference)". docs.oracle.com. Retrieved 29 September 2016.

Further reading

Language standards
Related standards
Other reference material
Books
Articles

External links