Я не могу найти ни одного источника, который бы описывал отдельные фазы компилятора SBCL. Какие ресурсы, например документы, описывают эти этапы компилятора SBCL?
Компилятор Phases SBCL
Ответы (1)
Статья Фила Кунга Начало взламывать SBCL содержит хорошее описание того, как начать работу над внутренними компонентами SBCL. В разделе о компиляторе он пишет:
Поиск места, где живет компилятор
Работа над самим компилятором требует немного больше работы. Я думаю, что лучше всего пойти в
src/compiler/main.lisp
и найтиcompile-component
.ir1-phases
зацикливается на компоненте и выполняет высокоуровневую оптимизацию до точки фиксации (или мы устанем ждать), а%compile-component
обрабатывает преобразование в IR2, а затем в машинный код. Конвейер компиляции практически не изменился с тех пор, как была написана статья о Python, и каждая подфаза имеет свою собственную функцию (и файл). М-. на вещах, которые звучат интересно, вероятно, лучший подход на уровне IR2.
Документ Python, который упоминается там, связан ранее в статье:
Изучение источника
Я часто вижу, как новички пытаются читать исходный код, как книгу, и, как только они понимают, что кода много, пытаются выяснить, в каком порядке читать исходный код. Я не думаю, что это лучший подход. SBCL довольно огромен, и я сомневаюсь, что кто-либо одновременно держит в голове всю систему целиком. "Компилятор Python для CMU Common Lisp" по-прежнему полезен, поскольку обзор, а руководство по внутреннему устройству SBCL является хорошим дополнением. Как только вы приблизитесь к логике начальной загрузки, Кристоф Роудс «SBCL: Sanely-Bootstrappable Common Lisp” помогает понять восклицательные знаки. Более того, я считаю, что предпочтительнее [sic] начать с малого, узнать ровно столько, сколько нужно для выполнения текущей задачи, и признать, что некоторые вещи просто работают, не спрашивая, как (пока).
Вас, вероятно, особенно заинтересует Раздел 8, Фазы компиляции из книги «Компилятор Python для CMU Common Lisp».