fortran66のブログ

fortran について書きます。

メモ帳:パタヘネ付録 第3版  歴史展望より

f:id:fortran66:20171001231023p:plain

Fortran90 では、多種多様な浮動小数点数フォーマットの乱立に対して、浮動小数点数フォーマットに関する情報を得る様々な関数を導入したのですが、ちょうどその頃 IEEE754 フォーマットにほぼ天下が一統されて、やや役立たずに終わりました。

Linpack/Eispack で FORTRAN 1行当たり 100 ドルと書いてありますが、多分 70年代時点での話だと思います。物価上昇とその後の LAPACK への発展を思うと今ではいくらくらいでしょうか?

コンピュータの構成と設計 第3版 <別冊>歴史展望

コンピュータの構成と設計 第3版 <別冊>歴史展望

f:id:fortran66:20171001233300p:plain

パタヘネの付録の日本語訳は第3版あたりで止まっているようです。(上記引用は 3.11-3)
サンプルデータのダウンロード | 日経BP社 ブックス&テキスト Online


原書第5版付録もネットで見れますが、当該記述が見当たりません。代わりに、"What every Computer Scientist needs to know about Floating Point" で有名な David Goldberg (同名の別人でなければw)が、ちょー長い付録 "Appendix J: Computer Arithmetic by David Goldberg" を書いています。(読んでないw)

Elsevier: Hennessy, Patterson: Computer Architecture: A Quantitative Approach, 5th Edition Welcome

RATFOR の Quick Reference Card

archive.org

internet archive に RATFOR の三つ折り Quick Reference Card がうpされておりました。

昔はよくこの三つ折りの厚紙の Quick Reference Card がありましたが、あまり役に立ちませんでしたw

RATFOR は古典 FORTRAN 時代に、構造化プログラミングを実現するための FORTRAN プリプロセッサ・プログラムです。元々は FORTRAN 66 に変換します。

ググったら、プログラム自体もあるようですが、FORTRAN77 に変換するように書き直したもののようです。
sep:software:ratfor [Stanford Exploration Project]

ソフトウェア作法

ソフトウェア作法

Software Tools

Software Tools

なお、真面目なプログラムで RATFOR で書いたものを見たことはありません。

追記

このインタビューによると、カーニハンは日本語数年勉強したとか。

An Interview with Brian Kernighan

一番最後の段落

I went through a phase in which I tried to learn Japanese, for example; I can tell you, it takes longer than 3 years to learn Japanese! And so that was a failure. When I was a graduate student I spent roughly five years doing karate and I got to a point where I could sort-of survive, but I dropped it, it's no longer part of my life.

hello, world の起源は三波春夫の「世界の国からこんにちは」説

風呂場でふと思いついたのですが、C 言語で有名な hello, world ですが、初出は wikipedia によると、1973年のカーニハンの著作 A Tutorial Introduction to the Language B らしいので、これは空手を習って日本語に接していたカーニハンが1970年大阪万博のテーマソング「世界の国からこんにちは」by三波春夫を聞いていて、あのキャッチーな名曲に無意識のうちに潜在意識が ESP 反応の如く Hello, World と自動書記させた可能性が微レ存(死語)。

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは ?ハルオロイド版?

世界の国からこんにちは ?ハルオロイド版?

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

世界の国からこんにちは

ナウな言語とのベンチマーク

天文系の計算で Fortran と最近のナウい言語とのベンチマークがなされています。Fortran も 2008 水準のモダンなものを用いているようです。

  • Compiled languages:
  1. Fortran: GNU Fortran 6.3.1
  2. C++: g++ 6.3.1
  3. Java: JDK 1.8.0-74
  • Interpreted languages:
  1. Matlab: Release 2016b
  2. Python: 3.5 with Numba 0.28.1
  3. Julia: 0.5.1

link.springer.com

結果図をみると、Fortranソースコード長は長目ながら、実行スピードは速めとなっています。実行時間のグラフの方は対数プロットなので注意が必要です。
f:id:fortran66:20170930031916g:plain

ソースコードgithub で公開されています。
github.com

make ファイルを見る限り、ベクトル化・並列化などはさせていないようです。intel fortran を適切なオプションで利用すればもっと速くなると思われます。

ソースコードをチラッと見た感じでは、モダンな Fortran の書き方をしていましたが、関数引数を使えばよさそうなところで使ってなかったり、疑問点が残りました。他言語と同じように書けばソースコード長は、もう少し短くなるかもしれません。

あんまり詳しく見てませんが・・・w

Guide to Fortran 2008 Programming

Guide to Fortran 2008 Programming

Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77

Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77

Modern Fortran Explained (Numerical Mathematics and Scientific Computation)

Modern Fortran Explained (Numerical Mathematics and Scientific Computation)

coding ground の gfortran が ver.7.1.1 になるもあまり動かず?

ブラウザ上で動くオンライン・コンパイラの coding ground が微妙にインターフェースを変えるとともに、コンパイラのバージョンをアップしてくれたのですが、パソコンからだとなかなか動いて呉れません。たまに動きます。またスマホタブレットだとやや動きます。

Compile and Execute FORTRAN-95 Online

ver.7.1.1 になって Fortran2008 にも対応したはずですが使えません。


ただ抜け道があって、旧インターフェースの IPython を選ぶと、シェルのプロンプトが出るので、そこで vi, gfortran をコマンドラインで使えます。

Free Online IDE and Terminal

メモ帳:FORTRAN 77 の制御構造が BLOCK IF 文だけになった経緯

昨日のエントリで日本での事情を調べましたが、米国での事情についてもメモしておきます。

fortran66.hatenablog.com


f:id:fortran66:20170929012120p:plain
Martin N. Greenfield, History of FORTRAN standardization (1982)
History of FORTRAN standardization

時系列的には、FORTRAN 66 規格の後、FORTRAN 77 になることとなる次世代規格の議論を始めたわけですが、そうこうしているうちに、構造化プログラミングの概念が誕生して、1972年頃には GO TO 論争が米学会シンポジウムで戦わされ、構造化プログラミングによる制御構造概念の有効性が認識されるに至っています。

そのため、FORTRAN 77 規格に対する一般人の意見を募集したところ大量の意見が殺到し、その中に制御構造を入れろとの意見が無視できないほどあったものの、全部検討している時間もないといった状況下で、BLOCK IF 文だけを入れるという妥協が図られた模様です。

fortran66.hatenablog.com

FORTRAN の言語としての特性

FORTRAN の言語としての特性

菅忠義、プログラミング言語の最新の動向:3. FORTRAN 情報処理 22 (1981) 452
id.nii.ac.jp

より引用。

FORTRAN II

f:id:fortran66:20170928010234p:plain
1) IBM: The FORTRAN Automatic Coding System for the IBM 704 EDPM.

  1. 数値計算に関する任意の問題を表現可能。(多くの式と変数を容易に扱いうる。)
  2. 論理的な問題は扱わず。

FORTRAN IV

f:id:fortran66:20170928010438p:plain

  1. 科学技術上の数値的、論理的演算のアルゴリズム表現が主目的。
  2. 実用の立場からの使いやすさ。実行の効率に重点。
  3. 平明・単純かつ静的。

FORTRAN 77

f:id:fortran66:20170928010457p:plain

  1. 実行効率が高い。
  2. 言語として平明容易。
  3. 静的である。
  4. F66 との無矛盾性。

F66 と F77 の言語仕様作成上の違い

FORTRAN の特徴は、既存の処理系がすでに複数存在して常用されていること。
F66 は既存の多数の処理系の共通部分の抽出、F77 は既存の処理系の拡張部分を包括する。f:id:fortran66:20170928010933p:plain

標準言語FORTRAN (電子計算機基礎講座 3)

標準言語FORTRAN (電子計算機基礎講座 3)

ソフトウェア開発の実際―標準とその活用

ソフトウェア開発の実際―標準とその活用

FORTRAN77 に BLOCK IF 文構造のみが入った経緯

FORTRAN77 では、制御構造の構造化構文の内 BLOCK IF だけが中途半端に取り入れられている経緯に少し触れられています。

f:id:fortran66:20170928012043p:plain

メモ帳:Knuth の An empirical study of FORTRAN programs

Donald E. Knuth が 1970年に "An empirical study of FORTRAN programs" という論文の中で、FORTRAN プログラムの解析をしています。年代からここでの FORTRANFORTRAN IV/66 水準のものだと分かります。すなわち制御が構造化される前です。

結論からすると、静的には代入文が約半数、動的には反復などで代入が全体の約 2/3 に増える。SUBROUTINE 呼び出しは 5~10% 程度の模様です。
f:id:fortran66:20170927012354p:plain

f:id:fortran66:20170927011543p:plain


配列が多重 DO LOOP の中で何度も更新されている様子が目に浮かびます。

f:id:fortran66:20170927013617p:plain

現代風だと GO TO / CONTINUE / FORMAT は要らなくなるので、これで 16% 抜けることになります。よってたぶん代入7割、制御1割、宣言1割、I/Oとサブルーチン呼び出しで1割といった塩梅でしょうか?

onlinelibrary.wiley.com
直リン:http://www.cs.tufts.edu/~nr/cs257/archive/don-knuth/empirical-fortran.pdf

追記

Kernighan & Plauger の Software Tools (Chap.9 Bibliographic Notes, p.318) によると、"profile" をプログラム中の単語頻出度の意味に使うようになったのは、この論文がはじめとのこと。

Art of Computer Programming, Volumes 1-4A Boxed Set, The (Box Set)

Art of Computer Programming, Volumes 1-4A Boxed Set, The (Box Set)

The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版 (ASCII Addison Wesley Programming Series)

The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版 (ASCII Addison Wesley Programming Series)

コンピュータの数学

コンピュータの数学

Concrete Mathematics: A Foundation for Computer Science

Concrete Mathematics: A Foundation for Computer Science