1.5.1 FORTRANの方言

計算機言語には各国の標準機関 (日本ではJIS) 及び国際標準機関 (ISO) により 定められた規格がある. FORTRAN も例外ではなく,

という言語規格があるが, 実質的には全て同じもので, いわゆる FORTRAN77 の規格である.

言語規格というのは「日本語の文法」の様なもので, 計算機に自分が意図した動作をさせるためには これをよく知っていなければならない. これは, 当り前のようで, 意外にくせものである. なぜならば, 普通, 多くの人々は FORTRAN を勉強する時, 英語の勉強のように, 文法を厳しく教わりながら勉強 するわけではないからである. どちらかというと, 日本語を覚えたときと同じ様に, 「見よう見まね」または「試行錯誤」により FORTRANを勉強するのが普通である. そうなると, 多くの人が生まれた土地の方言を, 方言と気づかずに覚えてしまうのと同じ様に, 特定の計算機の特定のコンパイラだけが解釈できるプログラムを 平気で書いてしまうことになる.

FORTRAN コンパイラは通常, 標準語としてのFORTRAN77規格 +αの機能を持っている. この+αの部分は, 拡張機能と呼ばれ, このような拡張機能を持つコンパイラは FORTRAN77 上位互換(アッパーコンパチ) コンパイラと呼ばれる. これは, 標準語だけで書かれたプログラムでも,+αの機能を使ったプログラムも, どちらもコンパイルできるという意味では コンパイラの「機能が高い」のであるが, 逆に+αの機能を使ったプログラムは, そのコンパイラでないとコンパイルできないことになる. したがって, 我々は+αの部分を「方言」と呼ぶ.

日常会話の中では, 方言は特に問題にならず, むしろ標準語では表現できないニュアンスまで 伝えることができて便利である場合が多い. これは, 方言が標準語の拡張機能として働いているためであるが, ビジネス上の会話で方言を使うと, とんでもない結果をもたらす. 多くの人は「明日, 東京にいかずー」という約束をしたら, 明日, 東京にいくべきか否か迷うに違いない. (これは中部地方の方言で, 東京にいこう, という意味である)

これと同じ様に, FORTRANの「方言」は特定の計算機を使いこなすには 便利な場合も多いが, むやみに使うと非常に危険である. しかし, 生まれた土地を離れたことがないと, 自分の言葉が方言かどうかわからないのと同じ様に, 特定の計算機しか使ったことがないと, 正確なFORTRANの文法を身につけるのは難しい. なぜなら, いつも使っているFORTRAN77のコンパイラがちゃんとコンパイルしてくれれば, そのプログラムはFORTRAN77規格に準拠したプログラムであると 思ってしまうからである. しかし, これは明かな間違いである. どんなコンパイラでも大なり小なり「方言」を持っており, その「方言」を使ったプログラムは, たとえ, FORTRAN77規格のコンパイラでコンパイルできたとしても, FORTRAN77規格準拠のプログラムではない.

そこで, FORTRANで何とかプログラムが書けるようになった初心者も, この道10年のベテランも, 市販の文法書以外に「岩波FORTRAN辞典」を 座右におかれることを強くお勧めする. これは単なる文法書ではなく, 規格が意味するところや, 歴史的背景などが解説してあって, 辞典としてだけでなく, 読物としても面白い書物である.

電脳ライブラリはいくつかの例外を除いて, 極力この「方言」を避けて書いてある. どうしても「方言」使わなければならないようなところは, 直接「方言」を使わず「電脳標準語」を定義して, 各プログラムの中では「電脳標準語」を使うようにしている.

例えば, SYSLIB の中の msgdmp はエラーを検出したとき, システムに依存したエラー処理をおこなって (たとえば, エラーのトレースバック情報を出力して) プログラムを強制終了する osabrt というメソッド(元サブルーチン)を呼ぶ. 各コンパイラは必ずといってよいほど, この種のメソッド(元サブルーチン)を「方言」として持っており, osabrt は単にそのコンパイラ固有のメソッド(元サブルーチン)(方言)を 呼んでいるだけである. しかし, その「方言」を使わず, 「電脳標準語」である osabrt を使って他のメソッド(元サブルーチン)を書いておけば, osabrt を各コンパイラ用に書きなおすだけで, そのようなプログラム全てを移植できることになる.

この移植のしやすさ(可搬性)こそ電脳ライブラリの最大の特徴であり, ライブラリ開発者が最も苦労した部分でもある. この特徴を最大限に生かすためにも, FORTRANの文法をよく理解して, 不必要な「方言」を使わないよう心がけて欲しい.

以下の節では不必要な方言を避けるために知っておくべき知識,知っていると 便利なことがら, そして, プログラミング上の盲点となるような落し穴につい て多少の解説をしておく.