toge's diary

コンピュータ関連の趣味をつらつらと。

Tiny C Compiler

http://fabrice.bellard.free.fr/tcc/

gccの9倍コンパイル・コード生成が速いコンパイラ
Linux Kernel(バージョンが不明)が10秒で出来るらしい。
x86プラットフォームがメインだけどTMS320C67xxとか、ARMにも対応しているそうな。
ついでにライセンスもLGPLと太っ腹。

プリプロセスも含めて1passでコンパイルするので高速なんだそうな。
ついでにlibtccという形でライブラリが提供されていて、ネイティブコード生成・実行が出来る。
コンパイルのついでに下みたいにシンボルの追加まで出来てしまう。

// tccを初期化
s = tcc_new();
tcc_set_output_type(s, TCC_OUTPUT_MEMORY);

// 文字列をコンパイル
tcc_compile_string(s, my_program);

// add関数を追加する
tcc_add_symbol(s, "add", (unsigned long)&add);
tcc_relocate(s);

// foo関数を取得して、実行する(foo関数はmy_programの中で定義した関数)
tcc_get_symbol(s, &val, "foo");
func = (void *)val;
func(32); 

bitWalkさんのTinyCC : 簡単なベンチマークテストを見ると最適化しないgccの8割程度。ということはだいたい1/2, 1/3程度の速度で実行できるんでしょうね。

これは便利だね。惜しむらくはPowerPCに対応していないところか。
組み込みスクリプトとして使うには、なんでもできるC言語を制限できないことと、スクリプト言語としてC言語はちと不便というところか。