新入社員の頃、職場に配属されて暫くたった時、米国出張から帰ってきた上司が、私の机に IFTRAN というタイトルの資料を置いて、これを作れという。当時はソフトウェア工学が盛んになりだした頃で、ダイクストラが提唱した Strcutured Programmingをサポートする if -then-else や、case, begin-end, while 等の制御構文をFortranに導入したのが、米国のどこかの会社が開発したIFTRANであった。私の周りには言語をやっている人は誰もいないので、独学でコンパイラについて勉強し、コンパイラ部門にも聞きながら開発を始めた。
当初使っていた大型機OKITAC8000 は次世代ミニコンのクロス開発マシンとして使われることになり、仕方なく計算センターのUNIVAC 1106を使い始めた。UNIVAC1106は、IBMと並んで古いコンピュータメーカSperry Rand 社が開発したUniva 1100 シリーズの2番目のシリーズの1機種であり、それまでのUnivac 1101~1104とは異なり、36bitワードアーキテクチャを採用したトランジスタ化されたコンピュータである。1107, 1108,1106,1110が開発され、その後3番目の1100/220シリーズに移行する。特にUNIVC 1108は名機との評判が高かった。OSは EXEC 8と呼ばれた。
IBM System/360との比較で言えば、OS/360がバッチを中心とするシステムであり、JCLは必要とする資源を前もって宣言する必要があった。今はメインフレームを使う人しか使わないけど、ファイルのことをDataset と呼び、このDatasetは構造化されており、JCLでは長々と規定する必要がある。これに対して、EXEC8 のコマンドは基本的に1行であり、OS/360と比べると非常にすっきりしていた。IBMではJCLをカードリーダから読み込ませるのが普通であったのに対して、EXEC8では CRT端末から会話的にコマンドを入力できた。その他にも、当時としては珍しくマルチプロセッサシステム構築が可能である、RJE(Remote Job Entry)が可能等の先進的な機能を持っていた。
IFTRANからFORTRANへのトランスレータは割合簡単に作れたのだが、問題が発生した。
EXEC8では、アプリケーションプログラムの出力データを、そのままではコンパイラ等のシステムプログラムの入力とすることはできず、OSの定めるシステムプログラム間の共通データフォーマットであるSDF(System Data Format)に変換しなければならない。
このデータ変換を行うためには、OSの機能を呼び出す必要があるのだが、そのAPIはアセンブラでしか使えない。当時データセンタはCOBOLとFORTRANしか許可していないため、データセンタにアセンブラ使用の許可を求めると、原則駄目と言われるが、粘って何度も通うと今度は工数がないという。(工数って、作業時間のことですか? でも、貴方はいつも暇そうにしていますよね、と思いつつも)何度も頭を下げて許可をとった。
これで, IFTRAN の実行ができるようになり、テストや評価を行った。UNIVAC FOTRANの最適化レベルを上げて、コンパイラの出力するアセンブラソースを見ると、FORTRANコンパイラが非常な最適化を行っている事がわかり、大変参考になった。
使っていくうちに このマシンは FORTRANマシンなんだと気付いた。
- Univac 1100シリーズは、1ワード 36bit のワードアドレスマシンであるが、当時は7bit ASCIIや IBMの 8bit EBCDICが普及する前の 6bit FDコードを採用していたのだが、FORTRAN の変数名6文字が調度1ワードに収まる。
- 127本と非常に多数のレジスタを持っており、計算の多くの処理を高速なレジスタ上で実行できる。レジスタは Aレジスタ、Xレジスタ、Rレジスタの3種(+少数の特殊なレジスタ)からなり、Aレジスタは演算に、XレジスタはIndex レジスタとして配列の参照に、そしてRレジスタはDOループの制御に使われる。Rレジスタは1ワードを2つに分割して、DO文の制御変数の最終値と刻み幅に使われる。このようにFortanの科学計算で最も良く使われる配列データに対する繰り返し演算をハード面で強くサポートしている。
- 負の数の表現には、1's complementを採用。1's complemnetにはゼロの表現が2つあるのが欠点で、現在 2's complementが主流になっているが、演算回路が簡単で高速だ。
勿論、36bitワード等は Univac固有の機能ではなく、IBMがSystem360でアーキテクチャを 32bit 語に統一するまでは、IBM 7090等でも採用されていたアーキテクチャである。尚、IBM 7090シリーズは負数の表現には上記のいずれとも異なる Sign+Magnitude方式を採用していた。
このように、メインフレームの頃のコンピュータは、コンピュータ発明の原動力となった技術計算を強く反映したアーキテクチャになっていた。これに対して、現在の Intel x86とC は、言ってみれば文字列の処理に注力したアーキテクチャと言えるであろう。
Univac はその後、バロースと合併しUnisysとなった。メインフレームから撤退し、現在はIntel CPUベースのLinuxやWindowsサーバを製品として持っているが、サービスやコンサルティング事業に軸足を移している。