本文へジャンプ

鉄道と基盤ソフトウェアの思いがけない共通項

システムソフトウェアのおもしろさは何か、どんなことを考えながらプログラムを書いているのか、今日はそれを語っていただけないでしょうか。先生はどのようにしてシステムソフトウェアに惹かれていったのでしょう? 以前に、いろいろなものが連携して動くような大規模な系、システムを作ることに興味があるとお聞きしました。

システムソフトウェアを手がけている人には、わりと鉄道おたくが多いんです。鉄道は、軌道、車両、運行システムがうまく働いてはじめて動きます。それと同じように、いくつもの要素が連携して動く大きなシステムを制御することに興味があるのだと私は思います。私も子どものころ、鉄道模型を作って押し入れや天井の裏にレールを敷くことが夢だったし、ロケットを作ることに憧れていました。巨大なシステムを制御したい、それがどう制御されているのか知りたいと思っていたのです。

そんなわけで、大学生のころからプログラムを書きたい、OSをやりたいという強い気持ちがありました。でも1980年代の当時は、まだOSのソースコードを簡単に入手できないんです。大学にはBSD UNIXのソースコードはありましたが、それが動作するVAXというコンピュータはみんなが共同で使っている高価なものです。その運用を止めてOS開発に使うなんてとてもできない。そこで博士課程では、並列オブジェクト指向言語を設計・実装しました。手続き型プログラミングと論理型プログラミングを融合したオブジェクト指向言語なんですが、独立して計算が進んでいるプログラム――つまり並列実行しているオブジェクトの間で通信して、データや制御の同期をとれるようにしています。

OSをやりたかったけど、環境がなかったから言語という流れなんですね。

言語についていえばもうひとつ、プログラミング言語自身が自分の言語を書き直す、メタレベルプログラミングというものも、テーマとしてはおもしろかったですね。リフレクションというのですが、プログラム変換を自分自身にかけて、プログラムのセマンティクスを変えられるんです。じゃ、無限に重ねたらどうなるか、ほら、エッシャーの絵のような……といったら雰囲気が伝わるかな。

OS作りにはどうつながっていったのですか?

OSを作るという希望はその後、電子技術総合研究所(現産業技術総合研究所)からカーネギーメロン大学に1年間訪問している間にリアルタイムOSの開発にかかわるという形でかなうんです。

「系」をつくる

1992年からは、新情報処理開発機構で並列計算向けのクラスタシステムを開発することになります。目標は、プログラムが多数のCPUを駆使して高速に結果を得られるような並列計算環境を実現すること。

独自にハードウェアを設計する一方で、私が担当するシステムソフトウェア側は、アプリケーション開発者が性能を最大限に引き出せるようなプロセス間通信の仕組み、並列プログラミングに適した言語、実行環境などを構築したんです。簡単にいえば、複数のPCを集めたクラスタシステムを、アプリケーション側から1つのマシンとして制御できる仕組みですね。

プログラムがあれこれメッセージをやりとりしながら1つの「系(システム)」としてちゃんと動くわけですね。

複数のプログラムが相互作用して複雑な状況を作りだしているものを、相手にしたいという気持ちはあります。鉄道模型だって単純に一周するだけじゃつまんないじゃないの。ポイントがあって、切り換え器があって、列車が複数走っていて、それではじめておもしろいんじゃない? ちがう?(笑)

真面目な話をすると、コンピュータを動かすためには、演算器にデータを供給しなければなりません。いまのシステムソフトウェアの設計では、プログラム中の計算とデータをどうやってつなぐかという「データの移動」、つまり通信の部分が常に設計や実装のポイントになってくるんです。

これまでOSのカーネル、プログラミング言語、並列計算のプロセス間通信、ファイル入出力の部分と、一貫していろいろなものが相互作用しながら1つのシステムとして働くものを手がけていらっしゃるわけですね。そこでは、通信に近い部分、データの移動に注目していらしたのだと。

ページトップへ戻る