Chicken (Scheme)

目的

从Chicken的标志下的口号可以看出它的目的非常明确：一个可移植的实用Scheme系统。
Chicken的主要目的是将Scheme应用到业界的软件中。Scheme在计算机科学课程和编程语言实验中非常有名，但在工业界却没有什么应用。 Chicken社区已经编写了大量的库，能胜任各类任务。Chicken的维基（底层也是Chicken编写）有一个用Chicken写的软件的列表
Chicken的另一个目的是可移植。通过编译成C代码，Chicken写的程序可以编译到常见的平台如Linux、Mac OS X和其他类Unix系统以及Windows和Haiku。它还内置程序和扩展的交叉编译功能使它能够在嵌入式系统上使用。

设计

和许多Scheme编译器一样，Chicken使用标准C作为中间语言。一个Scheme程序通过Chicken编译器翻译成C，然后一个C编译器将C程序编译成目标机器的机器码，生成一个可执行程序。C的通用性使它非常适合。
Chicken的设计灵感来自计算机科学家亨利·贝克的1944年论文，这篇论文提出了一个将Scheme翻译为C的新方案，把一个Scheme程序翻译成一个C函数。这些C函数从来不运行return语句；而是在结束时调用一个延续。这些延续由编译器计算获得，而且也是C函数，并作为参数传递给其他的C函数。
这些正是延续传递方式的核心。Baker的新想法是使用C调用栈来作为Scheme的堆。如此一来，一般的C的栈操作如自动创建变量、变长数组分配等就可以用上了。当栈满时就会触发一个垃圾回收机制。垃圾回收设计用的是Cheney算法，这种方法将所有的活跃延续和其他活跃的对象都复制到堆。尽管如此，C代码并不复制C栈中的帧，只复制Scheme对象，所以不需要了解C的实现。
总体而言，Scheme的堆有一个C栈作为“温床”，还有两个堆用来做generational垃圾回收。这种方式使得许多操作具备了C栈的速度，并且允许通过延续做简单的C调用。更重要的是，Baker的方案保证了渐进尾部递归，这是Scheme标准所要求的。

不足

大部分Chicken Scheme是遵守的R5RS的。
目前只能保证每个过程最多120个参数。在常见平台上，支持最多2048个参数。

扩展

Chicken有一个站点提供了大量的叫做eggs的附加的库和程序。这个eggs系统非常像RubyGems，并不集成到用户操作系统的软件包系统中去。