Cコンパイラといえばとてつもなく複雑なプログラムというイメージがあります。ところが、このCコンパイラを(サブセットとはいえ)わずか500行ほどのCのソースコードで実現した「CC500」名付けられたプログラムが公開されています。
ソースコードは可読性を維持するためにつけられた空行やコメントを含めると、実際は750行ほどになるそうですが、それでもこれだけコンパクトなソースコードで実行可能なELFバイナリ(Linux用のバイナリ)を生成できるのは興味深いのではないでしょうか。
以下実際にLinuxでコンパイルしてみました。
自己コンパイルできる
このコンパイラはC言語のサブセットで、自分自身のソースコードをコンパイルできるところがおもしろいところです。まず「cc500_1」という実行ファイルを生成します。
gcc cc500.c -o cc500_1
生成された実行ファイル「cc500_1」を使って、自分自身のソースコード「cc500.c」をコンパイルすることができます。
./cc500_1 < cc500.c > cc500_2 chmod +x cc500_2
「cc500_2」から「cc500_3」、「cc500_4」、「cc500_5」と無限に続けていくことができます。
まとめ
CC500の配布元では、コンパイラの仕様や仕組み、さらには今後の課題など様々な情報が提供されています。
プログラミング言語/コンパイラ/ELFバイナリの情報などに興味を持っている方は参考すると有益な情報を入手できそうです。