私の「コンピュータ」履歴書 No.13

77


このコーナー、年に2〜3回しか書かないものですから、前回何を書いたか忘れてしまっていたりするわけで、同じような話が何度も出てきたりして、通しで読んでいる人には大変申し訳ないのですけど、まあ書いている人間がいいかげんな奴なもんですから、ご了承下さい、と言い訳をしつつ…。

そんなわけで、もう何度も書いたような気もしますけど、折角物理学の研究室に入った割には、全然物理学と関係の無いことばかりやっていた私だったりするわけですけど、まあ、それはそれで面白かったものですから、勝手に首を突っ込んで、引っ掻き回していた、というのが実情だったかも知れません。
さて、当時研究室ではコンピュータでいろいろな処理をやっていたわけですけど、記述言語はほぼ100%がFORTRAN、しかも規格としてはかなり古い「FORTRAN 66」(←この名称が正確なのかどうか、もう忘却の彼方)で書かれていました。
で、新しくプログラムを作る場合には、この古い規格じゃなくて、(当時としては)新しい「FORTRAN 77」で書きたいわけです。古い66規格のコンパイラのサポートもいつまでメーカがやってくれるのか不安、ということもありますし。
またFORTRAN 77では、いろいろと新機能が増えているのですけど、ブロックIF文ってのが使えて、私などは特にこれはぜひ使いたい、思ったりもしたわけです(ブロックIF文については、以前書いたので、そちらをご覧下さい)。
でもって、新しいプログラムだったら、別に過去のしがらみ無しでFORTRAN 77でプログラミングできるか、というと、なかなかそうは行かなかったりします。なぜかと言うと、新しいプログラムと言っても、それらは古い(FORTRAN 66)のコンパイラでコンパイルしたライブラリを呼び出していたりするからなんですね。で、当時使っていたコンピュータでは、FORTRAN 77でコンパイルしたプログラムから、FORTRAN 66でコンパイルしたライブラリを簡単には呼び出せないような仕様になっていて、要するに、FORTRAN 77でプログラムを作りたいのであれば、ライブラリもFORTRAN 77でコンパイルして作成しなさい、ということです。

で、当時研究室で使っていた「ライブラリ」って、一体どんなものか、というと、研究室内で誰かが作った、とか、他所から貰ってきたものであるとか、素性はいろいろあるのですけど、結局はFORTRANの古いプログラム(サブルーチンや関数)の集まりだったりします。基本的にはソースがあるので、FORTRAN 77で使えるライブラリを作るためには、それをFORTRAN 77のコンパイラで再コンパイルすればいいはずなのです。
まあ大学内なんて、ソース管理をきちんとやっていなかったりするのですけど、当時はソースのありかはパンチカード、物理的なモノでしたから、結構ソースもちゃんと残っていたりしました…まあ、どこに仕舞ってあるか探すのは大変でしたけど…パンチカードを探すのに、findコマンドも、「右クリック」から「検索」を選んで、という手も使えないですし。
ところで、FORTRAN 77というのは、基本的にはFORTRAN 66の上位互換なはずなのですけど、この「基本的に上位互換」というのがなかなか曲者でして…って、これはいつの時代のどのソフトウェアでもでもそうかも知れませんね、これで泣くことがいままで何度あったことか…。
んで、古いライブラリのソースをFORTRAN 77のコンパイラでコンパイルしようとすると、エラーが出てコンパイル出来なかったり、また出来ても、それを使うと動きがおかしかったり、というのが続出しました。
これって、言語仕様の違い、というのももちろんありますけど、言語仕様上の、未定義や未規定の部分で、たまたま66では動いていたものが77でコンパイルしたら動かなくなった、ってのも多いわけです。で、これを探すのはかなり大変。
当時M1(大学院修士過程1年目)でヒマだった私も、他人の作った訳の分からないプログラムを散々みてバグ潰しをしました。この「他人」というのは、結局のところ物理学の研究者なわけで、プログラミングについてはかなり素人。まあ、そんな人間が自己流で作ったプログラムがどんなものか、というと…。
要するにこれが、スパゲティプログラムの山。GOTO文使いまくりの、算術IF文使いまくりの、サブルーチン間の変数の受け渡しはCOMMONブロック使いまくりの、変数名はNだのNNだのNNNだのN1だのNN1だのいったいなんの変数なんだかさっぱりわからんものだらけの、もちろん変数は暗黙の型宣言に従って変数名の宣言などしていないものだらけの、まだまだ言いたいことはいっぱいあるけど、というような代物でした。
こんなもん、どうやって、直せってーの。
余談ですけど、「プログラムなんて、動けばいいじゃん。なんでそんなに規格にこだわるの?」という人がいますが(それもかなり大勢)、言語仕様の未定義やら未規定やら実装定義やらの部分を安易に使っちゃうと、こんなふうに後々困るんですけどねえ…そういう人たちって、こういうので苦労したことがないのかなあ。

しかし、こうやってこの駄文を書いていて、自分がすっかりFORTRANの文法を忘れてしまっていることに気付きました。もう10年以上使ってないからなあ。家にあったFORTRANの本、探しても出てこなかったし、どこ行っちゃったんだろ。

[前へ] [次へ]

[Home] [戻る]


mailto:lepton@amy.hi-ho.ne.jp