Original author(s) | Felix Winkelmann |
---|---|
Developer(s) | The CHICKEN Team |
Initial release | July 20, 2000 |
Stable release |
4.11.0 / May 28, 2016
|
Development status | Active |
Written in | Scheme and C |
Operating system | Cross-platform |
Standard(s) | R5RS (mostly), R7RS (not in core) |
Type | Programming language |
License | BSD License |
Website | call-cc.org |
CHICKEN is a compiler and interpreter for the Scheme programming language that compiles Scheme code to standard C. It is mostly R5RS compliant and offers many extensions to the standard. The newer R7RS standard is supported through an extension library. CHICKEN is free software available under the BSD license. It is implemented mostly in Scheme, with some parts in C for performance or to make embedding into C programs easier.
CHICKEN's focus is immediately clear from its tagline: "A practical and portable Scheme system".
CHICKEN's other goal is to be portable. By compiling to portable C (like Gambit and Bigloo), programs written in CHICKEN can be compiled for common popular platforms like Linux, Mac OS X and other Unix-like systems as well as Windows, Haiku and the mobile platforms iOS and Android. It also has built-in support for cross-compilation of programs and extensions, which allows it to be used on various embedded platforms.
Like many Scheme compilers, CHICKEN uses standard C as an intermediate language. A Scheme program is translated into C by the CHICKEN compiler, and then a C compiler translates the C program into machine code for the target architecture, producing an executable program. The universal availability of C makes it ideal for this purpose.
CHICKEN's design was inspired by a 1994 paper by Henry Baker that outlined an innovative strategy for Scheme compilation into C. A Scheme program is compiled into C functions. These C functions never reach the return statement; instead, they call a new continuation when complete. These continuations are C functions themselves and are passed on as extra arguments to other C functions. They are calculated by the compiler.