いまさらFORTRAN?

Why do we still use
FORTRAN?

スパコン 京スパコン京にて

Programming のおすすめ• ⾮常に普遍的• マシーンによらない• Free of charge：Fortran or C どちらもGNU(http://gcc.gnu.org/)により提供されている.
Python• おすすめ本・サイト (これ⼀冊でOK)• JIS FORTRAN⼊⾨（上） 森⼝ 繁⼀ 東⼤出版
2) F90 http://ace.phys.h.kyoto-u.ac.jp/~tomita/education/ fortran90/sec0.html by 富⽥博之. (this is a kind of dictionary.)• FORTRANが⽣き残っているのには理由がある。
http://www.komoto.org/fortran/• 特に数値計算分野• http://members.at.infoseek.co.jp/kitaurawa/fortran.html• 標準的なC⾔語でもよい。 http://www9.plala.or.jp/sgwr-t/index.html• or 速習C⾔語⼊⾨̶脳に定着する新メソッドで必ず⾝につく (単⾏本)
菅原 朋⼦ (著)Fortranを使おう• http://www.komoto.org/fortran/「いまさらFortran!?」などと⾔われそうですが、誤解を恐れずに、あえて書くなら、現在普及している⾼級⾔語の中で Fortranは最も先進的な⾔語です(ただし数値計算分野に限る)。
簡単にFortranの歴史を書いておきます。 Fortranの⽣まれは古く、1957年、IBMのJohnBackusにより世界初の⾼級⾔語として開発されました。FORmula TRANslatorの名が⽰すよ
うに、Fortranは当初から数値計算を⽬的としていました。 その後、FORTRAN66、FORTRAN77規格ができ、FORTRAN77は数値計算⽤⾔語として多くの研究者に愛⽤されてきま した。そのため、数値計算関連の書籍やライブラリでは、FORTRAN77で書かれた物が数多くあります。
最近、FORTRAN77の問題点を改善し、さらに数値計算特有の機能を強化した Fortran90及びFortran95ができました。 ちょっと普及が遅れている気がしますけど。
FORTRAN77
Fortranと⾔うと、未だにFORTRAN77の印象が強いようです。しかし、ここではっきりと書いておきます。FORTRAN77 は既に時代遅れです。もっとひどく⾔うなら、「古典だ」と⾔ってしまって差し⽀えないでしょう。 根本的に、構造化プログラミングをしたくてもできない⾔語仕様に問題があります。具体的に問題点を指摘すると、以下 のような点が挙られると思います。 * ⾏番号なしでプログラミングできない * ループブロックを記述できない(gotoでループを作るしかない) * 構造体がない いいかげん、FORTRAN77はやめて、Fortran90を使いましょう。

Fortran90/Fortran95
Fortran90では、上記のようなFORTRAN77の⽋点がほぼ全て解消されています。それに加えて、数値計算⽤にベクトル化や並列化に適した構⽂が追加されています。どんな特徴があるのか、C/C++と⽐較してみましょう。
配列演算を書きやすい
たぶん、他の⾔語と⽐べた時の、Fortranの最も⼤きな特徴でしょう。特に、多次元配列を扱おうと すると、他の⾔語を使うのがばからしくなります。
並列性を明⽰的に書くことができる
FortranのForAll⽂や、配列演算⽂を使うと、コンパイラは演算に並列性があることを簡単に解析でき ます。そのため、コンパイラは⾃動ベクトル化や⾃動並列化を⾏いやすくなります。
可読性が⾼い（Cは特に読みにくいのでコメントを多く：MY註）"FORmula TRANslator"と⾔うぐらいですので、元の数式に近い形でプログラムを書けます。また、 配列演算構⽂を使うことで、何重ものループを書いたりする必要が無くなり、ループだらけで何をやっ ているのかよ
くわからない、といったことにもなりません。
豊富な数値計算⽤ライブラリ
数値計算に使うライブラリ群は、⼤抵FortranとC向けに作られています。 NetLib などを⾒ると、い ろいろなライブラリが提供されています。
オブジェクト指向は実装されていない：C++では、オブジェクト指向が使えるようになっています。⼀⽅、FortranではFortran2000でオブ ジェクト指向を実装しようという動きがありますが、まだ標準化されていませんし、対応コンパイラも ありません。 オブジェクト指向を使えないのは確かにデメリットですが、そもそも数値計算の場合はオブジェクト 指向を使うメリットがあまりないので、あまり気になることは無いように思います。

試しに、f(x,y,z) = 2 g2(x,y,z) - 3 g(x,y,z) + 4
を FortranとCで書いてみましょう。
Fortranf(:,:,:) = 2.0*g(:,:,:)**2 - 3.0*g(:,:,:) + 4.0
C
for(z=0; z<N; z++){for(y=0; y<N; y++){for(x=0; x<N; x++){f[z][y][x]=2.0*g[z][y][x]*g[z][y][x] - 3.0*g[z][y][x] + 4.0;}}}

Fortranでは、配列演算⽂をつかって簡単に書けます。このような簡単な式では、 Fortranのメリットは感じにくいかもしれませんが、式が複雑になるにしたがっ て、Fortranの⽅が書きやすくなります。
また、Fortranの配列演算⽂では、各配列要素を並列に演算可能であることを⽰します。
上記の例では、コンパイラはN3の並列性があることを簡単に解析できます。

http://members.at.infoseek.co.jp/kitaurawa/fortran.html より
ＦＯＲＴＲＡＮの歴史
１９５０年代ＦＯＲＴＲＡＮは，⽶ＩＢＭ社の John. W. Backus ⽒が中⼼となって，１９５４年から１９５７年にかけＩＢ Ｍ社のＩＢＭ７０４計算機に対して開発された．ＦＯＲＴＲＡＮという名は，FORmula TRANslating system （数式変換システム）の略称から付けられた．世界初の成功した⾼級⾔語と⾔われている． 当時は，⾼級⾔語というものに関して懐疑的な⾒⽅が強く，そのようなものは⾮現実的なものと考えられてい た．その根拠として，１）コンパイラ⾃⾝が貴重な計算機資源を消費すること，
２）⽣成されるコードの効率性が アセンブリ⾔語によるものほど期待できないこと，などがあげられていた．しかしながら，ＦＯＲＴＲＡＮはこれ らの問題を解決し，すばやく効率的な実⾏コードを⽣成することに成功した．この成功以降，⾼級⾔語に対する懐 疑は消え，幾多の⾼級⾔語が登場することになる．盟友ＣＯＢＯＬも１９５０年代末には登場し，異端児ＬＩＳＰも同じ頃ＦＯＲＴＲＡＮによって書かれた．
１９６０年代ＦＯＲＴＲＡＮは使いやすい⾔語でもあったため利⽤者に好まれ，ＩＢＭ社以外の計算機にも広く普及し，各社 独⾃のＦＯＲＴＲＡＮが乱⽴するに⾄った．その結果，１９６０年代に⾔語の統⼀規格の制定が求めらるように なった．結局ＩＢＭ社のＦＯＲＴＲＡＮ ＩＶを元に，１９７２年，世界初の計算機⾔語規格ＦＯＲＴＲＡＮ６６ が制定された．この結果，ＦＯＲＴＲＡＮの普及はいっそう進んだ．
１９７０年代しかしながら，このころ計算機学科⽅⾯から，ＦＯＲＴＲＡＮの⾔語としての⽋陥に対する攻撃がはじまる．１ ９６８年には，有名な論⽂『GO TO Statement Considered Harmful（GO TO ⽂は有害なり）』が現れ，⼤論 争が巻き起こる．そして『structured programming（構造化プログラミング）』が⼀世を⾵靡する流⾏語とな る．また，これ以降『GO TO ⽂』を否定しＰＡＳＣＡＬを礼賛することで通⼈ぶる⾵俗が登場する． これに対し，ＦＯＲＴＲＡＮ陣営は，GO TO のかわりに『COME FROM ⽂』を提案してみたり，冗談で対抗 した．１９８０年に制定されたＦＯＲＴＲＡＮ７７規格は，プログラム制御に関しては BLOCK IF ⽂すなわち 『IF...THEN...ELSE...END IF』という構造化命令だけを取り⼊れた冗談のような規格である．これだけでは『GO TO ⽂』を排除できないので，これ以降も『GO TO ⽂』を満喫する事に成功する．

1980年代
ところが，そうこうするうち計算機学科ではＰＡＳＣＡＬ対Ｃの内ゲバがはじまっており，ＦＯＲＴＲＡＮ陣営が『Real Programmers
Don't Use PASCAL（本物のプログラマーはＰＡＳＣＡＬを使わない）』などとほざいているうちに，いつの間に かＦＯＲＴＲＡＮは相手にされないようになっていた．１９８１年にはＣ言語のBrian W. Kernighan が『Why Pascal is Not My Favorite Programming Language（なぜＰＡＳＣＡＬはわたしの好きなプログラミング言語じゃないのか）』を出す．これ以降 Ｃ派がクーデターに成功し，世界がＵＮＩＸＷＳ（ワークステーション）とＣまみれになって行くことが運命づけられる． しかしながら，ＦＯＲＴＲＡＮ陣営は世間の流れにも気づかず，小文字を軽蔑しつつメインフレーム上での楽しい世界にうつつを抜 かしていた．さらに１９８０年代のスーパーコンピュー
タはベクトル計算機であり，この世に存在するベクトル化コンパイラーはＦ ＯＲＴＲＡＮだけであったので，何の不安もなく田舎地主のごとく気ままに暮らしていられた． 一方，このころＦＯＲＴＲＡＮ７７の中途半端さを憂い，新しい言語規格ＦＯＲＴＲＡＮ８ｘ制定に向けての会議が開かれるが， 守旧派対革新派，ＩＢＭ対ＤＥＣ，その他諸々の対立軸でもめにもめ，ずるずると時は流れ，いつの間にか１９８０年代は終わっ てしまう．結局，１９９１年になって自民党的な素敵な解決策によって新規格ＦＯＲＴＲＡＮ９０がまとめ上げられることになる． すなわち，革新派にしたがって，構造化プログラミングの必要要素をすべて取り入れると同時に，守旧派にしたがって，これまでの ＦＯＲＴＲＡＮ７７規格をすべて包括することになった．
１９９０年代ＦＯＲＴＲＡＮはＦＯＲＴＲＡＮ９０となって Module 概念を取り入れた構造化言語へと進化し１９７０年代の言語水準に到達し た．Ｆ
ＯＲＴＲＡＮ９０は，理念的だった初期の構造化言語と異なり，様々な実地経験に基づいて規格され，ＦＯＲＴＲＡＮ利用 者の様々な不満が解決されるように拡張された．言語の抽象度は上がり，概念をコード化するのが以前より容易になった．しか し，守旧派の多いＦＯＲＴＲＡＮ陣営では未だＦＯＲＴＲＡＮ６６に固執するものいて，遅々として普及は進まなかった．（但し ＦＯＲＴＲＡＮ６６は，ほぼＦＯＲＴＲＡＮ７７に包括され，ＦＯＲＴＲＡＮ７７は完全にＦＯＲＴＲＡＮ９０に包括されるの で，ＦＯＲＴＲＡＮ６６プ
ログラムは，すなわちほぼＦＯＲＴＲＡＮ９０プログラムであるが．）１９９７年には，ＦＯＲＴＲＡ Ｎ９０の規格の不備を埋める
Bug Fix 的規格としてＦＯＲＴＲＡＮ９５規格が制定され，より完成度を高めている．
２０００年代ＦＯＲＴＲＡＮは，今後もしぶとく生き残ると見られている．その理由は，ＦＯＲＴＲＡＮ使用者の間ではプログラマが即そのプ ログ
ラムのユーザであることが多い，数学概念との親和性が高い，配列操作に長けている，１９５０年代のコードが未だに残るほ ど物持ちが良い，ユーザに守旧派思考が強く他の言語やプログラミング概念を知らないし知ろうともしない，などがあげられてい る． 現在ＦＯＲＴＲＡＮは，オブジェクト指向の概念を取り入れたＦＯＲＴＲＡＮ２０００規格を制定中である．

Fortran入門 by NAG HP here

1.1 Fortran 言語について• Fortran は1950年代に誕生した、世界初の高級プログラミング言語です。
• Fortran は "FORmula TRANslation" の略です。
• 数値計算プログラム作成に適しています。
Fortran がなぜ数値計算プログラム作成に特に適しているかを以下に述べます。

• Fortran はその名の通りもともと数値計算用プログラミング言語として設計されています。 そのため、各種組込み関数や複素数、そして強力な配列操作など、数値計算に便利な機能があらかじめ組み込まれています。

• 他の高級言語（C/C++, Java など）と比較して、数値計算プログラムを簡潔に記述することができます。
• 他の高級言語（C 言語など）と比較しても、一般的にパフォーマンスに優れています。
• Fortran はその言語仕様上、コンパイラにとって最適化しやすい言語です。（→ パフォーマンス面で有利です）• 優れた数値計算ライブラリ（NAG ライブラリ、LAPACK など）が豊富に利用可能です。
• 移植性に優れているため、作成したプログラムを変更することなく（あるいは最小限の変更で）PC からスパコンまで様々な環境で利用可能です。
• （正しく記述した場合）プログラミングにおいての誤りをおかしにくい言語です。

•1.2 Fortran の歴史 〜 現在誕生
1950年代 IBM（FORmula TRANslation）
Fortran 66
世界で初めてのプログラミング言語標準
Fortran 77
固定形式、その後広く使われるFortran 90 - メジャーバージョンアップ
自由形式、モジュールなど構造化言語へ
Fortran 95 - マイナーバージョンアップ
Fortran 90 の不具合修正、FORALL, PURE, ELEMENTAL 手続など
Fortran 2003 - メジャーバージョンアップ
オブジェクト指向、C 相互利用など
Fortran 2008 - モデレートバージョンアップ
共配列のサポート、BLOCK 構文、数学関数の増強など
Fortran 2018 - モデレートバージョンアップ
IEEE 算術への準拠、共配列の強化、C 相互利用の強化など

Fortran は（細かい例外を除いては）上位互換を保って進化しています。 ですので Fortran 77 の規格に沿って書かれたプログラムはそのまま Fortran 90/95 のプログラムとしてコンパイル可能です。
しかしながら Fortran 77 の規格には今では安全でないとされる機能や、過去の計算機環境を想定した機能が含まれます。 本資料では安全にプログラムを各ための最低限の知識を Fortran 77/90/95 の機能より説明しています。 また Fortran 77 に含まれる安全ではないとされる機能等の過去の機能は「過去のFortran の知識」としてまとめて別途説明をしています。

→ Fortran検定 by NAG HP here

質問に解答して証明書をもらおう！

→→ OPEN MP入門(演習付き) by NAG HP here 並列計算言語→→→ FORTRAN2003入門 by NAG HP here→→→→ FORTRANtips by NAG HP here

Yamamoto FORTRAN training PDFはここから