コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

Fortranの言語仕様

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Fortranの言語仕様(フォートランのげんごしよう)は、Fortran 90以降の言語仕様について解説している。なお、Fortran 77以前の言語仕様については、FORTRAN 77の言語仕様を参照のこと。

言語仕様

[編集]

Fortran 90以降、Fortran 95、Fortran 2003、Fortran 2008と言語仕様が改定されている。Fortran 95、Fortran 2008はマイナーな改定、Fortran 2003はメジャーな改定である。他のプログラミング言語実装されたフリーフォーマット構造化プログラミングモジュールプログラミング、配列演算、ユーザ定義の総称関数、演算子のオーバーロードHigh Performance Fortranオブジェクト指向コンカレント・コンピューティングなどの機能が言語仕様の改定により取り入れられている。

Fortran 90

[編集]

Fortran 90には、他の言語にある、モジュラープログラミングを行うためのmodule、use、interfaceなどの文法、配列の動的割り付け、配列同士の四則演算、部分配列と添字配列などが取り入れられた。

利用できる文字

[編集]
  • 文字の種類として、英小文字、アンダースコアを始めいくつかの特殊文字が使えるようになった。
  • 習慣的にFortran 90以降のプログラムは英小文字で書く(ただし大文字と小文字は区別されない)。
  • 多くの処理系でコメントに日本語を書ける。

プログラムの書式

[編集]

Fortran 90では、現在のCのように、桁位置を気にする必要のない、自由プログラム形式文脈自由文法)で記述できるようになった(FORTRAN 77時代でも処理系によっては自由形式で記述できるものもあった)。予約語が存在しないという特徴は今でも残っている。なお、同様に古くからあるCOBOLでは数百個の予約語があるのが一般的である。

  • プログラムはC言語と同様に自由プログラム形式で記述する。
  • '!' 以降の文字はコメントになる。'!'はどこに書いても良い。
  • 継続行にするときは、'&'を書く。次の行の第1カラムにも'&'を書く。

数など

[編集]
  • 定数変数の精度を指定する種別パラメータが追加された。また、精度を指定したり、精度情報を得るための関数が定義された。
  • 暗黙の宣言を無効にする、IMPLICIT NONE文が定義された。

変数など

[編集]

変数などについて以下の変更が加えられた。

  • DIMENSION文やPARAMETER文などで、配列定数の定義の時に宣言を同時に行えるようになった。
  • 構造体を定義するための、TYPE文が追加された。
  • 動的な配列や変数を定義するALLOCATABLEパラメータが、各定義文に利用できるようになった。また、実際に領域を割り当てるALLOCATE文と、割り当てた領域を開放するDEALLOCATE文が追加された。

[編集]
  • ENDが拡張され、DO文などの終了文に利用できるようになった。
  • DOループを途中で飛ばすCYCLE文や途中で脱出するEXIT文が追加された。
  • 繰返し (ループ) を定義するDO WHILE文が追加された。
  • 多重分岐を行うSELECT CASE~CASE~END SELECT文が追加された。
  • 仮引数の状態を指定するINTENT文が追加された。
  • ポインタ機能を実現するためのPOINTER文、NULLIFY文とTARGET文が追加された。
  • 数の比較をC言語と同様に記号で行えるようになった。ただし.NE.は /=と記述する。
  • 配列全体に対して操作が行えるようになった。
  • 配列全体に対して比較条件を行うWHERE文が追加された。
  • 内部副プログラムを定義するCONTAINS文が追加された。
  • 関数を再帰可能とするRECURSIVEパラメータをSUBROUTINE文、FUNCTION文の前に付けられるようになった。
  • モジュールを定義するための、MODULE文、USE文が追加された。
  • 利用者定義の操作を作成するためのINTERFACE文が追加された。
  • 名前並びを定義するNAMELIST文が追加された。
  • 他のソースファイルをマージするINCLUDE文が追加された。

Fortran 95

[編集]
  • forallと階層化されたwhereがベクトル化のために追加された。
  • ユーザ定義の pureelemental プロセジャーが追加された。
  • 派生タイプコンポーネントのデフォルト初期化、これはポインターの初期化を含むが追加された。
  • データオブジェクトの初期化表記を使うための拡張が追加された。
  • allocatable アレイがスコープから出た時に自動的にdeallocateされることの明確な定義が追加された。

多くの内部関数は拡張された。一例としてmaxloc 内部関数にdim引数が追加された。

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

  • REALDOUBLE PRECISION変数を使用したDO ステートメントは削除された。
  • END IFステートメントへのブロック外部からのブランチは削除された。
  • PAUSE ステートメントは削除された。
  • ASSIGNASSIGNGOTO ステートメント、ASSIGNフォーマット指定は削除された。
  • H edit descriptor(いわゆるホレリス定数(en:Hollerith constant))は削除された。

Fortran 95への重要な追加は、一般にはAllocatable TRとして知られる、ISO technical report、TR-15581: Enhanced Data Type Facilitiesである。この仕様は、Fortran 2003準拠のFortran コンパイラより前に、ALLOCATABLE アレイの強化した用法を定義した。そのような用法は、プロセジャーのダミー引数リストとしての派生タイプコンポーネントALLOCATABLEアレイと、関数の返し値を含む。ALLOCATABLEアレイは、POINTER-ベース・アレイより好ましいものである。なぜなら、ALLOCATABLE アレイは、スコープから抜けたとき、Fortran 95による自動的なdeallocateを保証しメモリリークの可能性を無くすからである。

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

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

Fortran 2003

[編集]

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

この記事から、このバージョンが含む大幅な強化は:

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

Fortran 2003 への重要な追加は、ISO technical report TR-19767である。

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

Fortran 2008

[編集]

Fortran 95と同様に、これはマイナー・アップグレードである。Fortran 2003の明確化と訂正と共に、新しい特長も導入された。新しい特長は、以下を含む。

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

ファイナル・ドラフト・スタンダード(FDIS)は、ドキュメントN1830として利用できる [2]

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

規格

[編集]

両者とも、次の3部からなる。

  1. 第1部:基底言語
  2. 第2部:可変長文字列
  3. 第3部:条件付き翻訳

出典

[編集]
  1. ^ Fortran Working Group (WG5).It may also be downloaded as a PDF file or gzipped PostScript file, FTP.nag.co.uk
  2. ^ N1830, Information technology, Programming languages, Fortran, Part 1: Base language ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdf (PDF, 7.9 MiB)
  3. ^ ISO page to ISO/IEC DTS 29113, Further Interoperability of Fortran with C
  4. ^ Draft of the Technical Specification (TS) 29113 ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdf (PDF, 312 kiB)

参考文献

[編集]

関連項目

[編集]