記者はコンピュータの仕組みの話を書いたり読んだりするのが好きだ。記者が所属する日経ソフトウエアはプログラミングの雑誌なので,記事の中心はプログラムを書く話だが,ときどきコンピュータの仕組みにかかわる企画が採用される。そのようなときはいつもにまして楽しく仕事ができる。

 最近の成果は「CPUエミュレータ」の製作記事である。IPA(情報処理推進機構)の情報処理技術者試験で使われている架空のCPU「COMET II」と,そのアセンブリ言語「CASL II」を題材に,実在しないこれらのシステムのエミュレータを作る過程を解説した。

1000行のコードを隅々まで興奮して読んだ

 2009年2月号で,C言語を使ってCPUエミュレータを作る記事を掲載した。幸いこの記事が読者に好評だったので,それに気をよくして最新号の2009年7月号では第2弾を企画した。同じCPUエミュレータをC#に移植したうえで,CASL IIのプログラムからWindowsの実行形式を作れるようにする,というものだ。

 CASL IIやCOMET IIはあくまで学習用の架空のシステムである。これらでプログラムを書いたところで,サンプル・アプリケーション止まりとなる可能性が高い。一方で,こうしたCPUエミュレータは,コンピュータの仕組みを理解するにはうってつけの題材でもある。プログラマがコンピュータの仕組みを学ぶメリットは決して小さくない。プログラミングというものは,作る対象をきちんと理解しないと満足に進められないからだ。

 今回の企画は,自分が知りたくて読みたいということで始めた。それが好評を得たというのは,このような仕組みの話を面白がって読んでくれる読者が少なからず存在することを意味する。記者にとっては,とても心強い。

 C言語版で1000行ほどのコードを,記者は隅々まで興奮して読んだ。高度な開発環境やフレームワークを駆使した今どきのプログラミングでは,これらは必ずしも知らなくて済む知識かもしれない。だが,CPUエミュレータや言語処理系のような「プログラムを動かすプログラム」の仕組みを知るのはいつでも面白く,楽しい。

設計者が言語仕様に込めたメッセージを読み解く

 記事のさわりを紹介すると,C言語版を扱った第1弾はCPUエミュレータの製作という題材自体が持つおもしろさを味わってもらう構成である。CPUの仕組みをある程度理解している人なら,CPUの動作をまねるプログラム(エミュレータ)を作ること自体は,そう難しくないと想像が付くだろう。

 極端な話,各種の記憶領域(主記憶やレジスタ)を配列などで用意し,読み取った命令を全部if文で分岐させて,対応する処理をベタに書いていけば済む。しかし,仕様をよく吟味して,そこに埋め込まれた設計者からのメッセージを読み解いたとき,ベタな実装では決してたどり着けない境地に到達できる,というもの。「仕組みの話」のだいご味である。

 C#版を扱った第2弾の記事では,C言語版をC#に移植する過程で行き当たる,CとC#との間の見かけ以上に深いギャップに焦点を当てた。C#は名前も構文もCに似ているが,見かけとはうらはらに,実はPascal言語的な要素を多分に含んでいる。ハードウエアの仕組みではないが,C#の設計者が(言語の)仕様に込めたメッセージという点ではやはり「仕組みの話」の範ちゅうに入れられる。

 C#のPascal的な面については,解説を執筆した川俣晶氏も自身のWebサイトでいくつかのエントリを書いているので参照されたい。

 具体的な解説は誌面にゆずるが,ソースコードは日経ソフトウエアのWebサイトで公開しているので,雑誌を買わなくても試してみることができる。

 C版とC#版どちらもマイクロソフトが無償配布している開発環境「Visual Studio 2008 Express Edition」があればコンパイルできる。Wikipediaの「CASL」の項に,CASL IIプログラムのサンプルとして「ハノイの塔」を解くプログラムが公開されている。これをそのままテキスト・ファイルとして保存してエミュレータに読み込ませれば動作する。

 ぜひ自分の手でCPUエミュレータを動かしてみて,コンピュータの仕組みを知るきっかけにしていただければと思う。