从 CHICKEN 6 能期待什么

这是一篇关于 Chicken Scheme 下一个主要版本变化的文章,主要内容如下:

  • 引言:介绍文章是关于 Chicken Scheme 下一个主要版本 6.0.0 的变化,无论是否熟悉 Chicken Scheme 都能从中了解编程语言项目的开发和维护,无需之前的 Chicken Scheme 知识,但熟悉编程语言设计和 Lisp 语言常用术语会有帮助。
  • 版本:Chicken 使用通常的主版本.次版本.补丁版本号方案,重大版本变更才破坏与旧版本的兼容性,避免破坏的过程有时具有挑战性,如提供新旧两种实现,分阶段删除功能等,主要版本变更时会创建新的“鸡蛋”仓库镜像,同时更改“二进制版本”。开始 Chicken 主要版本 6 是为了引入新功能,如全面支持 Unicode 字符串和符合 R7RS 标准。
  • Unicode:Chicken 以前的主要缺点是不支持全 Unicode 字符串,现在决定内部使用 UTF-8 表示,因为许多操作系统和应用已支持 UTF-8,具有向后兼容性和存储要求低的优点,但字符查找是线性复杂度,通过简单的缓存槽来避免重复扫描。还介绍了字符串表示的当前存储方式及不同的替代表示,以及处理外部接收的字符串(如遇到无效 UTF-8 字节序列的处理方式)和 Windows 平台上的 Unicode 处理。
  • 端口编码:访问文件时可读写 8 位编码或二进制数据,还可支持其他编码,通过将“编码”属性与“端口”关联来实现,内部使用端口方法表,主要变化是用处理字节向量的方法替换字符串 I/O 方法,可注册额外的编码,R7RS 未定义二进制 I/O 标准过程是否可在文本端口上操作,Chicken 不限制操作,可读写字节向量。
  • R7RS 支持:Chicken 6 的第二个大变化是符合 R7RS(小)标准,以前通过扩展库提供,现在默认提供大部分语法定义,但在编译单元或解释环境中默认可用的内容是个问题,如 scheme 现在是 R7RS(scheme r5rs)库模块的别名,某些功能已从(chicken base)移动到(scheme base),导致一些兼容性问题,如记录类型变为生成式,字符串字面量中的十六进制转义序列需以分号结尾等。
  • Foreign Function Interface 变化:Chicken 的 FFI 易于使用,主要变化是允许按值传递和返回 C 结构和联合到外部代码,内容在字节向量中进出并包装在块中,组件不能在 Scheme 中直接操作,但可传递给其他外部函数,还可直接传递 C99 复数。
  • 平台支持和构建系统:引入两个主要变化,一是有了一个合适的配置(“configure”)脚本,取代以前通过 make(1)传递所有构建参数的方式,遵循许多 GNU 程序的惯例,旧方式仍可工作但已弃用;二是清理了 Windows 系统上工具链的混乱,现在有一个官方支持的“w64devkit”工具链,简化了构建和包管理工具,同时仍支持在 Windows Subsystem for Linux(WSL)和 Cygwin 上构建。
  • 次要变化:进行了不少次要更改,以提高系统的稳健性或标准合规性,如 syntax-error 现在是一个宏,csc 编译器驱动正确传递参数,chicken-install 包管理器锁定构建缓存目录,feathers 调试器从核心系统中移除并重新打包为一个“鸡蛋”等。
  • 未来方向:每个主要版本都是修复代码库中长期问题和解决不良设计决策的机会,Chicken 已近 25 年,一直在努力改进,最终目标是使其更稳健和易于使用,性能改进是次要的,强标准合规是要求,避免核心系统的依赖,同时对 Scheme 标准进行了一些感慨,认为追求全面的标准会使 Scheme 失去其成功的特点。
  • 致谢:感谢雇主 bevuta IT GmbH 赞助准备 Chicken 的新主要版本。
阅读 33
0 条评论