セキュキャンから帰ってきた。合宿中にあったあんなことやこんなことを家族に話していたら、そもそも私がセキュキャンで何をしてきたのかという話になった。セルフホストのCコンパイラを作ってきたんだと言ったら、納得の行かない顔をしている。どうやらCコンパイラを自作することに価値を見いだせないようだ。無理もない。技術界隈でよく話題になる「車輪の再発明」だと言われれば、少々返答に困る。
Cコンパイラは、Cというプログラミング言語で書かれたプログラムを機械語に変換する、いわば翻訳者のようなソフトウェアである。プログラミング言語は人間にとって分かりやすいが機械には読めず、機械語は機械が読めるが人間には読みにくい。いわば、人間と機械の橋渡しをするためのものだ。 C言語は生み出されてから久しいから、もちろんすでに実用的なCコンパイラが存在しており、かなり精度のいい機械語を生成してくれる。正直、既存のCコンパイラに特に不満はない。それどころか、私が手作りするようなCコンパイラでは、その速度や生成する機械語の良し悪しで太刀打ちできるはずもない。なぜそれを、一から手作りする必要があるのだろうか。一見、何の意味もない行為に思える。
コンパイラは魔法だ。自然言語のように書かれたテキストを自律的に解釈する。規約どおりに書けばちゃんと動く。しかしこの魔法が、そんじょそこらの魔法と大きく違うのは、中身を理解できるということである。理論があり、実装がある。「ホゲホゲフガフガ」と唱えたら水が出てくる、論理もへったくれもないおとぎ話とは大違いだ。
理解ができるなら、それを応用することだって可能である。例えば機械語(ないしそれを少し簡単化したアセンブリと呼ばれるもの)の知識を、コンピュータの理解に役立てることができるだろう。Cプログラムを解析する部分の理論を、整形されたデータフォーマットの解析に使うことができるだろう。6000行規模のCプログラムを書いた経験を元に、次に書く同じような規模のプログラムの設計の見通しを立てることが出来るだろう。
結局、この「魔法」を理解してみたいというのが一番大きい動機だろうか。他にも「大きなプログラムを書いてみたい」とか「アセンブリに触れてみたい」とか、考えれば種々あるけれど、一番大きいのは「魔法を解明したい」という単純な欲求かも知れない。ちょうど、小学生がマジックのタネを知りたいような。
もちろん、こんな小難しいことを考えながら開発したわけではない。ただ、「それがぼくには楽しかったから」