
プログラムは、書いて、コンパイルして、実行する。ふつうは一度コンパイルすれば、あとは動かすだけだ。ところが、1コマ進むたびに自分自身をコンパイルし直して動く、風変わりなPongが作られた。
作ったのは、Jonah Uellenberg氏。世界中のプログラマーが、わざと読みにくく入り組んだ、それでいてきちんと動くC言語のコードを競う、長く続くコンテストがある。1984年から開かれているこの催しで、Uellenberg氏のPongは「Ping Pong Prize」を受賞した。
このPongの仕組みは独特だ。プログラムを実行すると、画面を表示しつつ、次のコマを描くためのC言語のソースコードそのものを出力する。その出力をコンパイルして動かすと、ゲームが1コマだけ進む。これを繰り返すことで対戦が進んでいく。1コマごとに、ゲームの今の状態を埋め込んだ新しいソースコードが生まれては、またコンパイルされる。
土台にあるのは「クワイン」と呼ばれる考え方だ。クワインとは、実行すると自分自身のソースコードを出力するプログラムを指す。Uellenberg氏のPongは、これを一歩進めて、今の状態を書き換えた「次の自分」を出力する。手で動かすのが大変なら、付属のスクリプトを使えば、コンパイルと実行の繰り返しを自動でこなし、キーボードで遊べる。プレイヤーは右側のパドルを操作してコンピューターと対戦し、勝つと横スクロールのジャンプゲームに切り替わる仕掛けも入っている。
おもしろいのは、この入り組んだコードを、本人が手で書いたわけではない点だ。Uellenberg氏は、読みやすいコードを自作のプログラミング言語「Insert」で書き、そのコンパイラに、賞をとった難解なC言語のコードを生成させた。出力を小さくする最適化を重ねた結果、変数を切り詰めたり、繰り返す部分をまとめたりして、人には読みにくいコードになったという。本人は「これは難読化ではなく、コンパイラの出力だ」と説明している。Insertのコンパイラは、GitHubで公開されている。
ちなみに、このコンテストは、読みにくいコードをあえて競うことで、裏返しに読みやすいコードの大切さを伝える狙いで、1984年に始まった。正式名称はInternational Obfuscated C Code Contest、略してIOCCCと呼ばれる。

