Chicken (Scheme)
多くのSchemeコンパイラと同様に、ChickenはC言語を中間言語として利用する。SchemeプログラムはまずC言語にコンパイルされ、その後ターゲットシステムのCコンパイラにより、実行可能形式(機械語)に変換される。C言語はほとんどのOS、CPUアーキテクチャでサポートされているので、ポータビリティを確保する観点から、必要な選択である。
Chickenの設計は、1994のHenry Bakerの論文で紹介されている、SchemeからC言語に変換する新しい手法に触発されている。SchemeのプログラムはC言語の関数にコンパイルされる。このCの関数は決してreturnすることがなく、代わりに返り値を継続の引数として渡し、その継続を呼び出すことで、関数から脱出する。呼び出される継続はCの関数が呼ばれるときの引数として与えられる。このような継続渡しスタイルへの変換は、C言語へのコンパイラによって自動的になされる。
このような変換は継続渡しスタイルとして以前からあったものだが、Bakerの新しいアイディアは、CのコールスタックをSchemeのヒープとして活用するという点にあった。この方式では、Cのスタック操作(自動変数のためのスタック領域割り当てや、変数のサイズに基づく固定長配列のアロケーションなど)を使用することができる。