fbpx
维基百科

Chicken (Scheme实现)

Chicken(风格化为CHICKEN),是一个Scheme语言编译器解释器,能够将scheme代码编译成标准C代码。它基本上遵守R5RS标准并且提供了很多扩展。新近的R7RS标准是通过扩展支持的[2]。Chicken是一个采用BSD许可证自由软件

Chicken Scheme
语言家族Lisp/Scheme
實作者Chicken团队
发行时间2000年7月20日,​23年前​(2000-07-20[1]
当前版本
  • 5.3.0 (2021年11月18日)
實作語言SchemeC
操作系统跨平台
許可證BSD许可证
網站call-cc.org

关注 编辑

从Chicken的标志下的口号可以看出它的关注非常明确:“一个實用的可移植Scheme系统”。

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

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

设计 编辑

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

Chicken的设计灵感来自電腦科學家亨利·貝克英语Henry Baker (computer scientist)的1994年论文[7],这篇论文提出了一个将Scheme翻译为C的新方案,把一个Scheme程序翻译成一些C函数。这些C函数永远不会到达return语句;而是在结束时调用一个新的续体。这些续体是C函数,並作为参数传递给其他的C函数。它们是由编译器计算出来的。

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

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

不足 编辑

Chicken Scheme在大部份上遵守了R5RS,但具有一些明显的限制和偏差[9],比如目前只能保证每个过程最多1000个参数。R7RS兼容性是通过扩展库提供的[2]

核心系统有对UTF-8字符的基本支持,但是字符串索引和操纵过程不察觉UTF-8。存在增加支持完全的UTF-8察觉的扩展库[10]

扩展 编辑

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

另见 编辑

参考 编辑

  1. ^ Felix Winkelmann. Announcing the CHICKEN Scheme-to-C compiler [发布CHICKEN Scheme到C的编译器]. comp.lang.scheme. [2012-10-28]. (原始内容于2012-11-10) (英语). 
  2. ^ 2.0 2.1 evhan. r7rs (Chicken manual). Chicken Scheme. 2018-11-09 [2019-02-28]. (原始内容于2022-12-22). 
  3. ^ what is Scheme used for? [Scheme有啥用]. Scheme FAQ. [2012-10-28]. (原始内容于2011-12-11). 
  4. ^ 列表(页面存档备份,存于互联网档案馆
  5. ^ Portability [可移植性]. page on the Chicken wiki. [2012-10-28]. (原始内容于2012-10-01). 
  6. ^ Cross development [交叉开发]. Chicken manual. [2012-10-28]. (原始内容于2012-11-12). 
  7. ^ Baker, Henry . [2021-12-23]. (原始内容存档于2022-03-27). 
  8. ^ Cheney, C.J. (PDF). CACM. Nov 1970, 13 (11): 677–678 [2021-12-23]. (原始内容 (PDF)存档于2022-01-19). 
  9. ^ Bex, Peter (sjamaan); Winkelmann, Felix. Confirmed deviations (Chicken manual). Chicken Scheme. 2016-05-28 [2019-02-28]. (原始内容于2022-11-10). 
  10. ^ Bex, Peter (sjamaan); kooda; mario; svnwiki; wasamasa; kon; mario. utf8 (Chicken manual). Chicken Scheme. 2018-08-11 [2019-02-28]. (原始内容于2023-01-18). 
  11. ^ eggs(页面存档备份,存于互联网档案馆

外部链接 编辑

chicken, scheme实现, chicken, 风格化为chicken, 是一个scheme语言的编译器和解释器, 能够将scheme代码编译成标准c代码, 它基本上遵守r5rs标准并且提供了很多扩展, 新近的r7rs标准是通过扩展库支持的, chicken是一个采用bsd许可证的自由软件, chicken, scheme语言家族lisp, scheme實作者chicken团队发行时间2000年7月20日, 23年前, 2000, 当前版本5, 2021年11月18日, 實作語言scheme和c操作系统跨平. Chicken 风格化为CHICKEN 是一个Scheme语言的编译器和解释器 能够将scheme代码编译成标准C代码 它基本上遵守R5RS标准并且提供了很多扩展 新近的R7RS标准是通过扩展库支持的 2 Chicken是一个采用BSD许可证的自由软件 Chicken Scheme语言家族Lisp Scheme實作者Chicken团队发行时间2000年7月20日 23年前 2000 07 20 1 当前版本5 3 0 2021年11月18日 實作語言Scheme和C操作系统跨平台許可證BSD许可证網站call cc org 目录 1 关注 2 设计 3 不足 4 扩展 5 另见 6 参考 7 外部链接关注 编辑从Chicken的标志下的口号可以看出它的关注非常明确 一个實用的可移植Scheme系统 Chicken的主要关注是将Scheme应用到业界的软件中 Scheme在计算机科学课程和编程语言实验中非常有名 但在工业界却没有什么应用 3 Chicken社区已经编写了大量的库 能胜任各类任务 Chicken的维基 底层也是Chicken编写 有一个用Chicken写的软件的列表 4 Chicken的另一个关注是可移植 通过编译成C代码 Chicken写的程序可以编译到常见的平台 如Linux Mac OS X和其他类Unix系统以及Windows和Haiku 5 它还内置程序和扩展的交叉编译功能 6 使它能够在嵌入式系统上使用 设计 编辑和许多Scheme编译器一样 Chicken使用标准C作为中间语言 一个Scheme程序透過Chicken编译器翻译成C 然后一个C编译器将C程序编译成目标机器的机器码 生成一个可执行程序 C的通用性使它非常适合这种用途 Chicken的设计灵感来自電腦科學家亨利 貝克 英语 Henry Baker computer scientist 的1994年论文 7 这篇论文提出了一个将Scheme翻译为C的新方案 把一个Scheme程序翻译成一些C函数 这些C函数永远不会到达return语句 而是在结束时调用一个新的续体 这些续体是C函数 並作为参数传递给其他的C函数 它们是由编译器计算出来的 这些正是续体传递风格 英语 continuation passing style 的核心 Baker的新想法是使用C调用栈来作为Scheme的堆 如此一來 一般的C的栈操作如自动创建变量 变长数组分配等就可以用上了 当栈满时就會觸發一个垃圾回收机制 垃圾回收设计采用了Cheney算法 这种方法将所有的活跃续体和其他活跃的对象都复制到堆 8 尽管如此 C代码并不复制C栈中的帧 只复制Scheme对象 所以不需要了解C的实现 总體而言 Scheme的堆有一个C栈作为 温床 还有两个堆用来做分代垃圾回收 这种方式使得许多操作具备了C栈的速度 并且允许通过续体做简单的C调用 更重要的是 Baker的方案保证了渐进尾部递归 这是Scheme标准所要求的 不足 编辑Chicken Scheme在大部份上遵守了R5RS 但具有一些明显的限制和偏差 9 比如目前只能保证每个过程最多1000个参数 R7RS兼容性是通过扩展库提供的 2 核心系统有对UTF 8字符的基本支持 但是字符串索引和操纵过程不察觉UTF 8 存在增加支持完全的UTF 8察觉的扩展库 10 扩展 编辑Chicken有一个站点提供了大量的叫做eggs 11 的附加的库和程序 这个eggs系统非常像RubyGems 并不集成到用户操作系统的软件包系统中去 另见 编辑尾部递归 Cheney算法 Gambit Stalin 英语 Stalin Scheme implementation 参考 编辑 Felix Winkelmann Announcing the CHICKEN Scheme to C compiler 发布CHICKEN Scheme到C的编译器 comp lang scheme 2012 10 28 原始内容存档于2012 11 10 英语 2 0 2 1 evhan r7rs Chicken manual Chicken Scheme 2018 11 09 2019 02 28 原始内容存档于2022 12 22 what is Scheme used for Scheme有啥用 Scheme FAQ 2012 10 28 原始内容存档于2011 12 11 列表 页面存档备份 存于互联网档案馆 Portability 可移植性 page on the Chicken wiki 2012 10 28 原始内容存档于2012 10 01 Cross development 交叉开发 Chicken manual 2012 10 28 原始内容存档于2012 11 12 Baker Henry CONS Should Not CONS Its Arguments Part II Cheney on the M T A 2021 12 23 原始内容存档于2022 03 27 Cheney C J A Nonrecursive List Compacting Algorithm PDF CACM Nov 1970 13 11 677 678 2021 12 23 原始内容 PDF 存档于2022 01 19 Bex Peter sjamaan Winkelmann Felix Confirmed deviations Chicken manual Chicken Scheme 2016 05 28 2019 02 28 原始内容存档于2022 11 10 Bex Peter sjamaan kooda mario svnwiki wasamasa kon mario utf8 Chicken manual Chicken Scheme 2018 08 11 2019 02 28 原始内容存档于2023 01 18 eggs 页面存档备份 存于互联网档案馆 外部链接 编辑Chicken Scheme website 页面存档备份 存于互联网档案馆 The Chicken Wiki 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Chicken Scheme实现 amp oldid 75590631, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。