Chicken (Scheme)

维基百科,自由的百科全书
跳转至: 导航搜索
Chicken Scheme
Logo for Chicken Scheme
原作者 Felix Winkelmann
開發者 Chicken团队
初始版本 2000年7月20日;14年前 (2000-07-20)[1]
穩定版本 4.8.0 / 2012年9月24日;23個月前 (2012-09-24)
開發狀態 活跃的
编程语言 SchemeC
操作系统 跨平台
类型 编程语言
许可协议 BSD许可证
網站 call-cc.org
标准 R5RS (大部分)

Chicken是一个Scheme语言编译器解释器,能够将scheme代码编译成标准C代码。它基本上遵守R5RS标准并且提供了很多扩展。Chicken是一个采用BSD许可证自由软件

目的[编辑]

从Chicken的标志下的口号可以看出它的目的非常明确即:一个实用的可移植的Scheme系统

Chicken的主要目的是将Scheme应用到业界的软件中。Scheme在计算机科学课程和编程语言实验中非常有名,但在工业界却没有什么应用。[2] Chicken社区已经编写了大量的,能胜任各类任务。Chicken的维基(底层也是Chicken编写)有一个用Chicken写的软件的列表

Chicken的另一个目的是可移植。通过编译成C代码,Chicken写的程序可以编译到常见的平台如LinuxMac OS X和其他类Unix系统以及WindowsHaiku[3]。它还内置程序和扩展的交叉编译功能[4]使它能够在嵌入式系统上使用。

设计[编辑]

和许多Scheme编译器一样,Chicken使用标准C作为中间语言。一个Scheme程序被Chicken编译器翻译成C然后一个C编译器将C程序编译成目标机器的机器码,生成一个可执行程序。C的通用性使它非常适合。

Chicken的设计灵感来自一篇1994年的Henry Baker写的论文[5],这篇论文提出了一个新颖的将Scheme翻译为C的方案。一个Scheme程序被翻译成一个C函数。这些C函数从来不运行return语句;而是在结束时调用一个延续。这些延续由编译器计算得到,而且也是C函数并且被作为参数传递给其他的C函数。

这些正是延续传递方式的核心。Baker的新想法是使用C调用栈来作为Scheme的堆。这样,一般的C的栈操作如自动创建变量、变长数组分配等就可以用上了。当栈满时一个垃圾回收机制就被触发了。垃圾回收的设计用的是Cheney算法,这种方法将所有的活跃延续和其他活跃的对象都复制到堆[6]。尽管如此,C代码并不复制C栈中的帧,只复制Scheme对象,所以不需要了解C的实现。

总的来说,Scheme的堆有一个C栈作为”温床“,还有两个堆用来做generational垃圾回收。这种方式使得许多操作具备了C栈的速度,并且允许通过延续做简单的C调用。更重要的是,Baker的方案保证了渐进尾部递归,这是Scheme标准所要求的。

不足[编辑]

大部分Chicken Scheme是遵守的R5RS的。

目前只能保证每个过程最多120个参数。在常见平台上,支持最多2048个参数。

扩展[编辑]

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

另见[编辑]

参考[编辑]

  1. ^ Felix Winkelmann. Announcing the CHICKEN Scheme-to-C compiler [发布CHICKEN Scheme到C的编译器]. comp.lang.scheme (英文). 
  2. ^ what is Scheme used for? [Scheme有啥用]. Scheme FAQ. 
  3. ^ Portability [可移植性]. page on the Chicken wiki. 
  4. ^ Cross development [交叉开发]. Chicken manual. 
  5. ^ Baker, Henry CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A.. 
  6. ^ Cheney, C.J. A Nonrecursive List Compacting Algorithm [一个非递归的列表紧致算法]. CACM. 1970.Nov, 13 (11): 677–678. 

外部链接[编辑]