コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
Wikippe
検索
検索
表示
ログイン
個人用ツール
ログイン
FORTRANのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
FORTRAN
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
{{Infobox プログラミング言語 |名前 = FORTRAN | logo = [[File:Fortran acs cover.jpeg|150px]] | caption = ''The Fortran Automatic Coding System for the [[IBM 704]]'' (15 October 1956), the first Programmer's Reference Manual for Fortran |パラダイム = [[手続き型プログラミング|手続き型]]・[[構造化プログラミング|構造化]]・[[命令型プログラミング|命令型]]・[[オブジェクト指向プログラミング|オブジェクト指向]] |開発者 = [[IBM]]([[ジョン・バッカス]]) |登場時期 = 1957年 |最新リリース = Fortran 2008 |型付け = [[型システム|強い]][[静的型付け]] |プラットフォーム = [[z/OS]], [[z/VM]], [[z/VSE]], [[MCP]], [[VOS3]], [[ACOS]], [[GCOS]], [[OpenVMS|VMS]], [[OS/400]], [[UNIX]], [[Linux]], [[Microsoft Windows|Windows]], [[Mac OS]], [[CP/M]], [[MS-DOS]] ほか |処理系 = Absoft, Cray, [[CUDA]], [[Fortran Builder]], [[GFortran]], [[G95]], [[Intel Parallel Studio|Intel]], Lahey/Fujitsu, [[Watcom C compiler|Open Watcom]], Pathscale, PGI, [[Silverfrost FTN95|Silverfrost]], Sun, XL Fortran, Visual Fortran ほか |影響を受けた言語 = |影響を与えた言語 = [[ALGOL|ALGOL 58]], [[BASIC]], [[PL/I]], [[C言語|C]] |ライセンス = |ウェブサイト = }} {{プログラミング言語}} '''FORTRAN'''('''フォートラン''')は、[[1954年]]に[[IBM]]の[[ジョン・バッカス]]によって考案された[[コンピュータ]]における最初の、広く使われた[[高水準言語]]である。[[1956年]]に最初のマニュアルが、[[1957年]]に[[IBM 704]]用の最初の[[コンパイラ]]がリリースされた。名前「FORTRAN」は「数式翻訳」を意味する英語「{{lang|en|'''for'''mula '''tran'''slation}}」に由来し、FORTRAN 77やFortran 90などの末尾の数字は規格が制定された年を示している。 FORTRANは[[計算科学|科学技術計算]]に向いた[[手続き型プログラミング]][[プログラミング言語|言語]]であり、その長い歴史の間に開発された非常に多くの[[数学関数]]や[[サブルーチン]]を[[数値解析ソフトウェア]]の形で持っている。また、[[並列計算]]の並列性を明示的に書くことができ[[コンパイラ最適化|最適化]]が行いやすく、そのため他の言語より高速である等の理由から<ref>[http://www.research.kobe-u.ac.jp/csi-viz/members/kageyama/lectures/H22_FY2010_former/ComputationalScience/2_1_f95a.html 陰山聡『Fortran90/95入門』、なぜFortran90/95か?]</ref>、[[数値予報]]および[[気候モデル]]、[[構造力学]]における[[有限要素法]]、[[計算流体力学]]、[[計算物理学]]、[[計算機化学]]、[[計量経済学]]、動物と植物の[[品種改良]]などの大規模な計算を行う分野において、[[スーパーコンピュータ]]で使われている<ref name=HPF>[http://www.hpfpc.org/ HPF推進協議会 (HPFPC)]</ref>。 また、ちょうど[[C言語]]に対する[[C++言語]]のように、Fortran 90/Fortran 95の言語仕様は、FORTRAN 77の頃と比べればかなり拡張され進歩したものとなっている。最新の[[ソースコード]]は初期のものと比較すると、ほとんど別の言語のように見える。 初期の頃は、[[変数 (プログラミング)|変数]]名が大文字6文字までで、[[動的メモリ確保|動的な記憶領域の確保]]ができないなど多くの制約があったが、それらの制限は無くなり、Fortran77から[[構造化プログラミング]]が、Fortran 90から[[モジュール#ソフトウエア|モジュラープログラミング]]、[[ベクトル演算|配列演算]]とユーザー定義総称関数が、Fortran 95から[[High Performance Fortran]]が、Fortran 2003から[[オブジェクト指向]]が、Fortran 2008 からはコンカレント・コンピューティング([[並行計算]])が導入された。 なお、大文字でFORTRANと表記した場合、FORTRAN 77以前のFORTRANを指し、Fortranと表記した場合、Fortran 90以降を指すことがある。 == FORTRANの特徴 == === Fortran 90/95の特徴 === Fortran 90/95の特徴は、以下のように要約される<ref>牛島省『数値計算のためのFortran 90/95プログラミング入門』森北出版、2007年、はじめに</ref> 。 *数値計算プログラムを簡単かつ簡潔に記述できる。 *プログラムの誤りを犯しにくい言語である。 *数値計算のための便利な道具があらかじめ用意されている。 *作成したプログラムを大規模高速演算に使用できる。 *無料のコンパイラが公開されている。 === FORTRAN 77の特徴 === 広く使われていたFORTRAN 77 の特徴は、以下のように要約される。 *数式を簡便に書ける : ほぼ数学の数式通りに計算式を記述できる。もっともこの特徴は他に計算向きの高級言語がなかった時代の話であり、現代の水準では「プログラミング言語における標準数式表現の始祖」といった方が当たっている。 *出力が容易 : 簡単に出力形式を定義できるFORMAT文や、実際の出力デバイスを意識しないで済む[[入出力]]文がある([[C言語]]の[[標準ストリーム|標準入出力]]と似た概念である)。 *スタック指向/構造化指向の言語ではない : COMMON文、BLOCK DATA文やSAVE文など、データを固定的に割り当てることを前提としている。 *固定形式の書式である : 記述方法がカラム位置で決まっている(一部の実装では拡張されている) == FORTRANの歴史 == [[File:FortranCardPROJ039.agr.jpg|right|thumb|[[パンチカード]]に記されたFORTRANのコード。カラム1~5、6、73~80が制御用に確保されている。]] [[ジョン・バッカス]]は1953年末、メインフレームコンピュータ[[IBM 704]]のプログラムを開発するにあたり、[[アセンブリ言語]]に代わるものを開発することを[[IBM]]の上司に提案した。歴史的なFORTRAN開発チームはRichard Goldberg、Sheldon F. Best、Harlan Herrick、Peter Sheridan、[[Roy Nutt]]、 Robert Nelson、Irving Ziller、[[Lois Haibt]]、David Sayreというメンバーで構成された<ref>http://www.softwarepreservation.org/projects/FORTRAN/index.html#By_FORTRAN_project_members</ref>。 ''The IBM Mathematical Formula Translating System'' のドラフト仕様は[[1954年]]中旬に作成された。1956年10月にFORTRANの最初のマニュアルが作成され、[[コンパイラ]]が1957年4月に開発された。顧客はアセンブリ言語で記述されたコードに匹敵するパフォーマンスが得られない限り[[高水準言語|高級言語]]を採用しないので、最初から[[コンパイラ最適化|最適化]]コンパイラが開発された。 この新しい方法がハンドアセンブルより高速に動作するかどうかには疑いの目があったが、プログラム中の命令数を1/20に削減できるので急速に受け入れられていった。IBMの社内誌であるThinkに掲載された1979年のインタビューでバッカスは「私がこの仕事をしたのは面倒くさがりだったからです。私はプログラムを書くことが好きではなかったので、[[IBM 701]]でミサイルの軌道計算プログラムを開発したときに、プログラムの開発を簡単にするためにプログラミングシステムを作り始めました。」<ref>[http://www.msnbc.msn.com/id/17704662/ Fortranの開発者ジョン・バッカスが死亡 - Gadgets - MSNBC.com]</ref>と語っている。 FORTRANは科学者の間で数学を応用したプログラムの記述に広く用いられたことから、より高速で効率的なコードを出力しようとする原動力となった。FORTRANに組み込まれた[[複素数]][[データ型|型]]は特に電気工学のような専門的なアプリケーションに適していた。 1960年までに様々なバージョンのFORTRANが[[IBM 709]]、[[IBM 650]]、[[IBM 1620]]、[[IBM 7090]]で動作していた。FORTRANのユーザー数は急増し、コンピューターメーカーがFORTRANコンパイラをこぞって提供したので、1963年までには40を超えるFORTRANコンパイラが存在していた。こうしたことから、FORTRANはアーキテクチャの異なる様々なコンピュータを広くサポートする最初の言語と言える。 FORTRAN開発の歴史は、初期の[[コンパイラ]]技術の歴史そのものといえる。FORTRANで効率的なコードを出力したいという強い要求からコンパイラの実装技術が大きく進歩した。 === FORTRAN === [[File:IBM_704_mainframe.gif|right|thumb|320px|[[IBM 704]] [[メインフレーム]] ]] IBM 704用に開発された最初のFORTRANは32の命令をもっていた。 === IBM 1401版FORTRAN === IBM 1401版は革新的な65パスのコンパイラであり、わずか8k語の[[磁気コアメモリ]]で動作する。コアに記録されたプログラムが段階的に実行可能なコードへと変換されて上書きされる。変換されたコードは[[機械語]]ではなく、[[UCSD p-System|UCSD Pascal]]のPコードが生まれるよりも20年も前ながら、中間コードを利用していた。 === FORTRAN II === IBMの''FORTRAN II''は1958年に開発された。主な改良点は[[手続き型プログラミング]]のサポートであり、サブルーチンや関数を定義できるようになった。 その後、FORTRAN IIのデータ型には、<code>DOUBLE PRECISION</code>(倍精度型)と<code>COMPLEX</code>(複素数型)が追加された。 === FORTRAN III === IBMは1958年に''FORTRAN III''を開発していた。いくつかの新機能に加えインラインアセンブラが可能であった。しかしながらこのバージョンは販売されなかった。704 FORTRANやFORTRAN IIと同様に、FORTRAN IIIにも移植の妨げになるような機種依存の機能があった。他のベンダーから販売されていたFORTRANも初期は同様の問題を抱えていた。 === FORTRAN IV === IBMは1961年に顧客の要望を受け''FORTRAN IV''の開発を開始した。<code>READ INPUT TAPE</code>のようなFORTRAN IIの機種依存部分を削除したほか、<code>LOGICAL</code>(論理型)、[[論理演算]]、算術[[If文|IF文]]の代替となる'''論理IF文'''が加えられた。この時のターゲットマシンはワードマシンだったので、[[整数]]値は2<sup>35</sup>の範囲で定義されていた。また、[[実数]]の精度は2<sup>27</sup>、倍精度実数の精度は2<sup>54</sup>までだった。FORTRAN IVは1962年に[[IBM 7030]](通称ストレッチ)用がリリースされ、後に[[IBM 7090]]版と[[IBM 7094]]版がリリースされた。 1965年には[[国際規格|国家規格]]であるANSI X3.4.3 FORTRANに準拠した。 === FORTRAN 66 === ''American Standards Association''(現[[ANSI]])がFORTRANの米国規格を委員会で制定するようになったことはFORTRANの歴史の要である。[[1966年]]に2つの異なる言語が制定された。一つは当時既に[[デファクトスタンダード]]であったFORTRAN IVを基にした''FORTRAN''であり、もう一つはFORTRAN IIを基にして機種依存部分を取り除いた''Basic FORTRAN''である。最初に制定されたFORTRANの規格は後に''FORTRAN 66''と呼ばれた。 === FORTRAN 77 === FORTRAN 66 規格のリリース後、コンパイラ・ベンダーは多くの拡張を"標準Fortran"に導入し、1966の規格の改訂を始めるようにANSIを促した。 この改訂は1977年に制定され、最終的な改訂案は1978年4月に新しいFORTRAN標準として承認された。 この新しい標準は''FORTRAN 77''として知られ、FORTRAN 66後の多くの変更を追加し、多くの重要な機能を加えた: * ブロック <code>IF</code>と<code>END IF</code> ステートメント、オプショナルな<code>ELSE</code>と<code>ELSE IF</code> ステートメント。改善された言語サポートのための[[構造化プログラミング]]。 * DOループ機能拡張、パラメータ記述を含む、負の増分とゼロのトリップ・カウント。 * 改良されたI/Oのための<code>OPEN</code>, <code>CLOSE</code>, と <code>INQUIRE</code>文。 * ダイレクト-アクセス ファイル I/O。 * <code>IMPLICIT</code> 文。 * <code>CHARACTER</code> データ・タイプ。文字の入出力と処理のための大幅な増補。 * <code>PARAMETER</code> 定数を指定するためのステートメント。 * 永続的なローカル変数<code>SAVE</code>ステートメント。 * 内部関数のための総称関数。 * [[ASCII]] 文字列シーケンスにベースをおく、文字列比較のための内部命令セット(<CODE>LGE, LGT, LLE, LLT</CODE>)。 この規格の改訂において、多くの機能は除去されるか変えられ、以前の標準に合致する多くのプログラムはおそらく無効になった。 この時点で除去はX3J3の代替だけが許容された。だからコンセプト "不賛成"はANSI標準においては利用できなかった。しかし、コンフリクトリストの24アイテム(Appendix A2 of X3.9-1978を見よ)ループホールスとパスロジカルケースは以前の標準規格から許容されたが、しかし滅多に使用されない。 少数の機能は慎重に除去された: * ホレリス定数とホレリス・データ、すなわち: :: <TT> GREET = 12HHELLO THERE! </TT> * FORMAT 記述子におけるH編集(ホレリス・フィールド)の読み込み。 * アレイの添え字における境界のオーバーインデクシング。 :: <CODE>DIMENSION A(10,5)</CODE> :: <CODE>Y= A(11,1)</CODE> * DOループから、ループ外への移動と帰還("エクステンデット・レンジ"として知られる)。 === Fortran 90 === 一般に''Fortran 90'' として知られている規格は、大幅に発表が遅れたもののFORTRAN 77の正当な継承者であり、最終的に1991年にISO規格、1992年にANSI規格としてリリースされた。この抜本的な改訂では1978年のFORTRAN 77規格制定からのプログラミング技術における大幅な変化を反映するために、以下の多くの新しい機能が加えられた: * フリーフォームソース入力と小文字のFortranキーワード。プログラム本文を7桁目から書かなくても良く、80桁の制限も無い。 <source lang="fortran"> if (x<0) then x=0 end if </source> * 最長31文字までの識別子。 <source lang="fortran"> abcdefghijklmnopqrstuvwxyz12345=0.0e0 </source> * インラインコメント。 <source lang="fortran"> ! これは"!"を用いたコメントです </source> * 配列演算(あるいは部分配列演算)。これは数学とエンジニアリングの計算を大幅に簡素化する。 *全部または部分マスクされた、配列の指定と配列の表現、例えば、 <source lang="fortran"> x(1:n)=r(1:n)*cos(a(1:n)) </source> *選択的配列のアサインのためのwhere文。 <source lang="fortran"> integer::a(10) real(8)::b(10) a=f(x) where(a>0) b=-1.0 elsewhere b=1.0 end where </source> *配列の定数と式による初期化。 *ユーザ定義の配列を返す関数と配列コンストラクタ。 <source lang="fortran"> function sample(x) result(y) !配列yを返す integer,parameter::nn=4 real::y(nn)=(/ 1,2,3,4 /) !配列のコンストラクタと定数による初期化 .... end function sample </source> * 再帰手続き。 * モジュラープログラム、すなわち関係するサブルーチンとデータのグループ化と、他のプログラムユニットで使用、モジュールの内の指定した部分だけの使用を含む。 * interface文を使用してコンパイル時に型がチェックされる大幅に改善された引数渡しメカニズム。 <source lang="fortran"> module my_lib !モジュール interface function sample(x) real,intent(in)::x(:)!コンパイル時に変数の型の整合性とデータの入出力方向がチェックされる。 .... end function sample end interface end module </source> * ユーザー定義総称関数(同じ関数名で、引数の数とタイプを自動的に識別して異なる内部関数を呼び出す)のインターフェース。 * 演算子('+'、'-'、など)のオーバーローディング(多重定義)。 * 派生型データタイプ。 * 変数のデータタイプと他の属性を指定するための新たなデータタイプの宣言シンタックス、 * allocatable属性と allocateとdeallocate文を用いたダイナミックメモリアロケーション。 <source lang="fortran"> real,allocatable::temp(:) allocate(temp(nn)) deallocate(temp) </source> * ポインター属性とポインターアサイン、nullify文によるダイナミックデータ構造の扱い。 * do 文のend doによる終端。 * exitと cycle文による do文の終了。 <source lang="fortran"> do i=1,nn if (b(i) /= 0) then a(i) = 1.0 / b(i) else exit end if end do </source> * セレクト文。 <source lang="fortran"> select case (sw) case ('++') a = a + 1 case ('--') a = a - 1 case default a = 0 end select </source> * ユーザがコントロールできる数値精度の移植性の良い指定方法。 <source lang="fortran"> a=1.0e0_kind(1.0d0) </source> * 新規のあるいは強化された内部関数。 ==== 削除または時代遅れとされた機能の一覧 ==== 以前のバージョンとは異なり、Fortran 90は、何の機能も削除しなかった。 (Appendix B.1 は『この規格の、削除した機能のリストは空である。』と言っている。) つまり、FORTRAN 77に準拠したプログラムは、Fortran 90にもまた準拠している。 そして、両方の規格で、その動作が定義づけられた項目は使用可能でなければならない。 一部の機能はFortran 95で『削除』され、また機能の小さな部分は『時代遅れ』と認定されて将来の規格で除去されることが予定された。 {| class="wikitable" |- ! 時代遅れの機能 ! 例 ! 状態 / Fortran 95での予定 |- | 算術 IF-statement | <CODE> IF (X) 10, 20, 30 </CODE> | |- | 非-整数 DO パラメータ あるいは制御変数 | <CODE> DO 9 X= 1.7, 1.6, -0.1 </CODE> | 削除 |- | Shared DO-loop termination or <br />termination with a statement <br />other than END DO or CONTINUE | <CODE> DO 9 J= 1, 10 <br /> DO 9 K= 1, 10 <br /> 9 L= J + K</CODE> | |- | ブロック外部からの <br /> END IFへのブランチ | <CODE>66 GO TO 77 ; . . . <br /> IF (E) THEN ; . . . <br /> 77 END IF</CODE> | 削除 |- | Alternate return | <CODE> CALL SUBR( X, Y *100, *200 ) </CODE> | |- | PAUSE文 | <CODE> PAUSE 600 </CODE> | 削除 |- | ASSIGN statement <br /> と assigned GO TO statement | <CODE>100 . . . ASSIGN 100 TO H <br /> . . . <br /> GO TO H . . .</CODE> | 削除 |- | Assigned FORMAT specifiers | <CODE> ASSIGN F TO 606</CODE> | 削除 |- | H edit descriptors | <CODE>606 FORMAT ( 9H1GOODBYE. ) </CODE> | 削除 |- | Computed GO TO statement | <CODE> GO TO (10, 20, 30, 40), index</CODE> | (時代遅れ) |- | 文関数 | <CODE> FOIL( X, Y )= X**2 + 2*X*Y + Y**2</CODE> | (時代遅れ) |- | DATA statements <br /> among executable statements | <CODE> X= 27.3<br /> DATA A, B, C / 5.0, 12.0. 13.0 / . . .</CODE> | (時代遅れ) |- | CHARACTER* form of CHARACTER declaration | <CODE> CHARACTER*8 STRING ! Use CHARACTER(8) </CODE> | (時代遅れ) |- | Assumed character length functions | <CODE></CODE> | |- | 固定フォームソースコード | * Column 1 contains * or ! or C for comments.<br /> C Column 6 for continuation. | |} ==== "Hello world"の例 ==== <source lang="fortran"> program helloworld print *, "Hello, world." end program helloworld </source> === Fortran 95 === [[画像:Earth_simulator_ES2.jpg|right|320px|thumb|[[地球シミュレータ]][[スーパーコンピュータ]]]] ''Fortran 95''は、マイナーな改訂版である。 ほとんどは、Fortran 90規格の、いくつかの大きな問題を解決するためのものである。 それにも係わらず、Fortran 95もまた年号を付加されている。 それは、Fortranの拡張として定義される並列言語、HPF ([[High Performance Fortran|High Performance Fortran]]:ハイ・パフォーマンスFortran)の一部導入によることは明白である。なお、本格的なHPFは、[[地球シミュレータ]]等で使用されている<ref name=HPF></ref>: * <code>forall</code>と階層化された<code>where</code>がベクトル化のために追加された。 * ユーザ定義の <code>pure</code> と <code>elemental</code> プロセジャーが追加された。 * 派生タイプコンポーネントのデフォルト初期化、これはポインターの初期化を含むが追加された。 * データオブジェクトの初期化表記を使うための拡張が追加された。 * <code>allocatable</code> アレイがスコープから出た時に自動的に<code>deallocate</code>されることの明確な定義が追加された。 多くの内部関数は拡張された。一例として<code>maxloc</code> 内部関数に<code>dim</code>引数が追加された Fortran 90で時代遅れとされた、いくつかの機能はFortran 95から削除された。 * <code>REAL</code>と<code>DOUBLE PRECISION</code>変数を使用した<code>DO</code> ステートメントは削除された。 * <code>END IF</code>ステートメントへのブロック外部からのブランチは削除された。 * <code>PAUSE</code> ステートメントは削除された。 * <code>ASSIGN</code>と<code>ASSIGN</code>型<code>GOTO</code> ステートメント、<code>ASSIGN</code>フォーマット指定は削除された。 * <code>H</code> edit descriptor(いわゆるホレリス定数([[:en:Hollerith constant]]))は削除された。 Fortran 95への重要な追加は、一般には''Allocatable TR''として知られる、''ISO technical report、TR-15581: Enhanced Data Type Facilities''である。この仕様は、Fortran 2003準拠のFortran コンパイラより前に、<code>ALLOCATABLE</code> アレイの強化した用法を定義した。そのような用法は、プロセジャーのダミー引数リストとしての派生タイプコンポーネント<code>ALLOCATABLE</code>アレイと、関数の返し値を含む。 <code>ALLOCATABLE</code>アレイは、<code>POINTER</code>-ベース・アレイより好ましいものである。なぜなら、<code>ALLOCATABLE</code> アレイは、スコープから抜けたとき、Fortran 95による自動的なdeallocateを保証しメモリリークの可能性を無くすからである。 [[エイリアシング]]はarrayの参照において最適化の障害にならず、Fortranコンパイラがポインタ-ベース・アレイより高速なコードを生成することを可能にする。 他の重要なFortran 95への追加は ISO technical report ''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 2003 === ''Fortran 2003''はメジャーな改訂であり、たくさんの新しい機能を導入した。 FORTRAN2003における新しい機能の包括的なサマリーは、Fortran Working Group (WG5)のオフィシャルWebサイトから得ることができる<ref>[http://www.nag.co.uk/sc22wg5/ Fortran Working Group (WG5)].It may also be downloaded as a [ftp://ftp.nag.co.uk/sc22wg5/N1551-N1600/N1579.pdf PDF file] or [ftp://ftp.nag.co.uk/sc22wg5/N1551-N1600/N1579.ps.gz <code>gzip</code>ped PostScript file], FTP.nag.co.uk</ref>。 この記事から、このバージョンが含む大幅な強化は: * 派生タイプの強化:使用法が進歩したコントロール、パラメータ化された[[派生型]]、改善された構造化[[コンストラクタ]]とファイナライザー。 * オブジェクト指向プログラミングのサポート:[[オブジェクト指向]]のタイプの拡張と[[インヘリタンス]]、[[ポリモーフィズム]]、ダイナミック・タイプアロケーション、タイプ-バウンド・プロセジャー。 * データマニピュレーション・エンハンスメント:allocatable コンポーネント (TR 15581の組み入れ)、遅延タイプパラメータ、ボラタイル・アトリビュート、ポインタ-の強化、初期化拡張、内蔵関数の強化。 * 入出力の強化:非同期転送、ストリーム・アクセス、派生タイプのためのユーザ定義転送オペレーション、ユーザ指定のフォーマット変換時の丸めの制御、接続前のユニットの名前付定数、<code>FLUSH</code> ステートメント、キーワードの規則化、エラーメッセージへのアクセス。 * プロセジャーのポインター。 * IEEE 浮動小数点と浮動小数点例外処理のサポート(TR 15580の組み入れ)。 * C言語との相互運用。 * 国際使用のサポート:ISO 10646(国際文字セット)へのアクセス、4バイト文字と十進数またはコンマのフォーマット付数値入出力における選択。 * ホスト・オペレーティングシステムとの一体化の強化。コマンドライン引数、環境変数とプロセッサーエラーメッセージ。 Fortran 2003 への重要な追加は、ISO technical report TR-19767である: Fortranにおけるモジュール機能の強化。このレポートは、''submodules''を提供する。これは、Fortranのモジュールをより[[Modula-2]]のモジュールに近づける。 これらは、Adaのプライベート・チャイルド・サブユニットに似ている。 これは分離したプログラムユニットとして表現すべきモジュールの仕様と実装を可能にし、大規模なライブラリのパッケージ化を改善し、インターフェース定義を公開しても企業秘密を保持することを可能にし、コンパイレーション・カスケードを防ぐ。 ===Fortran 2008=== 最新の規格であり一般にはFortran 2008として知られているISO/IEC 1539-1:2010は2010年9月に承認された <ref>N1836, Summary of Voting/Table of Replies on ISO/IEC FDIS 1539-1, Information technology - Programming languages - Fortran - Part 1: Base language {{PDFlink|ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1836.pdf| 101 KiB<!-- application/pdf, 101k bytes -->}}</ref>。 Fortran 95と同様に、これはマイナー・アップグレードである。 Fortran 2003の明確化と訂正と共に、新しい特長も導入された。 新しい特長は、以下を含む: *モジュール構造の追加、ISO/IEC TR 19767:2005にとってかわるサブモジュール。 *[[Co-array Fortran]]―並列計算モデル。 *do concurrent―相互依存のない繰返しループのための並列DOループ。 *メモリ上のレイアウトを指定するためのCONTIGUOUS(隣接)属性。 *コンストラクト・スコープ付のオブジェクトの宣言を含むブロック・コンストラクト。 *派生タイプにおける再帰的ポインターの代替としての再帰的アロケータブル・コンポーネント。 ファイナル・ドラフト・スタンダード(FDIS)は、ドキュメントN1830として利用できる <ref>N1830, Information technology, Programming languages, Fortran, Part 1: Base language {{PDFlink|ftp://ftp.nag.co.uk/sc22wg5/N1801-N1850/N1830.pdf| 7.9 MiB<!-- application/pdf, 7.9M bytes -->}}</ref>。 Fortran 2008における重要な追加は、[[ISO]]テクニカルスペシフィケーション(TS) 29113のFortranにおけるC言語とのより高いインターオペラビリティであり <ref>ISO page to [http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=45136 ISO/IEC DTS 29113, Further Interoperability of Fortran with C]</ref> <ref>Draft of the Technical Specification (TS) 29113 {{PDFlink|ftp://ftp.nag.co.uk/sc22wg5/N1901-N1950/N1917.pdf| 312 kiB<!-- application/pdf, 312k bytes -->}}</ref> 、2012年5月のISOの承認に向けてまとめられた。 C言語の配列へのFortranアクセスに関してタイプとランクを無視する仕様が加えられた。 == JISにおける仕様の変遷 == [[日本工業規格|JIS]]における仕様は、以下のように変遷している。 === 初期 (FORTRAN 66) === 1967年に、JISとして制定された。この時は、以下の3つの水準ごとに独立したJISが制定された。共通したタイトルは「電子計算機プログラム用言語 FORTRAN」だった。以下に水準間のおおよその違いを記す。 * JIS C 6201(水準7000) ** [[複素数]]型と[[倍精度]][[実数]]型がある ** DATA[[文 (プログラミング)|文]]と初期値設定副プログラム(BLOCK DATA文)がある ** FORMAT文中の欄記述子にD,G,Aが定義できる ** [[変数 (プログラミング)|変数]]、[[配列]]手続き名は最大6文字 * JIS C 6202(水準5000) ** 変数、配列手続き名は最大6文字 * JIS C 6203(水準3000) ** 変数、配列、手続き名は最大5文字 ** [[論理型]]のデータ、論理式、関係式、論理[[If文|IF文]]は使えない。 ** [[データ型|型]]宣言文がない。 ** EXTERNAL文がない。 ** 3[[次元]]の配列がない。 ** 名前付きCOMMON文がない。 ** 文番号は4桁 ** COMMON文に配列宣言が使えない。 ** 整合配列がない。 なお、1971、1976年に若干の改訂がなされている。 === FORTRAN 77時代 === 国際標準化機構([[国際標準化機構|ISO]])は、米国規格協会([[ANSI]])の X3J3 が作成した FORTRAN の規格 X3.9-1978 を ISO 1539-1980 として定めた。基本水準(subset language)と上位水準(full language)の2種類の水準からなっていた。これを基にして、同じく2水準の JIS C 6201-1982 が制定された。なお、[[1987年]]に、JISの分類が変更になり、この規格は JIS X 3001-1982 となった。内容には変更はない。 === Fortran 90時代 === FORTRAN 77を基に他の言語の特徴を組み込み、言語仕様を近代化しようとしたが、そのため仕様がなかなか決まらず、1991年に ISO/[[国際電気標準会議|IEC]] 1539:1991として制定された。JISではそれを受け、JIS X 3001:1994が制定された。 === Fortran 95時代 === {{節stub}} === Fortran 2003時代 === {{節stub}} === Fortran 2008時代 === {{節stub}} == 言語仕様 == Fortranの言語仕様は、年代によってかなり変化して来ている。他の[[プログラミング言語]]で[[実装]]された[[構造化プログラミング]]の機能などがどんどん取り入れられて来ているからである。 === FORTRAN 66の言語仕様 === === FORTRAN 77の言語仕様 === *FORTRAN 66とFORTRAN 77の言語仕様については、[[FORTRAN 77の言語仕様]]を参照のこと。 === Fortran 90の言語仕様 === *Fortran 90以降の言語仕様については、[[Fortranの言語仕様]]を参照のこと。 == FORTRANと教育 == === 教育向けコンパイラ === FORTRANは、[[情報処理]]分野で広く使われていたため、学校や会社の教育(情報処理技術者向け教育)で利用された。教育向けには、より詳細なエラー情報を出すための拡張がWaterloo大学でWATFOR(後にWATFIV)[[コンパイラ]]として実装された。この実装は日本の大学でも使われた。 == Fortranとスーパーコンピュータ == Fortranは科学技術計算用の言語なので、[[スーパーコンピュータ]]での[[プログラミング言語]]としてよく用いられる。 Fortranは[[C言語]]のように、[[スタック]]等を使わず、コンパイル時に静的に記憶領域を確保するのが基本である。そのため、[[コンパイラ]]はコードを最適化しやすいという利点がある。 Fortranは、いまでも科学技術用[[行列]]演算での使用が基本であり、ベクトル型[[スーパーコンピュータ]]は、Fortranを使った[[プログラム (コンピュータ)|プログラム]]で使用することが多い。そこで、スーパーコンピュータの高速演算機能を有効に使うための工夫がなされた。その1つの例としては、自動[[ベクトル化]]機能である。[[ベクトル]]型のスーパーコンピュータは、多くの演算を同時に行うベクトル演算機能が[[ハードウェア]]で提供されている。この機能を有効に使うために、FortranのDO[[ループ (プログラミング)|ループ]]をベクトル演算装置で演算させるために、自動的にベクトル[[命令 (コンピュータ)|命令]]にする機能が提供された。また、DOループ内のベクトル演算に適さないものをDOループ外に追い出す機能などもある。たとえば、 <source lang="fortran"> DO 100 I=1,N A(I) = B(I) * C(I) 100 CONTINUE </source> のようなDO構文は、ほとんどの場合、1から数個のベクトル演算命令に[[コンパイラ|コンパイル]]される。そのほかにもDOループの中にIF文を含むような例、たとえば、 <source lang="fortran"> DO 110 I=1,N IF (A(I) .LE. LIMIT) THEN B(I) = A(I) * Z END IF 110 CONTINUE </source> のようなものもベクトル化できる場合がある。これは、いったんAの各要素がLIMIT以下かどうかを示すマスクベクトルを作成し、Aという配列(=ベクトル)に、変数Zをかけるとき、マスクベクトルを参照してベクトル演算を行うことによって、DOループをベクトル化する。 このような作業は、すべて[[コンパイラ]]が行い、利用者にはできるだけ負担をかけないようにしている。しかし、より高度なベクトル化を行うために、[[最適化 (情報工学)|最適化]]を行う支援ツールが用意されている場合もある。 == FORTRANと日本語 == コンピュータ上で[[日本語]]の文字を扱えるようになると、FORTRANでも日本語を扱う需要が出てきた。そのため、各社([[メインフレーム]]を作成していたメーカ)では、独自に言語仕様に日本語の文字を扱えるように拡張した。そのため、各社で日本語の扱い方が異なる事態になった。そこで、[[JEIDA]]では1985年に、JEIDA-42で日本語FORTRANを策定した。 FORTRANで日本語を扱う場合、[[変数 (プログラミング)|変数]]名等には日本語は使えず、文字列や日本語を扱うための専用の型(日本語型)、日本語を入出力するためのFORMAT文の要素の拡張が行われた。 == FORTRANベースの言語 == FORTRAN 77に先立つFORTRANベースの[[プリプロセッサ]]は使いやすい言語を提供するために広く使われた。プリプロセスされたコードは、任意のマシンの標準のFORTRANコンパイラでコンパイルすることができるという利点を持つ。これらのプリプロセッサは通常、構造化プログラミング、6文字よりも長い変数名、追加のデータ型、条件付きコンパイル、さらにはマクロ機能をサポートしていた。 ポピュラーなプリプロセッサとしてFLECSとiftran、MORTRAN、SFtran、S-Fortran、[[Ratfor]]、Ratfivがあった。例えば、RatforとRatfivはCライクな言語を実装し、プリプロセスにより標準的なFORTRAN 66コードを出力した。Fortran言語の進歩にもかかわらず、プリプロセッサは条件付きコンパイルとマクロ置換のために使用され続けている。 LRLTRANは、ローレンス放射線研究所で、ベクトル演算および動的な記憶、システムのプログラミングをサポートする他の拡張機能を提供するために開発され、ディストリビューションにはLTSSオペレーティングシステムが含まれていた。Fortran 95規格は、任意の条件付きコンパイルの機能を定義するオプションパート3を備えている。この機能は、しばしば 『CoCo』と呼ばれている。多くのFORTRANコンパイラは、それらのシステムにCプリプロセッサのサブセットを取り込んだ。 SIMSCRIPTは、大規模な離散システムのモデリングとシミュレーションのためのアプリケーションに特化したFortranのプリプロセッサである。 プログラミング言語Fは、FORTRANのEQUIVALENCE文などの、冗長、非構造化、非推奨な機能を削除したFortran 95のクリーンなサブセットとして設計された。 FはFortran 90で追加された配列演算の機能を使い、FORTRAN 77とFortran 90で追加された制御文を用い、構造化プログラミングで廃止された制御文を削除した。設計者はFを 『特に教育や科学技術計算に適した、構造化された配列プログラミング言語である。』 と述べている<ref>[http://www.fortran.com/F/index.html F Programming Language Homepage]</ref>。 == 主な処理系 == === Windows === ;フリーソフト *[[GFortran]] - Fortran95/77処理系、[[GNUコンパイラコレクション|GCC]]のバージョン4.0.0以降より標準 *[[G95]] - [[GNU]]のFortran95処理系 *FTN95 [http://www.silverfrost.com/default.aspx Silverfrost FTN95: Fortran for Windows] *Open Watcom [http://www.openwatcom.org/index.php/Main_Page Open Watcom] ;商用ソフト *Absoft Pro Fortran *Intel Visual Fortran *NAG Fortran *Lahey Fortran === Linux === ;フリーソフト *[[GFortran]] *[[G95]] *Open Watcom [http://www.openwatcom.org/index.php/Main_Page Open Watcom] *Intel Fortran Composer XE 2011 for Linux - 非商用利用に限りフリーで使用可 ;商用ソフト *Absoft Pro Fortran *Intel Visual Fortran *NAG Fortran *Open64 *PGI Fortran *Sun Studio === その他 === * [http://netlib.bell-labs.com/netlib/f2c/ f2c] - [[ベル研究所]]のFortran77を[[C言語]]に変換するトランスレータ == 脚注 == {{脚注ヘルプ}} <references/> == 参考文献 == {{Wikibooks|Fortran|Fortran}} * [http://www.nag-j.co.jp/fortran/ Fortran入門] * [http://www.nag.co.uk/SC22WG5/ JTC1/SC22/WG5 The official home of Fortran Standards ] * [http://www.research.kobe-u.ac.jp/csi-viz/members/kageyama/lectures/H22_FY2010_former/ComputationalScience/2_1_f95a.html 陰山聡『Fortran90/95入門』神戸大学、大学院システム情報学研究科計算科学専攻、教授] * [[浦昭二]]、近藤頌子、土居範久、原田賢一『FORTRAN 77入門』[[培風館]]、1982年 * 牛島省『数値計算のためのFortran 90/95プログラミング入門』[[森北出版]]、2007年 == 関連項目 == *[[FORTRAN 77の言語仕様]] *[[Fortranの言語仕様]]-(Fortran 90以降の言語仕様) *[[Co-array Fortran]] *[[High Performance Fortran]] {{DEFAULTSORT:FORTRAN}} [[Category:プログラミング言語]] [[Category:JIS|X3001]]
このページで使用されているテンプレート:
テンプレート:Infobox プログラミング言語
(
ソースを閲覧
)
テンプレート:Lang
(
ソースを閲覧
)
テンプレート:PDFlink
(
ソースを閲覧
)
テンプレート:Wikibooks
(
ソースを閲覧
)
テンプレート:プログラミング言語
(
ソースを閲覧
)
テンプレート:節stub
(
ソースを閲覧
)
テンプレート:脚注ヘルプ
(
ソースを閲覧
)
FORTRAN
に戻る。
検索
検索
FORTRANのソースを表示
話題を追加