
ГЛАВА 5
ВЫЧИСЛЕНИЯ НА РЕГИСТРОВЫХ МАШИНАХ
Моя цель — показать, что небесная
машина не некое божественное живое
существо, а скорее часовой механизм (а
тот, кто верит, что у часов есть душа,
приписывает славу творца творению),
поскольку почти все из ее
многочисленных движений вызываются
простейшей материальной силой, так же,
как все движения часов вызываются
весом гири.
Иоганн Кеплер
(письмо к Герварту фон Гогенбургу, 1605)
Эта книга начинается с изучения процессов и с описания процессов в терминах
процедур, написанных на Лиспе. Чтобы объяснить значение этих процедур, м ы последо-
вательно использовали несколько моделей вычисления: подстановочную модель из гла-
вы 1, модель с окружениями из главы 3 и метациклический интерпретатор из главы 4.
Изучая последний, мы по большей части сняли покров тайны с деталей интерпретации
лиспоподобных языков. Однако даже метациклический интерпретатор оставляет многие
вопросы без ответа, поскольку он не проясняет механизмы управлен ия Лисп-системы.
Напри мер, интерпретатор не показывает, как при вычислении подвыражения удается вер-
нуть значение выражению, это значение использующему, или почему одни рекурсивные
процедуры порождают итеративные процессы (то есть занимают неизменный объем па-
мяти), в то время как другие процедуры порождают рекурсивные процессы. Эти вопросы
остаются без ответа потому, что метациклический интерпретатор сам по себе является
программой на Лиспе, а следовательно, наследует управляющую структуру нижележа-
щей Лисп-системы. Чтобы предоставить более полное описание управляющей структуры
вычислителя Лиспа, нам нужно работать на более элементарном уровне, чем сам Лисп.
В этой главе мы будем описывать процессы в терминах пошаговых операций тради-
ционного компьютера. Такой компьютер, или регистровая машина (register machine),
последовательно выполняет команды (instructions), которые работают с ограниченным
числом элементов памяти, называемых регистрами (registers). Типичная команда реги-
стровой машины применяет элементарную операцию к содержимому нескольких реги-
стров и записывает результат еще в один регистр. Наши описания процессов, выполняе-
мых регистровыми машинами, будут очень похожи на «машинный язык» обыкновенных
компьютеров. Однако вместо того, чтобы сосредоточиться на машинном языке какого-то
конкретного компьютера, мы рассмотрим несколько процедур на Лиспе и спроектируем
специальную регистровую машину для выполнения каждой из этих процедур. Таким об-
разом, мы будем решать задачу с точки зрения архитектора аппаратуры, а не с точки