恐るべし！ むかしむかしの FORTRAN !

cure_honey さんの [今時の Fortran 入門](http://qiita.com/cure_honey/items/795bd0e048ffeadc3e63) に対抗して、
というわけでもないですが、むかしの話。

学生時代はたいした計算をすることもなく（まあじゃんの点数くらい）、コンピュータやプログラムの講義は一度も受けたことない（いまだに）。

シミュレーションでもつくって修論を誤魔化すことになってさあ大変。やむなく FORTRAN を独学。(*1)

当時はもちろんメインフレーム・大型計算機しかなく、これが本部構内の計算機センターに鎮座まします。

今出川通りはさんで 500m ほどの物理教室の端末室は、ぼろいカードリーダ（すぐ詰まる）とラインプリンタ、プロッタ、感熱紙の TSS 端末各１台だけ。
課金のため、使ったカードの枚数やプリントした紙の長さまで記録必要で、巻尺が備え付けでした。(*2)

大量計算の場合は、センターまでカードをカートに積んで出かけるのだが、これをひっくり返すとさあ大変である。

### ABEND 

なにか実行すると、ラインプリンタに１行だけ ABEND って冷たく出るだけ。この意味が分かるのに数年かかった。

### 鯨の解体

プロッタ用紙（幅約 1m）に小さくたくさん書いたグラフなどを切り分ける作業。誰かがプロッタ用紙を持ち込むと、研究室総出で解体作業していた。

## FORTRAN 恐るべし

当時(1978,79)は FORTRAN 66 ? 
IF THEN ELSE のないやつ。 従ってそれまでは GO TO の嵐になりがちだった。

普通は以下みたいに書くんだけど、

```fortran:
      DO 5 I = 1, 10 
         IF .... GO TO 99
    5 CONTINUE
   99 ....
```

あるとき先輩のコードを見ると以下みたいな感じで異様にスペースが少ない。

```fortran:
      DO5I=1,10 
         IF .... GOTO99
    5 CONTINUE
   99 ....
````

聞いてみたら、「えっつ、スペース入れてもええんか？」と言ってました。当時の処理系は、字句解析と構文解析がちゃんと分離しておらず、上みたいな書き方もできたみたい。

以下は会社の同僚に聞いた話。

**ここでコンマとピリオドを打ち間違えるとどうなるか？**

```fortran:
      DO5I=1.10 
````
コンパイラの解釈は

```fortran:
      DO5I = 1.10 
````

すなわち DO5I という実数型変数に 1.10 という実数を代入して、何事もなくコンパイル完了、
これを実行すると。。。 
NASA のロケットが落ちた! とかいう噂もあるらしい。
[FORTRANの記述の旧式さによる逸話](http://ja.wikipedia.org/w/index.php?title=FORTRAN%E3%81%AE%E8%A8%98%E8%BF%B0%E3%81%AE%E6%97%A7%E5%BC%8F%E3%81%95%E3%81%AB%E3%82%88%E3%82%8B%E9%80%B8%E8%A9%B1&redirect=no)

(3/14追記) cure_honey さんコメントの資料によれば、

```fortran:
       DO 10 I=1.10
と書いても、
      DO10I = 1.10
と解釈されてしまうらしい。。。
````

## 会社入ってから

やっと FORTRAN 77 になる。
シミュレーション開発など。FFT も自力で組んでいた。
ミニコンの FORTRAN で実験用のステップモーター回したこともあったかも。

研究所の小さな端末室だったけど

* カードリーダも高速、エアー吹き出しでカードを分けて詰まらない
* ラインプリンタ1台
* ソニーテクトロのストレージ管の CRT 端末が 2台
* センターに行くとカードパンチャーという女性が、カードを打ってくれる

やっぱり企業は違うわな。

普段は担当者が端末を立ち上げておいてくれるんだけど、たまに自分でやらないといけない場合も。
清水義範氏がどっかで書いていたけど、コンピュータを立ち上げる、とか言うけど何とおおげさな、とか。

覚えてないけど立ち上げはこんな感じ

* 各装置の電源を入れる。順序は準備体操と同じで周辺から中心へ（いまどきの人は知ってる？）。通信制御用のミニコンが最後
* ミニコンに紙テープをセット（当然紙テープはときどき切れる。。。）
* ミニコンの４つのトグルレバーでブートコードを入力（要するに 4ビット単位で入力）。紙テープを読み込ませる
* オープンテープをセット、それを読み込ませる
* カードリーダにカードを読み込ませて。。。

やっと立ち上がるのである（この間１０分くらい？）。

### 1985 [本物のプログラマはPascalを使わない](http://ja.wikipedia.org/wiki/%E6%9C%AC%E7%89%A9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AFPascal%E3%82%92%E4%BD%BF%E3%82%8F%E3%81%AA%E3%81%84)

伝説の論文が bit誌に掲載、そのコピーが回ってくる。すごい。技が違う。。。

* 20 ナノ秒もループ実行時間が改善されるならば、自己書き換えプログラミング・コードを記述する。

わたしはこのあたりから FORTRAN は使わなくなって、C言語、LISPなどに移行する (*3)

### 初めて見る FORTRAN 90

その後長らく情報処理学会の査読委員をやらせれていたんだが(*4)、「地球シミュレータ」とかの論文が回って来る。１ページほどのコードサンプルも載っていた。

よく分からんが、むかしと全然違う、なんだかすごそう！ 「全配列操作」というやつ？
拡散方程式 $ \frac{\partial T}{\partial t} = K \frac{\partial^{2} T}{\partial x^{2}}$ の解法が以下で書けるらしい。

(3/14 追記）この論文はボツになってしまったが、該当部分はたぶん [これ](http://www.geosci-model-dev.net/5/449/2012/gmd-5-449-2012.pdf) と同じ。

```fortran:
45 temp(2:nx-1) = temp(2:nx-1) & ! TIME INTEGRATION
46   & + kappa*(temp(3:nx)-2*temp(2:nx-1)+temp(1:nx-2))/dx**2*dt
```

## 蛇足

(*1)  ほんとは学部４年のとき TI のプルグラム電卓を買って、けっこう使った。
これはなかなかの名機であった。
たぶん [TI-58C](http://en.wikipedia.org/wiki/TI-59_/_TI-58#58C) である

(*2) ＜4/11追記＞
* なおメインフレームというのは基本的にレンタル。
* メーカーがハード・ソフトと専任のオペレータ（人）を貸し出して使用料をとる方式。
* その使用料が使用者に課金される。
＜／4/11追記＞

 学生時代のメインフレームは F 通さんの FACOM だった。
あるときその FORTRAN マニュアルを読んでいると、裏表紙に替え歌がのっていた。

```text:
♪ ヤッホー、フォートランランラン
♪ ヤッホ、フォートランランラン
♪ ヤッホ、フォートランランラン、ファコム！
```
なんちゅう会社や！

(*3) [PC-8000シリーズ](http://ja.wikipedia.org/wiki/PC-8000%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA) の発売が 79年、
やっと会社で買ってもらえたのはその数年後である。

* 5'' FDドライブ X 2 、プリンタなど合わせると約70万円！
* 皆さん、くれぐれもメモリなどの「桁」を間違えないように

ちなみに当時の物価事情

* 学生時代の学費は 2K 円/月 （修士で 4K, 8K にあがった）
* 初任給は修卒で 135K 円くらい、５月のベアで 145K 円くらいになった。（いまでも２倍は全然いかない？）
* 当時の米ドルは 220 ～ 250円くらい

なお当時は別のマイコンで CP/M もつかっていた。

* 8 インチフロッピーだった
* これを抱えて歩いていると、ほんとに仕事をしてるみたいに見える！
* もちろん本物のプルグラマは、パンチカードとオープンリール以外は偽物というであろうが。。。

(*4) 5/15 追記
任期満了で数年前に引退、学会もやめてしまった。はずだったのだが、
今日「シニア査読委員再任のお願い」メールが届いた。
何のこっちゃ！ と思ったが、どうも OptOut（拒絶しない限り受諾とみなす）方式で、以前のお願いが受諾になっていたみたいである。
まあ何も仕事はなかったので、今回もほっておこう。。。