文章摘要
这篇文章介绍了SBCL(一种可自举的Common Lisp实现)的开发过程。它采用了一种独特的自举策略:不是仅从自身或其他语言引导,而是从多种Common Lisp实现中引导。作者阐述了这种策略的动机,讨论了实现过程中的技术细节,并评估了这种策略对实现开发和Common Lisp用户的技术及社会影响。
文章总结
SBCL:一种可合理引导的Common Lisp实现
作者:Christophe Rhodes(伦敦大学金史密斯学院计算系)
摘要
本文描述了一种Common Lisp实现(SBCL)的开发过程,其独特之处在于它既不完全依赖自身引导,也不依赖其他单一语言,而是能够从多种Common Lisp实现中进行引导。文章阐述了这种引导策略的动机,讨论了实现过程中的技术细节,并评估了该策略对实现开发和Common Lisp用户群体产生的技术与社会影响。
主要内容
1. 背景与现状
- Lisp语言家族历史悠久,现代主要方言为Scheme和Common Lisp
- 当前Common Lisp实现可分为两类:
- 主要使用非Lisp语言实现(如C、Java等)
- 主要使用Lisp自身实现(多数依赖镜像引导技术)
2. SBCL概况
- 源自CMU Common Lisp(CMUCL),1999年由Bill Newman发起
- 代码规模:
- 标准库:9万行Lisp代码
- 编译器:6万行Lisp代码
- 平台相关代码:每个架构1-2万行
- CLOS实现:2万行
- C/汇编代码:3.5万行(主要用于垃圾回收和信号处理)
3. 构建过程
SBCL采用独特的跨编译器构建策略:
- 阶段一:使用宿主Lisp编译生成跨编译器(xc)
- 阶段二:生成目标系统头文件和运行时程序
- 阶段三:使用跨编译器重新编译所有Lisp源文件
- 阶段四:通过伪加载(pseudo-loading)构建初始内存映像
- 阶段五:执行冷启动初始化,完成最终系统构建
关键技术点:
- 使用sb!前缀包名隔离构建环境
- 特殊处理eval-when和make-load-form
- 处理不同Lisp实现的数值类型差异
4. 优势与挑战
优势: - 降低贡献门槛,促进社区发展 - 简化重大修改(如类型系统调整) - 支持从多种Common Lisp实现构建
挑战: - 构建时间较长(需编译两次) - CLOS实现存在元循环依赖问题 - 处理不同宿主Lisp的兼容性问题
5. 结论
SBCL证明了使用Common Lisp自身实现Common Lisp编译器的可行性,其可重复的构建过程降低了开发门槛,促进了社区发展。未来工作包括改进构建确定性、完善CLOS引导机制等。
致谢
感谢项目创始人Bill Newman和所有贡献者,以及PPARC和EPSRC的研究支持。
评论总结
评论总结:
- SBCL的活跃开发与优化
- 观点:SBCL(Steel Bank Common Lisp)正在积极开发,性能优秀
- 论据: "SBCL seems pretty actively developed. A proposal for coroutines implementation appeared recently"(praptak) "SBCL is lovely and very well optimised...it just works and it is so easy to work with and debug"(anonzzzies)
- Lisp/Scheme的实际应用疑问
- 观点:初学者对Lisp家族语言的实际用途存在疑问
- 论据: "what is this actually used for and do people build anything with lisp???"(krishSingaria)
- Scheme与Common Lisp的对比
- 观点:Scheme更简洁优雅,但Common Lisp更适合实际生产
- 论据: "I think I agree with the push for minimalism...for my own personal pleasure I will always prefer Scheme"(rusakov-field) "If someone put a gun to my head...I will go with CL to save my life"(rusakov-field)
- 开发方式讨论(图像vs源码)
- 观点:Common Lisp支持图像化开发方式,引发是否完全替代源码的疑问
- 论据: "Am I reading this right that people can (and do??) use images as a complete replacement for source code files?"(meken)
注:所有评论均未显示评分(None),主要讨论围绕Lisp语言家族的技术特性和使用体验展开。