我找不到任何描述 SBCL 编译器各个阶段的来源。哪些资源(例如论文)描述了 SBCL 编译器的这些阶段?
Phil Khoung 的文章 Starting to Hack on SBCL 很好地描述了如何开始研究 SBCL 内部结构。 在有关编译器的部分中,他写道,
查找编译器所在位置
编译器本身的工作量更大。我认为最好的方法是进入
并寻找src/compiler/main.lisp
。compile-component
在组件上循环并执行高级优化,直到固定点(或者我们厌倦了等待),而ir1-phases
处理到 IR2 的转换,然后到机器代码。自 Python 论文撰写以来,编译管道并没有真正改变,每个子阶段都有自己的函数(和文件)。 M-。听起来有趣的事情可能是 IR2 级别的最佳方法。%compile-component
文章前面提到的 Python 论文有链接:
探索源头
我经常看到新手尝试像阅读一本书一样阅读源代码,并且一旦他们意识到有很多代码,就尝试找出阅读源代码的良好顺序。我认为这不是最好的方法。 SBCL 相当庞大,我怀疑是否有人能够同时在头脑中掌握完整的系统。 RAM 的“The Python Compiler for CMU Common Lisp” 作为概述仍然有用,SBCL 的内部手册 是一个很好的补充。一旦您接近引导逻辑,Christophe Rhodes 的“SBCL:一个健全的可引导 Common Lisp” 有助于理解感叹号。除此之外,我认为最好是从小处开始,学习足以完成当前任务的知识,并接受某些事情只是有效的,而不是询问如何(目前)。
您可能会对“CMU Common Lisp 的 Python 编译器”中的第 8 节,编译阶段特别感兴趣。