本文介绍了一个名为CRUNCH的新项目,这是一个针对Scheme语言静态类型子集的编译器,具体来说,是R7RS(小型)标准。
**背景**
CRUNCH编译器基于CHICKEN Scheme系统,生成可移植的C99代码,可在任何拥有良好C编译器的平台上编译和执行。作者Felix Winkelmann受到PreScheme恢复项目的启发,该项目旨在现代化PreScheme,一个用于Scheme的静态类型编译器,用于Scheme48实现。作者希望通过CRUNCH弥合Scheme系统中高效静态类型编译器的空白。
**CRUNCH的特点**
CRUNCH的目标是提供一个小型、可移植的编译器,生成尽可能“自然”的C代码,并具有最少的依赖项和运行时系统。它专注于生成高效的代码,即使牺牲了一些Scheme语言的强大功能。
**安装**
CRUNCH仅适用于CHICKEN 6版本,需要构建并安装包含该版本源代码的开发快照。
**使用方法**
CRUNCH可以通过批处理编译器将Scheme转换为独立的C程序,也可以在编译时用于嵌入Scheme代码片段。编译器本身也作为一个库函数公开,允许在各种场景中将Scheme程序转换为本地代码。
**模块系统和CHICKEN集成**
CRUNCH利用CHICKEN的模块系统和语法元编程功能。在CHICKEN模块中定义的语法可以在CRUNCH代码中使用,反之亦然。CRUNCH编译的代码可以生成类似于CHICKEN的“导入库”,以实现模块的单独编译。
**限制**
CRUNCH对编译的Scheme代码有一些限制,例如不支持多值、一等延续、闭包等。虽然限制较多,但仍可以编译大量的Scheme代码。
**数据类型**
CRUNCH支持的基本数据类型包括整数、浮点数、复数、布尔值、字符、指针、过程类型、字符串、向量、结构体和联合体。
**运行时系统**
CRUNCH的运行时系统非常小,包含在一个C头文件中。它支持UNICODE,并提供了一个单独的C文件用于UNICODE相关的操作。
**优化**
CRUNCH提供了一些优化,例如类型系统、单态化优化、内联扩展、Lambda提升等。
**性能**
CRUNCH编译的代码性能应该与Scheme代码直接翻译成C代码的性能相当。
**调试器**
CRUNCH包含一个静态调试器,提供图形用户界面,用于分析类型错误。
**与PreScheme的区别**
CRUNCH受到PreScheme的启发,但有一些显著的区别,例如CRUNCH更符合R7RS(小型)标准,并处理UNICODE字符和字符串,并与CHICKEN紧密集成。
**未来计划**
CRUNCH未来计划包括支持多值、改进可选参数、提供POSIX libc系统调用和库函数的原语等。
**免责声明**
CRUNCH目前处于alpha阶段,可能存在错误和不足。